реклама на сайте
подробности

 
 
> WinAVR, Что-то не пойму, библиотечной функции нет...
manul78
сообщение Jan 29 2010, 22:26
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Ковыряю ATMEL-овскую "демку" и не пойму никак...

Код
     int main(void)
{
    Usb_enable_regulator();
    wdtdrv_disable();
    start_boot_if_required();
    Clear_prescaler();                     // Проблемная функция
    scheduler();
    return 0;
}

#ifdef  __GNUC__
// Locate low level init function before RAM init (init3 section)
// and remove std prologue/epilogue
char __low_level_init(void) __attribute__ ((section (".init3"),naked));
#endif

#ifdef __cplusplus
extern "C" {
#endif
char __low_level_init()
{
Clear_prescaler();             // Проблемная функция
return 1;
}
#ifdef __cplusplus
}
#endif


Конкретно WinAVR ругается сначала warning-ом, затем ошибкой. Функция Clear_prescaler();
Она определяется в заголовочном файле #include "lib_mcu/power/power_drv.h"
и выглядит вот так:

Код
#ifdef  __GNUC__
   #define Clear_prescaler()                       (clock_prescale_set(0))
#else
    #define Clear_prescaler()                       (Set_cpu_prescaler(0))
#endif

#ifdef  __GNUC__
   #define Set_cpu_prescaler(x)                        (clock_prescale_set(x))
#else
  extern void Set_cpu_prescaler(U8 x);
#endif


И теряется дальше где-то в "дебрях" WinAVR...
Ошибку выдает об отсутствии clock_prescale_set
В принципе, мне не важно, я её отключаю и всё равно программа работает. Но интересно. Функция вызываемая в скобках, это что ? Внутренние какие-то дела WinAVR ? (clock_prescale_set(0)) ?

Ещё интересуют выкусывания по частям стандартных "заготовок" WinAVR:
Код
// Locate low level init function before RAM init (init3 section)
// and remove std prologue/epilogue
   char __low_level_init(void) __attribute__ ((section (".init3"),naked));

Как работает данная функция ?

Сообщение отредактировал manul78 - Jan 29 2010, 22:41


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Jan 29 2010, 23:23
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(manul78 @ Jan 30 2010, 01:26) *
...это что ? Внутренние какие-то дела WinAVR ? (clock_prescale_set(0)) ?
Запись в CLKPR -- Clock Prescale Register (не на всех МК). Определена в avr/power.h.

Цитата(manul78 @ Jan 30 2010, 01:26) *
Код
char __low_level_init(void) __attribute__ ((section (".init3"),naked));

Как работает данная функция ?
Код тела фукнции линкер вставит в .init3. Можно считать, что функция в итоге вызовется единожды во время выполнения стартап-кода.
(http://www.nongnu.org/avr-libc/user-manual/mem_sections.html)
(http://www.nongnu.org/avr-libc/user-manual/FAQ.html)
Go to the top of the page
 
+Quote Post
manul78
сообщение Jan 30 2010, 00:12
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(SysRq @ Jan 30 2010, 02:23) *
Запись в CLKPR -- Clock Prescale Register (не на всех МК). Определена в avr/power.h.


Спасибо ! Разобрался...
У меня стоит WinAVR 2007 года выпуска. Держу исключительно из за понравившегося мне компилятора данной версии,
хороший код генерит, и компактный.
А "таргет" мой AT90USB162... smile.gif Их в те времена еще не было. Из за этого и весь глюк.
Перекинул файл power.h из 2009-ой версии в 2007-ую и всё заработало... Ошибок нет.
Самое интересное, стал разбираться - в 2007-ом WinAVR вообще нет AT90USB82 - 162 моделей. smile.gif Но код генерит !
И рабочий код !
Если-бы не "прескаллер" то и не заметил-бы вообще... smile.gif

За ссылки спасибо, вот не знал, что можно свои start_up функции вставлять. Как-то отложилось в голове, что стандартную
процедуру начальной инициализации можно только отключить полностью.


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016