[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Уважаемые!
Меня интересуют процедуры старта кода, написанного на языке высокого уровня, разных производителей компиляторов.
Обычно, они должны включать в себя инициализацию локальных важных регистров (например запретить watchdog timer), инициализацию глобальных переменных и очистку не инициализированных, после чего должен осуществляться переход к main():
Например:int a = 5;
long b;
int main()
{...}
После сборки (и последующего дизассемблирования) должны получить что то вроде:
reset:
; init registers, disable watchdog
; copy from data_start to bss_start with data_len: a <- 5
; clear bss_end with an appropriate length: b <- 0
; jump to main
main:
.....
Вот... Меня в основном интересуют такие вещи:
1. Насколько "гранулированы" эти процедуры у разных вендоров? (например инициализация регистров, инициализация данных и очиска глобальных переменных могут быть три различные процедуры)
2. Всегда ли и у каких вендоров производится и в каком порядке производится и производится ли вообще инициализация глобальных регистров? Или это отдано на откуп пользовательскому коду? (интересует на самом деле запрет watchdog и инициализация стэка)
3. Если Старт процессора индексированный (есть таблица прерываний и в РС загружается адрес из таблицы, например m68k, msp430, но не атмел АВР) то выделяется ли обработчик ресета в отдельный модуль? Если да, то сталктвался кто-либо и когда с его переопределением и как часто это надо было?
Заранее спасибо,
Дима
E-mail: info@telesys.ru