Я использую Atmel studio 7.0.Как узнать начальную точку приложения
Я прихожу к этой функции при попытке undrestand кода freeRTOS.
/*
* Low-level initialization routine called during startup, before the main
* function.
* This version comes in replacement to the default one provided by the Newlib
* add-ons library.
* Newlib add-ons' _init_startup only calls init_exceptions, but Newlib add-ons'
* exception vectors are not compatible with the SCALL management in the current
* FreeRTOS port. More low-level initializations are besides added here.
*/
int _init_startup(void);
int _init_startup(void)
{
/* Import the Exception Vector Base Address. */
extern void _evba;
#if configHEAP_INIT
extern void __heap_start__;
extern void __heap_end__;
portBASE_TYPE *pxMem;
#endif
...
Как вы можете видеть в комментарии эта функция вызывается перед главным, однако я не undrestand, который вызывает эту функцию.
После некоторых исследований я сказал, что эта функция может быть вызвана в скрипте линкера, однако это было не так, то скрипт линкера выглядит следующим образом:
/* Default linker script, for normal executables */
OUTPUT_FORMAT("elf32-avr32", "elf32-avr32",
"elf32-avr32")
OUTPUT_ARCH(avr32:uc)
ENTRY(_start)
/* Do we need any of these for elf?
__DYNAMIC = 0; */
Я ожидаю найти звонки _init_startup в этом файл, как бы это было не так.
Суммируя здесь мои вопросы:
1-, где я могу найти вызовы _init_startup
2- почему в скрипте линкера я есть ENTRY(_start)
вместо ENTRY(main)
3- Где можно я нахожу определение _start
Большое спасибо.
Когда чип включен или перезагружен, он переходит к (определенному адресу) в памяти. Компоновщик упорядочивает код запуска для сопоставления с этим адресом. – EOF
'_start' (или' start'), скорее всего, будет меткой в файле сборки, где вы также найдете вызов функции C, которую вы нашли. –
@EOF Спасибо за отзыв; да, но я хочу знать, какой код выполняется до основного, а в случае «кода, выполняемого перед основным», где он вызывается в скрипте компоновщика или где именно? – Mouin