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

Вопрос UDK Eclipse первые шаги и вопросы

Garmin

Member
Пишу свой проект в UDK Eclipse. Определяю пользовательские AT команды так, как описано в примере "at".
При компиляции выскакивает ошибка, что не найдены функции at_port_print(), at_response_ok().
Код:
c:/Espressif/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc  -Lc:/Espressif/ESP8266_SDK/lib -nostdlib -Tc:/Espressif/ESP8266_SDK/ld/eagle.app.v6.ld -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lmain -ljson -lupgrade -lssl -lpwm -lsmartconfig -lcrypto driver/.output/eagle/debug/lib/libdriver.a user/.output/eagle/debug/lib/libuser.a lwip/.output/eagle/debug/lib/liblwip.a -Wl,--end-group -o .output/eagle/debug/image/eagle.app.v6.out
user/.output/eagle/debug/lib/libuser.a(user_main.o): In function `at_u_stop_exe':
user_main.c:(.irom0.text+0x8): undefined reference to `at_response_ok'
user/.output/eagle/debug/lib/libuser.a(user_main.o): In function `at_u_setup_test':
C:\Espressif\examples\UDP_SPI_project\app\user/user_main.c:69: undefined reference to `at_response_ok'
Я вижу текстовые строки с этими названиями в файле "C:\Espressif\ESP8266_SDK\lib\libat.a".
Подскажите, как сделать так, чтобы линкер их увидел?
Файл Makefale из папки app/user прилагаю.
 

Вложения

Garmin

Member
С библиотеками разобрался. В файле project\app\Makefile в строчке после "LINKFLAGS_eagle.app.v6 = \" добавил "-lat \"
и компиляция прошла без ошибок.
Но вылезла вторая бяка. Теперь линкер не может разместить файлы в памяти:
".output/eagle/debug/image/eagle.app.v6.out section `.irom0.text' will not fit in region `irom0_0_seg'"
В корне проекта в Makefile есть выбор объёма памияти SPI:
"
# SPI_SIZE_MAP
# 0 : 512 KB (256 KB + 256 KB)
# 1 : 256 KB
# 2 : 1024 KB (512 KB + 512 KB)
# 3 : 2048 KB (512 KB + 512 KB)
# 4 : 4096 KB (512 KB + 512 KB)
# 5 : 2048 KB (1024 KB + 1024 KB)
# 6 : 4096 KB (1024 KB + 1024 KB)
SPI_SIZE_MAP ?= 2
"
Однако, изменение параметра SPI_SIZE_MAP не изменяет результаты линковки. Ошибка остаётся.
ЧЯДНТ?
Я порылся в гугле, нашёл, что есть возможность вывода размера скомпилированных файлов, но как это сделать, не нашёл. Если кто знает, подскажите.
 

pvvx

Активный участник сообщества
Немного разобрался. Подробности в соседней теме.
Текущая AT от китайцев не лезет в 512к flash.
AT прошивка использует регион в области flash 0x3000...0x4000 для сохранения параметров. Перенос irom0.text вам не поможет.
Узнать подробнее и найти как сделать вариант для трансляции AT в 512к flash можно здесь.
 

Garmin

Member
Благодарю за совет. Но у меня ситуация обратная. На плате 1М памяти, а при сборке UDK считает, что у неё 512к и не собирает прошивку. Поэтому я и занялся редактированием eagle.app.v6.ld.
Отсюда потянулось использование своего варианта ld и необходимость изменения makefale как основного, так и в папке app.
Исходный проект был lwip_open_demo_app.
К нему при компиляции я добавил библиотеку libat из C:\Espressif\ESP8266_SDK\lib. Я добавил три пользовательских AT команды, сейчас хочу проверить всё это в железе.
Посмотреть, как в библиотеке libat организована память, я пока не умею. Подскажите, как.
Сейчас у меня такое распределение памяти:
Код:
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         0000047a  3ffe8000  3ffe8000  000000e0  2**4
                  CONTENTS, ALLOC, LOAD, DATA
  1 .rodata       000018a8  3ffe8480  3ffe8480  00000560  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .bss          000073c8  3ffe9d28  3ffe9d28  00001e08  2**4
                  ALLOC
  3 .text         00007b06  40100000  40100000  00001e08  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  4 .irom0.text   0003e044  40210000  40210000  00009910  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
------------------------------------------------------------------------------
   Section|                   Description| Start (hex)|   End (hex)|Used space
------------------------------------------------------------------------------
      data|        Initialized Data (RAM)|    3FFE8000|    3FFE847A|    1146
    rodata|           ReadOnly Data (RAM)|    3FFE8480|    3FFE9D28|    6312
       bss|      Uninitialized Data (RAM)|    3FFE9D28|    3FFF10F0|   29640
      text|          Uncached Code (IRAM)|    40100000|    40107B06|   31494
irom0_text|             Cached Code (SPI)|    40210000|    4024E044|  254020
------------------------------------------------------------------------------
Entry Point : 40100004 call_user_start()
Total Used RAM : 37098
Free RAM : 44822
Free IRam : 1274 or 17658 if 48k IRam
------------------------------------------------------------------------------
Generate .//0x00000.bin and .//0x40000.bin successully in folder firmware.
.//0x00000.bin-------->0x00000
.//0x40000.bin-------->0x10000
Done
 
Сверху Снизу