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