• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 был переработан. Прикрепляю ниже рабочий проект.
 

Вложения

Сверху Снизу