2016-08-10 4 views
-1

Я использую 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

Большое спасибо.

+1

Когда чип включен или перезагружен, он переходит к (определенному адресу) в памяти. Компоновщик упорядочивает код запуска для сопоставления с этим адресом. – EOF

+0

'_start' (или' start'), скорее всего, будет меткой в ​​файле сборки, где вы также найдете вызов функции C, которую вы нашли. –

+0

@EOF Спасибо за отзыв; да, но я хочу знать, какой код выполняется до основного, а в случае «кода, выполняемого перед основным», где он вызывается в скрипте компоновщика или где именно? – Mouin

ответ

0

Не работал с Atmel mcu, но я принимаю его так же, как и другой.

1- где можно найти вызовы _init_startup?

  • Вы не можете, его абсолютный адрес прыгать. вы можете найти его в векторе сброса флэш-памяти MCU.

2 Почему в сценарии компоновщика у меня есть ВХОД (_start) вместо ENTRY (main)?

  • Поскольку первая инструкция кода находится по адресу _start. после первого запуска кода, он должен иметь команду перехода, указывающую на главную.

3- Где я могу найти определение _start?

  • его вероятно зарезервированный word.try ищите его в параметрах компилятора.
+0

Спасибо за отзыв, однако все, что мне нужно, _start и init_startup находится в [crt0.s] (https://github.com/avrxml/asf/blob/master/thirdparty/lodepng/example/crt0.S) , как @ deamentiaemundi указал – Mouin

Смежные вопросы