Ковыряю 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
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.