r44083
Member
Я заметил, что в ESP8266_RTOS_SDK v3.1, entry функция call_user_start распологается в irom вместо iram.
Моё приложение крешает при попытке перехода на call_user_start на буте (скорее всего потому что на буте нельзя обращаться к irom до инициализации SPI flash).
Я не использую 2nd bootloader, и моё приложение начинается с 0x40200000:
Вот стартовый лог:
0x40218780 это call_user_start согласно map файлу:
Если я добавляю IRAM_ATTR перед определением call_user_start, то креша больше нет, call_user_start выполняется, chip_boot также выполняется и инициализирует SPI flash, я получаю следующий лог при буте (но программа всё равно не работает, хотя судя по коду,
app_main вызывается):
0x40100304 это call_user_start согласно map файлу:
Ниже прикреплены elf, map и bin файлы.
P.S: так как я не использую 2nd bootloader, я не дефайнил CONFIG_BOOTLOADER_INIT_SPI_FLASH чтобы приложение само при старте проинициализировало SPI flash.
Почему call_user_start положили в irom вместо iram?
Почему программа может не работать, даже если call_user_start выполняется на буте?
Моё приложение крешает при попытке перехода на call_user_start на буте (скорее всего потому что на буте нельзя обращаться к irom до инициализации SPI flash).
Я не использую 2nd bootloader, и моё приложение начинается с 0x40200000:
Код:
irom0_0_seg : org = 0x40200000, len = 2M
Код:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 20480, room 16
tail 0
chksum 0x2b
load 0x3ffe8000, len 1340, room 8
tail 4
chksum 0x1c
load 0x3ffe853c, len 216, room 4
tail 4
chksum 0x9d
csum 0x9d
Fatal exception (0):
epc1=0x40218780, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
Fatal exception (0):
epc1=0x40218780, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
Fatal exception (0):
epc1=0x40218780, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
Код:
.text.call_user_start
0x40218768 0xfb out/obj/src/hal/ESP8266/ESP8266_RTOS_SDK/components\esp8266\source\startup.o
0x113 (size before relaxing)
0x40218780 call_user_start
*fill* 0x40218863 0x1
app_main вызывается):
Код:
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x40100000, len 20752, room 16
tail 0
chksum 0x0f
load 0x3ffe8000, len 1340, room 8
tail 4
chksum 0x35
load 0x3ffe853c, len 216, room 4
tail 4
chksum 0xb4
csum 0xb4
Код:
.iram1 0x401002d4 0x113 out/obj/src/hal/ESP8266/ESP8266_RTOS_SDK/components\esp8266\source\startup.o
0x40100304 call_user_start
*fill* 0x401003e7 0x1
P.S: так как я не использую 2nd bootloader, я не дефайнил CONFIG_BOOTLOADER_INIT_SPI_FLASH чтобы приложение само при старте проинициализировало SPI flash.
Почему call_user_start положили в irom вместо iram?
Почему программа может не работать, даже если call_user_start выполняется на буте?
Вложения
-
620.2 KB Просмотры: 0