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

Нужна помощь Почему программа не работает и занимает >1MB FLASH?

r44083

Member
Здравствуйте,
Я пробую построить свой проект простой мигалки светодиодом со своим makefile. В итоге проект вроде бы собирается и создается бинарник. Я его прошиваю, но на GPIO2 постоянно высокий уровень, хотя этот пин должен периодически менять состояние.
Первой странностью является то, что от такой простой программы бинарник получается чуть более 1 МБ.
Ниже прикреплен файл с проектом (собирается по команде "make").
Помогите разобраться и запустить на плате этот пример.
P.S.: Исходный код файла ./src/main.c взят из примера "C:\Espressif\examples\blinky". Бинарники из этого проекта мигают светодиодом на GPIO2, а у меня нет.

Ниже лог построения проекта (закоментировать в makefile строку "OUTPUT = silent")
Код:
- building ESP8266-test0-GPIO...
make clean
make[1]: Entering directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
- cleaning...
(./out/obj:&(rd /s /q "./out/obj" 2> NUL))&
(./out/lst:&(rd /s /q "./out/lst" 2> NUL))&
(./out/bin:&(rd /s /q "./out/bin" 2> NUL))&
make[1]: Leaving directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
make make_dirs
make[1]: Entering directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
- making dirs...
(./out/obj:&(mkdir "./out/obj" 2> NUL))&
(./out/lst:&(mkdir "./out/lst" 2> NUL))&
(./out/bin:&(mkdir "./out/bin" 2> NUL))&
make[1]: Leaving directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
make ./out/bin/ESP8266-test0-GPIO.elf
make[1]: Entering directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
- compiling ./src/main.c...
xtensa-lx106-elf-gcc -c -D__ets__ -DICACHE_FLASH -I "." -I "./src" -I "./src/common" -I "./src/drv" -I "./src/extra-lib" -I "./src/hal" -I "./src/hal/ESP8266_SDK" -Os -g -std=gnu90 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -mno-serialize-volatile -Os -g -std=gnu90 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -mno-serialize-volatile -o out/obj/main.o ./src/main.c
- linking...
xtensa-lx106-elf-gcc ./out/obj/main.o -Teagle.app.v6.ld -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -o ./out/bin/ESP8266-test0-GPIO.elf
e:/soft/1-ready/sublimetext/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.1.0/../../../../xtensa-lx106-elf/bin/ld.exe: warning: cannot find entry symbol call_user_start; defaulting to 40100000
make[1]: Leaving directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
make ./out/bin/ESP8266-test0-GPIO.hex
make[1]: Entering directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
- making hex...
xtensa-lx106-elf-objcopy -O ihex ./out/bin/ESP8266-test0-GPIO.elf ./out/bin/ESP8266-test0-GPIO.hex
make[1]: Leaving directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
make ./out/bin/ESP8266-test0-GPIO.bin
make[1]: Entering directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
- making bin...
xtensa-lx106-elf-objcopy -O binary ./out/bin/ESP8266-test0-GPIO.elf ./out/bin/ESP8266-test0-GPIO.bin
make[1]: Leaving directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
make ./out/lst/ESP8266-test0-GPIO.lss
make[1]: Entering directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
- making asm-lst...
xtensa-lx106-elf-objdump -dC ./out/bin/ESP8266-test0-GPIO.elf > ./out/lst/ESP8266-test0-GPIO.lss
make[1]: Leaving directory 'E:/electronics/software/projects/sublimetext-projects/ESP8266-test0-GPIO'
xtensa-lx106-elf-size -d --format=SysV ./out/bin/ESP8266-test0-GPIO.elf
./out/bin/ESP8266-test0-GPIO.elf  :
section          size         addr
.rodata             8   1073643520
.text             156   1074790400
.debug_frame       68            0
.debug_info       405            0
.debug_abbrev     248            0
.debug_loc         31            0
.debug_aranges     32            0
.debug_line       172            0
.debug_str        437            0
.comment           17            0
.xtensa.info       56            0
.xt.lit             8            0
.xt.prop           72            0
Total            1710


"Errors: none"
[Finished in 0.6s]
 

Вложения

Последнее редактирование:

NutsXXXL

New member
@r44083 пользование makefile от stm не самая хорошая идея
даже если предпположить что .elf у нас выходит нормальный то финальный .bin делается не xtensa-lx106-elf-objdump
а собирается esptools или gen_appbin.py
плюс не понятно какие библиотеки прилинковываются

советую arduino 2866 попробовать
да кстати готовые прошивки нормально шьются ?
 

r44083

Member
Готовый бинарник отлично шьется.
По поводу makefile вы правы. Я использую его для STM32F4, но тут я его переделал так что бы он подходил для ESP, так что makefile он и в африке makefile.
По поводу создания bin файла я даже не знал что xtensa-lx106-elf-objdump не катит (а почему так?).
Я был бы вам благодарен если бы вы написали как именно сделать bin из elf для ESP8266 (желательно на примере esptools).
 

NutsXXXL

New member
@r44083 я пока пробвал то что предлагает здесь pvvx
http://esp8266.ru/forum/threads/at-0-60-sdk-1-5-2-dlja-modulej-s-512k-flash.1001/
нужен питон, у меня - виндозный
сама утилита GitHub - themadinventor/esptool: ESP8266 ROM Bootloader utility
и шить может

ESPTOOL ?= C:/Python27/python.exe ../../esptool.py

GENIMAGEOPTION = -ff 40m -fm qio -fs 4m

$(BINODIR)/%.bin: $(IMAGEODIR)/%.out
echo "FW ../$(FIRMWAREDIR)/$(ADDR_FW1).bin + ../$(FIRMWAREDIR)/$(ADDR_FW2).bin"
$(ESPTOOL) elf2image -o ../$(FIRMWAREDIR)/ $(GENIMAGEOPTION) $<

.out это на самом деле .elf
 
Последнее редактирование:

r44083

Member
Вот сейчас в папке с elf файлом пробую в терминале выполнить: [inline]esptool elf2image ESP8266-test0-GPIO.elf[/inline]
Получаю следующий результат:
Код:
Traceback (most recent call last):
  File "esptool.py", line 675, in <module>
  File "esptool.py", line 439, in get_symbol_addr
KeyError: 'call_user_start'
Ниже прикреплён сам elf файл. Может у вас получится сделать из него bin?
 

Вложения

r44083

Member
Текущая информация:
я попробовал взять файл app.out из C:\Espressif\examples\blinky\build и выполнить [inline]esptool elf2image app.out[/inline] И всё прошло успешно. В текущей папке появились два файла "app.out-0x00000.bin" и "app.out-0x40000.bin".

После чего я их успешно прошил и всё заработало. Получается что проблема в моём ESP8266-test0-GPIO.elf.

Вопросы:
Почему для ESP получаются два бинарника?
Что делает каждый из них?
Почему их адреса именно такие 0x00000 и 0x40000?
Всегда ли они будут такими?
 

r44083

Member
Апдейт:
Проект собрался и нормаольно работает. Ошибка была в makefile. С тех пор makefile был переработан. Прикрепляю ниже рабочий проект.
 

Вложения

Сверху Снизу