В предыдущей части урока мы подготовили все инструменты (тулчейн) для сборки прошивки из исходных файлов, создали проект и начали писать файл сценария Makefile, а также исходный код.
Будет тут у нас ещё небольшой подводный камень, но о нём потом. А пока нам хочется создать прошивку и залить её в наш контроллер.
Поэтому идём в Makefile и добавим там ещё одну команду
1 2 3 |
-DICACHE_FLASH -c src/main.c -o src/main.o D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ar cru build/app_app.a src/main.o |
Здесь мы используем утилиту AR, которая в Linux используется для создания архива без сжатия, для того, чтобы соединить все объектные файлы в один архив. У нас пока только один объектный файл, поэтому мы собираем в архив только его.
После очередной сборки проекта у нас появится архивный файл в папке build
Следующий этап — линковка (или компоновка). На данном этапе мы создадим исполняемый файл формата elf
1 2 3 4 5 6 7 8 |
cru build/app_app.a src/main.o D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -LD:/ESP8266/ESP8266_NONOS_SDK/lib -TD:/ESP8266/ESP8266_NONOS_SDK/ld/eagle.app.v6.ld -nostdlib -Wl,--no-check-sections -u call_user_start -Wl, -static -Wl,--start-group -lc -lgcc -lphy -lpp -lnet80211 -llwip -lwpa -lmain -lcrypto build/app_app.a -Wl,--end-group -o build/app.out |
Здесь также используется ряд параметров, знать которые нам пока не столь важно, голову мы этим также забивать пока не будем. Скажу лишь про некоторые. Параметр -L показывает путь к статическим библиотекам, а параметр -T показывает скрипт, который используется для компоновки — agle.app.v6.ld. Также после параметра -o мы говорим сборщику о том, с каким именем мы формируем elf-файл.
Теперь скорей всего мы опять не сможем собрать наш проект и получим вот такие две ошибки
Данные ошибки говорят о том, что в наш код мы должны обязательно добавить функцию с именем user_rf_cal_sector_set.
Данная функция устанавливает размер сектора в разделе хранения калибровочных параметров wifi модуля. Хотя мы сейчас вроде и не пользуемся функционалом WiFi, но функция быть должна. Образец её есть практически во всех примерах SDK. Добавим такую функцию в наш main.c выше функции user_init
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//------------------------------------------------------ uint32 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void) { enum flash_size_map size_map = system_get_flash_size_map(); uint32 rf_cal_sec = 0; switch (size_map) { case FLASH_SIZE_4M_MAP_256_256: rf_cal_sec = 128 - 8; break; case FLASH_SIZE_8M_MAP_512_512: rf_cal_sec = 256 - 5; break; case FLASH_SIZE_16M_MAP_512_512: case FLASH_SIZE_16M_MAP_1024_1024: rf_cal_sec = 512 - 5; break; case FLASH_SIZE_32M_MAP_512_512: case FLASH_SIZE_32M_MAP_1024_1024: rf_cal_sec = 1024 - 5; break; default: rf_cal_sec = 0; break; } return rf_cal_sec; } //------------------------------------------------------ |
Теперь у нас всё прекрасно соберётся и на выходе мы получим исполняемый файл
С помощью следующей команды в нашем Makefile мы выведем в консоль размеры секций, используя при этом специальную утилиту из набора кросс-компилятора
1 2 |
-Wl,--end-group -o build/app.out D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-size build/app.out |
Соберём проект и увидим размеры секций в консоли
С помощью следующей команды в Makefile, используя специально-обученную утилиту, мы сформируем два образа для заливки в наш контроллер, так как у нас не установлен на нём Linux и мы не можем там запустить elf-файл
1 2 |
D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-size build/app.out D:/ESP8266/utils/esptool elf2image build/app.out |
Если мы теперь соберём наш проект, то мы уже получим два файла-образа для заливки в наш ESP
Ну вот мы и получили заветную прошивку! Из наименований файлов мы даже видим, с каких адресов их заливать в контроллер.
Только прежде чем прошивать наш ESP, если в нём до этого была нестандартная прошивка, то его надо подготовить. Да и если стандартная, то лучше тоже подготовить. Первым делом мы очистим полностью FLASH-память нашего контроллера. Как это делается, мы отлично знаем. А так как затем нам для подготовки к заливки нашей прошивки надо будет в контроллер ещё кое-что залить, то сначала откроем каталог со стандартной прошивкой в SDK
Запустим командную строку и очистим FLASH-память
Также, думаю, все мы знаем, что путь к утилите esptool для работы с ней, должен быть доступен.
Если вдруг она не будет работать из папки с утилитами, то можно подключить другую.
Теперь нам нужно прошить с определённого адреса файл с настройками по умолчанию в наш ESP
Мы использовали адрес 0x3FC000, так как у нас модуль с 4 мегабайтами FLASH-памяти.
Вот теперь наш модуль готов к прошиванию только что созданной нами прошивки, а если всего этого не проделать, то мы рискуем получить зацикливание.
Вернёмся в наш проект и прежде чем в Makefile добавлять ещё одну цель для заливки прошивки, давайте с помощью применения переменных немного сделаем наш сценарий поприличнее.
Для этого в самом верху добавим путь к нашему SDK
1 |
SDK := D:/ESP8266/ESP8266_NONOS_SDK |
Затем добавим путь к заголовочным файлам SDK
1 2 |
SDK := D:/ESP8266/ESP8266_NONOS_SDK SDK_INC := $(SDK)/include |
Также добавим путь к кросс-компилятору
1 2 3 |
SDK_INC := $(SDK)/include XTENSA := D:/ESP8266/xtensa-lx106-elf |
Также добавим переменные отдельно к каждой утилите кросскомпилятора
1 2 3 4 5 |
XTENSA := D:/ESP8266/xtensa-lx106-elf CC := $(XTENSA)/bin/xtensa-lx106-elf-gcc AR := $(XTENSA)/bin/xtensa-lx106-elf-ar LD := $(XTENSA)/bin/xtensa-lx106-elf-gcc SIZE := $(XTENSA)/bin/xtensa-lx106-elf-size |
Добавим флаги для компиляции и линковки
1 2 3 4 5 6 7 8 9 10 |
SIZE := $(XTENSA)/bin/xtensa-lx106-elf-size CC_FLAGS := -g -O0 -std=gnu99 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -mno-serialize-volatile -D__ets__ -DICACHE_FLASH -c LD_FLAGS := -nostdlib -Wl,--no-check-sections -u call_user_start -Wl, -static -Wl,--start-group -lc -lgcc -lphy -lpp -lnet80211 -llwip -lwpa -lmain -lcrypto |
Добавим также переменную для команды esptool с полным путём к ней
1 2 3 |
-llwip -lwpa -lmain -lcrypto ESPTOOL := D:/ESP8266/utils/esptool |
Применим наши переменные в цели All, также заэкранируем наши команды, чтобы не выводились в консоли, а выведем туда красивые читабельные команды вместо них. После этого цель All примет следующий вид
1 2 3 4 5 6 7 8 9 10 11 12 |
all: @echo "CC src/main.o" @$(CC) -Iinc -I$(SDK_INC) -I$(SDK_INC)/json $(CC_FLAGS) src/main.c -o src/main.o @echo "AR build/app_app.a" @$(AR) cru build/app_app.a src/main.o @echo "LD build/app.out" @$(LD) -L$(SDK)/lib -T$(SDK)/ld/eagle.app.v6.ld $(LD_FLAGS) build/app_app.a -Wl,--end-group -o build/app.out @echo "SIZE build/app.out" @$(SIZE) build/app.out @echo "ESPTOOL build/app.out-0x00000.bin build/app.out-0x10000.bin" @$(ESPTOOL) elf2image build/app.out |
Попробуем собрать наш проект.
Вывод в консоли после этого будет иметь вот такой красивый вид
Теперь давайте добавим цель в Makefile для заливки наших образов в микроконтроллер
1 2 3 4 |
@$(ESPTOOL) elf2image build/app.out flash: @$(ESPTOOL) write_flash --no-compress -ff 40m -fm dio -fs 32m 0x00000 build/app.out-0x00000.bin 0x10000 build/app.out-0x10000.bin |
Чтобы эту цель запускать, мы добавим её в дерево целей. Для этого зайдём во вкладку Build Targe в левой панели и, используя контекстное меню нашего проекта, добавим новую цель с именем flash
Аналогичным образом добавим в дерево цель clean, такую цель в наш Makefile мы добавим чуть позже.
Наши цели появятся в дереве слева
Также они появятся и в основном дереве проекта в соответствующей ветке
Теперь данные цели будут выполняться по двойному щелчку мыши на них.
Давайте выполним цель flash.
У нас начнётся процесс заливки прошивки в контроллер
Только вот после заливки наша прошивка будет работать неправильно. Вот это и есть подводный камень, о котором я предупреждал.
Мигнув пару раз, светодиод погаснет не вовремя.
Всё дело в том, что в нашем ESP, впрочем, как и у практически каждого микроконтроллера, есть сторожевой таймер (watchdog), который по умолчанию включен, и, если его не выключить заранее при помощи функции system_soft_wdt_stop, что настоятельно не рекомендуется, то его хотя бы раз в полсекунды надо перезагружать при помощью функции SDK system_soft_wdt_feed. А иначе будет происходить то, что у нас и происходит. Не дождавшись перезагрузки таймера, контроллер перезагрузится сам.
Добавим данную функцию в бесконечном цикле в двух местах
1 2 3 4 5 |
delay(10000000); system_soft_wdt_feed(); gpio_output_set(0, (1 << LED), 0, 0); delay(10000000); system_soft_wdt_feed(); |
Теперь всё нормально. Светодиод мигает регулярно
Также чтобы процесс заливки прошивки шел побыстрее, в команде в Makefile добавим ему скорости, используя для этого соответствующий параметр. Также при проблемах с автоопределением COM-порта при наличии нескольких можно жёстко указать требуемый (у меня 29-й, у вас может быть другой)
@$(ESPTOOL) -b 512800 -p COM29 write_flash --no-compress -ff 40m -fm dio -fs 32m 0x00000 build/app.out-0x00000.bin 0x10000 build/app.out-0x10000.bin
Также добавим ещё цель для очистки каталога от скомпилированных файлов.
1 2 3 4 |
@$(ESPTOOL) -b 512800 write_flash 0 build/app.out-0x00000.bin 0x10000 build/app.out-0x10000.bin clean: @rm -v src/main.o build/app_app.a build/app.out build/app.out-0x00000.bin build/app.out-0x10000.bin |
Данный пункт мы можем запускать как двойным щелчком по добавленной цели, так и по пункту контекстного меню clean. Попробуем запустить данную цель
Всё прекрасно очистилось.
Итак, на данном занятии нам удалось создать свою программу для микроконтроллера и залить её в его FLASH-память. Пусть данная программа пока не обладает серьёзной функциональностью, это всё будет, но самое тяжёлое, можно считать, мы уже сделали. Мы создали тулчейн с SDK, кросскомпилятором и подключили всё это в IDE Eclipse, получив возможность писать программы для контроллера ESP8266. После этого нам станет проще писать дальнейшее ПО для работы с функционалом WiFi и работы с прочими модулями данного контроллера.
Всем спасибо за внимание!
Предыдущая часть Программирование МК ESP8266 Следующий урок
Модуль ESP NodeMCU можно купить здесь: Модуль ESP NodeMCU
Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266
Переходник USB to TTL можно приобрести здесь ftdi ft232rl
Многофункциональный переходник JTAG UART FIFO SPI I2C можно приобрести здесь CJMCU FT232H USB к JTAG UART FIFO SPI I2C
Логический анализатор 16 каналов можно приобрести здесь
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Спасибо за урок.
у меня при пути D:/ESP8266/utils/esptool elf2image build/app.out
при питоне 3.8 не работало. В ком. строке -> (esptool version) , не видело этого файла. (esptool.py version) сработало.
В Makefile вместо (D:/ESP8266/utils/esptool elf2image build/app.out) запустилось в следующем варианте: esptool.py elf2image build/app.out
Если у кого либо такая проблема, надеюсь, что поможет этот комментарий.
c:/anaconda3/scripts/esptool.exe elf2image build/app.out
Для тех у кого не видится еспитул. Устанавливаем пайсон 3 как на видео а потом вставляем эту строчку и все соберется…
Точнее нужно указать путь к esptool.exe
У меня тоже не работало с этим ехе-файлом из урока. Совет помог.
Для тех, кто не понял, путь до файла будет выглядеть примерно так —
C:\Users\myuser1\AppData\Local\Programs\Python\Python39\Scripts\esptool.py.exe
Добрый день! Застопорился на этапе сборки файла elf из app_app.a
xtensa-lx106-elf-gcc: error: : No such file or directory
xtensa-lx106-elf-gcc: fatal error: no input files
compilation terminated.
Все пути верные…
Вопрос снят, разобрался.
Всё работает, спасибо!
Кстати, в esp-01 не задействовать gpio1. При сборке выдаёт ошибку. PERIPHS_IO_MUX_GPIO1_U нет такого макроса. Вывел gpio2 на внешний светодиод, работает.
Добрый день.
У меня та же проблема.
Как решили?, в чем ошибка?
Никто так и не ответил (
на случай, если актуально (и кому актуально) нужно наставить бэкслешей (собрать всё в ону строку).
При сборки проекта выскакивает ошибка
CreateProcess(NULL, C :/Eclipse_WorkSpase/ESP8266
Как исправить
подскажите где взять крос компилятор для linux. У меня есть сборка из open sdk но при компиляции возникает ошибка
CC src/user_main.o
AR build/app_app.a
LD build/app.out
/opt/esp-open-sdk/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/bin/ld: cannot find : No such file or directory
collect2: error: ld returned 1 exit status
Makefile:18: recipe for target 'all' failed
make: *** [all] Error 1
При линковке возникает ошибка:
18:38:02 **** Incremental Build of configuration Debug for project BLINK ****
mingw32-make.exe -f F:/ESP8266/BLINK/BLINK/Makefile all
D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc \
-Iinc -ID:/ESP8266/ESP8266_NONOS_SDK-3.0/include \
-ID:/ESP8266/ESP8266_NONOS_SDK-3.0/include/json \
-g -O0 -std=gnu99 -Wpointer-arith -Wundef -Werror -Wl,\
-EL -fno-inline-functions -nostdlib -mlongcalls \
-mtext-section-literals -mno-serialize-volatile -D__ets__ \
-DICACHE_FLASH -c src/main.c -o src/main.o
D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ar \
cru build/app_app.a src/main.o
D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc \
-LD:/ESP8266/ESP8266_NONOS_SDK-3.0/lib \
-TD:/ESP8266/ESP8266_NONOS_SDK-3.0/ld/eagle.app.v6.ld \
-nostdlib -Wl,—no-check-sections -u call_user_start -Wl,\
-static -Wl,—start-group -lc -lgcc -lphy -lpp -lnet80211 \
-llwip -lwpa -lmain -lcrypto build/app_app.a \
-Wl,—end-group -o build/app.out
D:/ESP8266/ESP8266_NONOS_SDK-3.0/lib\libmain.a(app_main.o): In function
user_uart_wait_tx_fifo_empty':
user_pre_init'(.irom0.text+0x6a0): undefined reference to
D:/ESP8266/ESP8266_NONOS_SDK-3.0/lib\libmain.a(app_main.o): In function
flash_data_check':
user_pre_init'(.irom0.text+0x714): undefined reference to
collect2.exe: error: ld returned 1 exit status
F:/ESP8266/BLINK/BLINK/Makefile:4: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 1
«mingw32-make.exe -f F:/ESP8266/BLINK/BLINK/Makefile all» terminated with exit code 2. Build might be incomplete.
Как исправить?
Дык мы вроде с 2.2 работаем, а у Вас 3.0
Спасибо. Все заработало.
после плясок с бубном все таки получилось добиться устойчивой компиляции проекта. но после заливки в ESP8266 тот постоянно перезагружается. на скорости 74880 в терминал постоянно шлет
load 0x40100000, len 25264, room 0
tail 0
chksum 0x87
csum 0x87
esptool erase_flash естественно делал. может кто сталкивался или есть какие идеи? Модeль рабочий, АТ команды понимает, LUA скрипты понимает (естественно при залитой прошивке NodeMCU v3)
Проблема решена. Все проблемы из-за невнимательности: забыл прошить esp_init_data_default_v05.bin после очистки
бывает
Исправите материал на сайте. В верхней части страницы, в первых 2-х frame (для которых копируется материал для вставки в Makefile) пропущены символы » \» . Я чуть не посидел пока разбирался. Хорошо что смотрел видеорук и смог разобраться, то копируя не разбираясь можно и душу отдать.
Скорей всего, это происки WordPress-а
Помогите пожалуйста со следующей проблемой.
-Wl,—end-group -o build/app.out
D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-size build/app.out
-> esptool elf2image build/app.out
При сборке проекта без использовании последней строки отмеченной выше стрелкой (в файле Makefile) проект собирается. Но при использовании последней строки появляется следующая ошибка:
….
esptool elf2image build/app.out
D:/Project/Eclipse/esp8266/Blink00/Makefile:4: recipe for target 'all' failed
process_begin: CreateProcess(NULL, esptool elf2image build/app.out, …) failed.
make (e=2): Не удается найти указанный файл.
mingw32-make.exe: *** [all] Error 2
«mingw32-make.exe -f D:/Project/Eclipse/esp8266/Blink00/Makefile all» terminated with exit code 2. Build might be incomplete.
Как мне кажется он не знает что такое esptool, но я его установил через командную строку, т.к. из папки utils/esptool не хочет запускаться.
Как можно решить данную проблему?
проблема решена переустановкой версии Python 2.7.17 взамен 3.7
Повторюсь наверное. Но меня возникает следующая ошибка.
/opt/esp-open-sdk/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.5/../../../../xtensa-lx106-elf/bin/ld: cannot find : No such file or directory
collect2: error: ld returned 1 exit status
Makefile:22: recipe for target 'all' failed
make: *** [all] Error 1
Ну или поделитесь toolchain под unix
Здравствуйте!
Возникает ошибка при линковке:
LD build/app.out
c:/esp8266/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/5.2.0/../../../../xtensa-lx106-elf/bin/ld.exe: cannot open linker script file C:/ESP8266/ESP8266_NONOS_SDK/ld/eagle.app.v6.ld: Invalid argument
collect2.exe: error: ld returned 1 exit status
Помогите, плз, советом!
Спасибо!
Спасибо огромное за почти внятный язык для чайников.
Добавьте пожалуйста \ в первой команде (для чайников)
-DICACHE_FLASH -c src/main.c -o src/main.o
D:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-ar
cru build/app_app.a src/main.o
В команде линковки убрал все \ и прописал всю команду в одной строке —
заработало! Что за танцы с бубном?! Видимо опыта совсем нет….
У меня такая же проблема, постоянно шлет инфу по uart и не работает, все собирается норм при заливке Bin'а не работает, в arduino нормально прошивается и прошивка от нее тоже заливается через разные утилиты и туже esptool
Вот такие же дела творятся:
после плясок с бубном все таки получилось добиться устойчивой компиляции проекта. но после заливки в ESP8266 тот постоянно перезагружается. на скорости 74880 в терминал постоянно шлет
load 0x40100000, len 25264, room 0
tail 0
chksum 0x87
csum 0x87
esptool erase_flash естественно делал. может кто сталкивался или есть какие идеи? Модeль рабочий, АТ команды понимает, LUA скрипты понимает (естественно при залитой прошивке NodeMCU v3)
При стирании памяти nodemcu и заливке прошивки esp_init_data_default_v05.bin по адресу 0x3FC000, стал медленей передовать по uart и так не заработал, не знаю уже что делать
Может надо использовать другую адресацию?
Могут ли проблемы быть из-за того что в 64 разрядной винде использую mingw32, а не mingw64?
Все разобрался, оказывается не внимательно смотрел видео и пропустил в коде строку, и поэтому по uart nodemcu и слала данные сообщая об ошибке, а я был уверен что правильно записал текст программы и сильно его не разглядывал и в итоге прокапался, но в итоге много чего еще изучил.
Добрый день! Вот какой вопрос. Я сделал экспериментально программу, на основе Ваших уроков, которая просто переключает уровни на GPIO2 без всяких задержек.
void ICACHE_FLASH_ATTR user_init()
{
gpio_init();
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
gpio_output_set(0, 0, (1 << LED), 0);
while(1)
{
gpio_output_set(0, (1 << LED), 0, 0);
gpio_output_set((1 << LED), 0, 0, 0);
}
}
Померил осциллографом частоту на выходе, получилось порядка 5,8 кГц. И сделал тоже самое в среде Ардуино, получилась частота 133 кГц. Получается, что код менее эффективный собирается в Eclipse. Я убрал параметр -g при компиляции, также попробовал с оптимизацией -О1. Ситуация не поменялась. К примеру с микроконтроллерами Atmel, ситуация с точностью наоборот. Код, получаемый в среде Atmel Studio гораздо компактнее и быстрее, чем в среде Ардуино. Не знаете в чем дело? Может быть при сборке проекта нужно еще какие-то параметры дописать?
К сожалению, я данным вопросом не задавался.
Все равно большое спасибо за Ваши уроки.
Подскажите, пожалуйста.
Остановился на линковке с таким:
Такое впечатление, что что-то где-то не прописано…
12:18:23 **** Incremental Build of configuration Debug for project blink ****
mingw32-make.exe -f D:/Users/User/eclipse-workspace/blink/Makefile all
D:/esp8266/SysGCC/esp8266/opt/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc \
-Iinc -ID:/ESP8266/ESP8266_NONOS_SDK/include \
-ID:/ESP8266/ESP8266_NONOS_SDK/include/json \
-g -O0 -std=gnu99 -Wpointer-arith -Wundef -Werror -Wl,\
-EL -fno-inline-functions -nostdlib -mlongcalls \
-mtext-section-literals -mno-serialize-volatile -D__ets__ \
-DICACHE_FLASH -c D:/Users/User/eclipse-workspace/blink/src/main.c -o src/main.o
D:/esp8266/SysGCC/esp8266/opt/xtensa-lx106-elf/bin/xtensa-lx106-elf-ar \
cru build/app_app.a src/main.o
D:/esp8266/SysGCC/esp8266/opt/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc \
-LD:/ESP8266/ESP8266_NONOS_SDK/lib \
-TD:/ESP8266/ESP8266_NONOS_SDK/ld/eagle.app.v6.ld \
-nostdlib -Wl,—no-check-sections -u call_user_start -Wl, \
-static -Wl,—start-group -lc -lgcc -lphy -lpp -lnet80211 \
-llwip -lwpa -lmain -lcrypto build/app_app.a \
-Wl,—end-group -o build/app.out
d:/esp8266/sysgcc/esp8266/opt/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/8.4.0/../../../../xtensa-lx106-elf/bin/ld.exe: cannot find : Invalid argument
collect2.exe: error: ld returned 1 exit status
D:/Users/User/eclipse-workspace/blink/Makefile:4: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 1
«mingw32-make.exe -f D:/Users/User/eclipse-workspace/blink/Makefile all» terminated with exit code 2. Build might be incomplete.
в этой строчке «-nostdlib -Wl,–no-check-sections -u call_user_start -Wl, \»
надо убрать пробел между «,» и «\».
Таковы правила этого синтаксиса по строкам.
Здравствуйте! Спасибо за уроки!
Были следующие проблемы (может кому пригодится. работал на esp01):
1. Линковщик искал user_pre_init. Написание данной функции не помогло. Причина: SDK-3.x.x; Выход: SDK-2.2.1.
2. При прошивке слишком быстро мигал синий светодиод, прям как на видео перед прошивкой esp_init_data_default_v05. После догрузки данного бинарника по адресу 0xFC000 перестал мигать (даже не горел). Причина 1 — синий светодиод в данной микросхеме подключен не к GPIO2, Решение: в прошивке определите #define LED 1 и в user_init:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1); вместо PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
3. После прошивки при delay(100000); синий диод горит не мигая: Причина: может где-то есть настройка частот. не знаю. Решение: delay(100000); мигание видно. При esp_init_data_default_v08 тот же эффект.
4. в Makefile ругался на опцию -LE. Решение: разделил на -L -E. Если кто может объяснить данное явление, то буду рад. Ну и все команды расписал в длинные портянки без всякий макросов и переменных, чтобы меньше мест было для ошибок. Чистил чип из командной строки. Догружал esp_init_data_default_v05 так же из командной строки.
Решение третьей проблемы: увеличение паузы delay(100000) -> delay(1000000)
Всем привет. Ребята подскажите кто решил проблему «/build/app_app.a: No such file or directory»
Файл сам есть но пишет что нет и все.
c:/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc \
-LC:/ESP8266/ESP8266_NONOS_SDK/lib \
-TC:/ESP8266/ESP8266_NONOS_SDK/ld/eagle.app.v6.ld \
-nostdlib -Wl,—no-check-sections -u call_user_start -Wl, -static -Wl,—start-group -lc -lgcc -lphy -lpp \
-lnet80211 -llwip -lwpa -lmain -lcrypto /build/app_app.a \
-Wl,—end-group -o build/app.out
xtensa-lx106-elf-gcc: error: /build/app_app.a: No such file or directory
Makefile:4: recipe for target 'all' failed
MinGW32-make.exe: *** [all] Error 1
«MinGW32-make.exe all» terminated with exit code 2. Build might be incomplete.
Кажется нашел решение. В настройках компилятора убрал «-f ${ProjDirPath}/Makefile» оставил только mingw32-make.exe и все стало работать. А то в командной строке работало а в Eclipse давала ошибку. Но это еще только начало ))))
Коллеги здравствуйте.
Пытался сделать все по инструкции, но не заработало.
Скачал готовый проект. При сборке получаю вот такой лог:
20:04:56 **** Incremental Build of configuration Release for project BLINK01 ****
mingw32-make.exe -f D:/0_ECLIPSE_PRJ/BLINK01/Makefile all
«CC src/main.o»
«AR build/app_app.a»
«LD build/app.out»
D:/0_ESP_SDK/ESP8266_NONOS_SDK/lib\libmain.a(app_main.o): In function
ets_fatal_exception_handler':
user_pre_init'/home/wchen/gwen/nonos/app/main/app_main.c:870: undefined reference to
D:/0_ESP_SDK/ESP8266_NONOS_SDK/lib\libmain.a(app_main.o): In function
flash_data_check':
user_pre_init'/home/wchen/gwen/nonos/app/main/app_main.c:1014: undefined reference to
collect2.exe: error: ld returned 1 exit status
D:/0_ECLIPSE_PRJ/BLINK01/Makefile:24: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 1
«mingw32-make.exe -f D:/0_ECLIPSE_PRJ/BLINK01/Makefile all» terminated with exit code 2. Build might be incomplete.
20:04:58 Build Failed. 4 errors, 0 warnings. (took 1s.495ms)
Какие-то неопределенные ссылки, как их добавить в проект?
Что может быть не так и как это исправить?
Вроде віше писали, из-за слишком новой версии SDK такое вылазит.
С горем пополам получилось собрать и прошится в эклипсе на mac os. Сначала поставил тулчейн последней версии (3.0.5), далее почитав коменты понял что нужно поставить тулчейн версии как в данном уроке. Были некоторые изменения по командам а именно esptool ругался на аргумент 32m, но дал возможные варианты правильного аргумента 4MB. Так же долго не мог разобраться с линкером (xtensa-lx106-elf/bin/ld: cannot find : No such file or directory), ругался на то что не мог найти какой то файл. Решил таким способом, убрал все \ и написал команды и флаги в одну строку
Для тех кто не может собрать bin файлы и получает ошибку
1. Имя пользователя должно быть на латинице
2. Устанавливаем последний Python
3. В командной строке из под пользователя пишем команду pip install esptool (C:\Users\Andrey>pip install esptool)
4. В Makefile должно быть так ESPTOOL := esptool.py