Sming Open Source Framework для нативной разработки прошивок ESP8266

verzi

New member
Подскажите, что нужно убрать в Маке файле, что бы каждый раз при прошивке не стиралась файловая система?
 

Negor

New member
У меня тоже вопрос про Makefile. Заюзал grunt чтобы собирать webgui для проекта - куда вставить вызов команды чтобы перед заливкой файлов(сборкой spiff image) запускался grunt ?
 

GFX

New member
Добрый день. Переустановил виндовс и снова проблема, не компилируются примеры.
21:57:51 **** Build of configuration Sming for project Basic_Blink ****
make all
LD out/build/app.out
c:/Espressif/ESP8266_SDK/lib\libmain.a(app_main.o): In function `user_uart_wait_tx_fifo_empty':
(.irom0.text+0x340): undefined reference to `user_rf_pre_init'
c:/Espressif/ESP8266_SDK/lib\libmain.a(app_main.o): In function `user_uart_wait_tx_fifo_empty':
(.irom0.text+0x458): undefined reference to `user_rf_pre_init'
collect2.exe: error: ld returned 1 exit status
make: *** [out/build/app.out] Error 1

21:58:05 Build Finished (took 14s.641ms)
Ставил через команду
choco install sming -y, в настройках эклипс прописал, что ему опять не нравится непонятно
SMING_HOME C:\tools\sming\Sming
ESP_HOME C:\Espressif

"Починил" - переименовал папку с SDK, взял версию _110, но как правильно починить чтобы с последней версией работало?
Рано обрадовался, работают не все примеры, выдает теперь
22:25:16 **** Build of configuration Sming for project Basic_AirUpdate ****
make all
C+ /C/tools/sming/Sming/appinit/user_main.cpp
C+ app/application.cpp
AR out/build/app_app.a
LD out/build/app.out
out/build/app_app.a(application.o): In function `connectOk()':
c:/tools/sming/Sming/SmingCore/Boards.h:17: undefined reference to `StationClass::waitConnection(Delegate<void ()>)'
out/build/app_app.a(application.o): In function `init()':
C:\tools\sming\Basic_AirUpdate/app/application.cpp:41: undefined reference to `StationClass::waitConnection(Delegate<void ()>)'
collect2.exe: error: ld returned 1 exit status
make: *** [out/build/app.out] Error 1

22:25:19 Build Finished (took 3s.97ms)
Заработало, после добавления строчки extern "C" void __attribute__((weak)) user_rf_pre_init(void);
 
Последнее редактирование:

anakod

Moderator
Команда форума
GFX, по последнему SDK кое что обновляли (буквально сегодня) можете протестировать на последней версии.

Но, имхо, не стоит гнаться за цифорками в китайских SDK, далеко не всегда вместе с ними следует реальная стабильность или функциональность. Кроме того, в наиболее проблемных моментах типа espconn, Sming и так уже предоставляет собственное решение. Так что возможно Вам вовсе не стоит торопиться переходить с версии 1.1.0, которая себя точно хорошо зарекомендовала.
 

programmer

New member
Я тут про Memory Layout почитал, вроде разобрался.. Сейчас в Sming PROGMEM и сопутствующие функции являются просто заглушками, а что если заменить их на что-то примерно такое:
Код:
#define PROGMEM __attribute__((aligned(4))) ICACHE_RODATA_ATTR

uint8_t pgm_read_byte(const void* pgm_addr) {
    uint8_t pgm_tmp_byte[4];
    uint32_t addr = (uint32_t)pgm_addr;
    ets_memcpy(&pgm_tmp_byte, (const void *)(addr & ~3), 4);
    return pgm_tmp_byte[addr & 3];
}
А то, в тот же шрифт из Adafruit_GFX занимает RAM и как-то это нехорошо :) Пусть PROGMEM по аналогии с AVR/Arduino сидит в флеше.
 
Последнее редактирование:

GFX

New member
Добрый день. Скажите, пожалуйста, как перевести из float в string или массив char, printf не работает и все его вариации?
 

jcmvbkbc

New member
Я тут про Memory Layout почитал, вроде разобрался.. Сейчас в Sming PROGMEM и сопутствующие функции являются просто заглушками, а что если заменить их на что-то примерно такое:
Код:
#define PROGMEM __attribute__((aligned(4))) ICACHE_RODATA_ATTR

uint8_t pgm_read_byte(const void* pgm_addr) {
    uint8_t pgm_tmp_byte[4];
    uint32_t addr = (uint32_t)pgm_addr;
    ets_memcpy(&pgm_tmp_byte, (const void *)(addr & ~3), 4);
    return pgm_tmp_byte[addr & 3];
}
А то, в тот же шрифт из Adafruit_GFX занимает RAM и как-то это нехорошо :) Пусть PROGMEM по аналогии с AVR/Arduino сидит в флеше.
Альтернативные варианты доступа к данным размещённым во FLASH: https://github.com/SuperHouse/esp-open-rtos/issues/11
 

pvvx

Активный участник сообщества
Я тут про Memory Layout почитал, вроде разобрался.. Сейчас в Sming PROGMEM и сопутствующие функции являются просто заглушками, а что если заменить их на что-то примерно такое:
Тогда не работает объединение одинаковых констант и строк в имеющихся версиях gсс и от этого скоро ограничение в 1 Mегабайт "кешируемой" области от начала flash :).
Все эти варианты - временные, для совместимости с Китай-глюко-SDK и с такими ухищрениями не работает более половины функций из SDK и либ gсс.
 

anakod

Moderator
Команда форума
Добавлена поддержка WebSockets.
А так же хороший пример визуализации некоторых возможностей этой технологии.
 

pvvx

Активный участник сообщества
Добавлена поддержка WebSockets.
А так же хороший пример визуализации некоторых возможностей этой технологии.
А зачем там, в прошивке, код sha1 ? Он есть в ROM-BIOS и работает.
Код в ROM-BIOS аналогичен этому.
Пример работы с ключом websocket.
base64enc_tab[] есть в RAM_BIOS: [HASHTAG]#define[/HASHTAG] base64enc_tab ((const uint8 * )(0x3FFFD600))
base64dec_tab тоже есть в RAM_BIOS, но только 128 символов.
Правда процедуры из ROM-BIOS с base64 не катят - они заточены для подпрограмм паролей WiFi, если работаем с WiFi управляемым ROM-BIOS в спец. "сикретном" режиме* ...
* "сикретном" для Espressif.
 
Последнее редактирование:

anakod

Moderator
Команда форума
pvvx, да Вы правы, изначально я как раз планировал использовать встроенный в ROM хешер, но затем лень стало заморачиваться когда увидел несколько компактна данная реализация. Но думаю порефакторю эту часть, особенно если начну работу над HTTPS.
 

pvvx

Активный участник сообщества
но затем лень стало заморачиваться когда увидел несколько компактна данная реализация.
Компактна? Итоговый код не такой и компактный, да занимаете и так малую RAM :)
Тьфу, забыл, для УрДурино всё пойдет - там безразлично. :)

Надо перерабатывать LwIP - там много лишнего и много ресурса жрет, т.к. не адаптирован под архитектуру проца ESP8266. Не пробовали ещё странслировать только его и посмотреть итого?
 
Последнее редактирование:

anakod

Moderator
Команда форума
А где можно информацию по base64 функциям/таблицам в ROM посмотреть более подробно? В OpenSDK оно уже есть?

Итоговый код не такой и компактный, да занимаете и так малую RAM
Память потребует любая реализация хеша, в том числе и встроенная в ROM (она требует выделения структуры).

Надо перерабатывать LwIP - там много лишнего и много ресурса жрет, т.к. не адаптирован под архитектуру проца ESP8266.
Что-то конкретное?
 
Последнее редактирование:
Сверху Снизу