• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Где прочитать о логике реализации старта исполнения программы?

nikolz

Well-known member
Добрый день,
вопрос не совсем по теме,
кто подскажет,
где прочитать (желательно название документа или расскажите своими словами, если такого документа нет)
о логике реализации старта исполнения программы
(т е что программно происходит при сигналеRST) и назначении и взаимодействии (на какой адрес пришли, что сделали, куда ушли)
модулей : clear_eep.bin, esp_init_data_default.bin ,blank.bin и т д ,
до момента начала исполнения программы пользователя.
Спасибо
 

pvvx

Активный участник сообщества
Стартует ROM-BIOS, по вектору reset. Она смотрит на выставленные пины, и в зависимости от их состояния - "притяжек" к питанию или gnd, описанных в Web_Base4\xlam\ESP8266_reg\pin_reg.xlsx и обычно грузится с flash. В flash имеется заголовок и по нему грузятся указанные в нем куски. Обычно это 3 куска: один - код в IRAM и два в разную область RAM: rodata - данные, которые требуют инициализацию в СИ.
При загрузке ROM-BIOS проверяет контрольную сумму этих кусков и если всё хорошо, то далее запускается процедура из заголовка flash - void call_user_start(void) она находится в iram.
Далее открываете Web_Base4\xlam\libs\main\app_main.c и смотрите. Там всё указано. После отработки вызова Cache_Read_Enable(0,0,1) из ROM-BIOS остальная flash становится доступной и не требует загрузки (и не проверяется).
В startup() вызывается user_init() - это уже ваш код. По окончанию инициализации вызывается done_cb(), который вы можете назначить в user_init().
Назначить свой адрес запуска для ROM-BIOS можно изменив ENTRY(call_user_start) в eagle.app.v6.ld, к примеру для того чтобы убить часть сообщений из SDK в UART, путем указания system_set_os_print(0) и последующим запуском call_user_start() или для "импульсного" опроса датчиков с выключением WiFi при просыпании после deep-sleep и дальнейшем засыпании с целью значительного уменьшения потребления за счет времени активности (без исполнения кривого кода инициализации всего SDK). Аналогично это решается заменой загрузчика с заголовком во flash.

PS: Указанные файлы находятся тут. Какие сегменты и что означают - здесь. Код СИ в xlam\libs исходниками не является - это беглый реверс кусков закрытых библиотек из SDK 1.0.x в качестве перевода на СИ.
 
Последнее редактирование:
Сверху Снизу