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

nodeMCU SDK 1.1.2

jcmvbkbc

New member
Ранее речь шла о том, что флеш отключается при чтении данных внутри обработчиков прерываний (т е когда прерывания отключены).
Верно?
Нет. Речь шла о том, что никто не запрещает прерывания на время, пока мэппинг FLASH отключен, а следовательно прерывание может прийти в момент, когда FLASH не замэплен.

Теперь Вы говорите, что флеш отключается лишь при записи, т е при чтении флешь никогда не отключается.
Я не уверен на счёт отключения FLASH во время прямого чтения, поэтому ничего об этом не говорю. На время записи, насколько мне известно, FLASH отмэпливается.

Мэппинг флэш выполняется функциями Cache_Read_Enable и Cache_Read_Disable, их можно вызвать когда угодно. После вызова первой функции FLASH появляется в адресном пространстве памяти, после вызова второй -- исчезает из него.

1) Если прерывания включены то можно обращаться куда угодно.
Можно, если FLASH замэплен.

2) Если возникло прерывание то исполняется функция обработки прерываний при этом прерывания запрещены
Уже это не вполне верно. При обработке прерываний первого уровня обработчик запускается после того, как IRQ вызвавший его замаскирован, а все остальные прерывания разрешены.

никак не связан с прерываниями, а только с тем, был ли замэплен FLASH во время прихода IRQ или нет.
Если был -- FLASH доступен для чтения в адресном пространстве памяти, если нет -- недоступен.
На запись FLASH никогда недоступен таким образом.
 

jcmvbkbc

New member
1) Т е для записи во флеш, ее надо подключить к адресному пространству памяти,
Нет, наоборот, отключить. Последовательная FLASH при этом будет доступна только через SPI.

а для работы с данными из флеш надо подключить в другое адресное пространство (замэмплить)
Я пишу замэппить (map), т.е. поместить в карту пространства памяти. FLASH при этом будет доступна для чтения как обычная память, при обращении к которой будет задействован специальный IP-блок, который возвратит данные из кэша, если они там есть, либо получит их из FLASH по шине SPI.

Таким образом, если не исполнена Cache_Read_Disable, то работа с кодом и данными из флеш возможна и это не связано с обработчиками прерываний.
Верно?
Верно.

2) Если возможно, дайте ссылку на документацию по механизму обработки прерываний.
Базовый механизм обработки прерываний уровня 1 реализованный процессором в железе описан в гл. 4.4.4.3 "The Level-1 Interrupt Process" Xtensa ISA ( http://0x04.net/~mwk/doc/xtensa.pdf ).
Программная приоритезация кажется нигде не описана, первоисточник -- код XTOS (XtDevTools/install/tools/<release>/XtensaTools/xtensa-elf/src/xtos/int-lowpri-dispatcher.S).
 
Последнее редактирование:

jcmvbkbc

New member
Как я полагаю, если я перемещу при сборке некоторые прогаммы из iRAM во флеш, то это не уменьшит объем оставшейся свободной флеш.
Так как память занятая на elf(секция .text) код этих программ , плавно перейдет во флеш (секция irom0.text) т е на диск сколько места было столько и останется(даже возможно еще и увеличится).
Кто пояснит, в чем я ошибаюсь?
Или я прав?
Думаю, что вы правы: перемещая код во FLASH вы избавляетесь от его копии в IRAM, оригинал во FLASH при этом как был, так и остаётся.
 

jcmvbkbc

New member
Как я понимаю, при сборке прошивки для ESP все переменные из модулей занимают индивидуальные места в секции .bss RAM, а константы в секции .data RAM
Не совсем верно: инициализированные переменные попадают в .data, неинициализированные -- в .bss, константы -- в .rodata. Все эти три секции попадают в DRAM.

1) Возможно ли разместить константы в iRAM вместо RAM, если да то каким макросом или определением.
Проще всего, наверно, поместить их в секцию .text, или какую-нибудь другую, имя которой нужно будет вписать в скрипт линковщика (eagle.app.v6.*.ld), в секцию, определяющую содержимое выходной секции .text.

2) Возможно ли указать компилятору, что некоторая область RAM (iRAM
может использоваться для размещения переменных из разных библиотек
т е указать на общедоступную для библиотек (модулей) память, типа "Shared", как это можно сделать в MVC.
Компилятор не занимается распределением кода/данных по памяти, этим занимается линковщик на основании скрипта линковки и содержимого объектных файлов, поданных ему на вход.
Компилятор может поместить функции и статические переменные в определённые секции, согласно атрибуту section:
Код:
include/c_types.h:#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text")))
include/c_types.h:#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
 

pvvx

Активный участник сообщества
Короче непонятно зачем такой убогий модуль на авто
Для сбора параметров, например в контейнере. По вашему выходит, что в каждом контейнере, который устанавливается на платформу и к нему возможно только включение питания на некоторые промежутки времени, надо иметь супер бортовой комп, а так-же распределенную сеть по всем трассам до вашего сервера? :confused: Другие применения стоят денех и являются ком.тайной. :p
флеш отключается лишь при записи, т е при чтении флешь никогда не отключается.
Зависит от процедуры чтения flash и аппаратной схематике модуля. Например при двух flash (как это сделано в новом оригинальном модуле Espressif) и чтении со второй flash через "overlap"( так назвали китайцы) "кеш" не отключатся.
Исходники - улучшенный аналог https://github.com/pvvx/esp8266web/blob/master/app/main/spi_overlap.c#L55
Аналог обычного чтения первой -flash https://github.com/pvvx/esp8266web/blob/master/app/main/app_main.c#L220
Cache_Read_Disable(); присутствует в 90% процедур обращения к flash. Иначе аппаратный конфликт, между модулем "кеширования" и QSPI. Наличие приоритетов занятия шины SPI пока не найдено.

Очистка bss - https://github.com/pvvx/esp8266web/blob/master/app/main/app_main.c#L220
 
Последнее редактирование:

nikolz

Well-known member
Добрый день,
В результате, так сказать,осознания и просветления
наковырял вот такую сборку, которая у меня работает. Желающим предлагаю ее испытать :

Section| Description| Start (hex)| End (hex)|Used space
------------------------------------------------------------------------------
data| Initialized Data (RAM)| 3FFE8000| 3FFE8B18| 2840
rodata| ReadOnly Data (RAM)| 3FFE8B18| 3FFE8B20| 8
bss| Uninitialized Data (RAM)| 3FFE8B20| 3FFF1A10| 36592
text| Cached Code (IRAM)| 40100000| 40103180| 12672
irom0_text| Uncached Code (SPI)| 40210000| 4026A13B| 368955
Total Used RAM : 39440
Free RAM : 42480
Free IRam : 20114
================================================

NodeMCU 0.9.6 build 20150627 powered by Lua 5.1.4
lua: cannot open init.lua
NodeMCU 0.9.6;chipid=10517634;flash: id=1458415,size=4096,mode=0,speed=40000000
NodeMCU 0.9.6 build 20150627 powered by Lua 5.1.4
lua: cannot open init.lua
remain:.3426401...used:.0..total:.3426401
heap=34856
 

Вложения

pvvx

Активный участник сообщества
Предлагаю рассмотреть проблему так сказать комплексно и углубленно.
Начнем от печки.
Не понял про какой автомобиль и с каким контейнером идет речь?
Про которую был разговор. Ссылки на ваши ответы там указаны :)
Какую информацию за год собирает этот контейнер?
Разную :) Давления, влажности, температуры, процентные соотношения газов, их расход и т.д.
Кто к нему приезжает раз в год
Да хоть на обслуживание.
Кому нужна информация за год
Как определили интервал накопления. Почему именно за год а не за месяц или 100 лет?
Пользователю, арендатору и т.д. Более года данные просто не актуальны.
Если вы живете на Земле, то тут рабочий день обычно 8 часов, бывает 4 смены, отчеты в основном берут за неделю, основной отчет за месяц и квартал. Уточнение как работали и кого наказывать :) - шаг не более 30 минут :) Текущая работа и уточнения - пару секунд (актуальность таких данных - только текущий момент и не подлежат накоплению в базу, в базу пишутся усредненные за больший промежуток).
В любом телефоне ныне есть WiFi и ответственный работник имеет пароль для доступа к инфе :p Всё это может находиться в лесу или в зонах, где нет никакой связи ( с доставкой "контейнера" на вертолете). Супер компы и прочее не требуется - зачем устройcтву чуть сложнее холодильнка супер комп?
Вам ключи от банка тоже выдать? :)
Всё равно не догадаетесь, что это за устройство. Но даю гарантию, что от стационарного или ещё какого я уже получил бабло с вас, т.к. вы гарантированно пользовались его продукцией в составе товаров и т.д., если живете в России или бывшей территории СССР и некоторых других стран :p
 
Последнее редактирование:

pvvx

Активный участник сообщества
4) Я бы поинтересовался у заказчика, что дальше он будет делать с этими мегабайтами (скорее всего он либо сам не знает,
либо алгоритмы очень примитивные) и по-возможности сделал бы это в реале.
А всё уже и сделано - представление в виде "живых" графиков (меняется отображение и т.д.) или таблиц (подготовленных для печати).
В итоге никаких внешних серверов не требуется. Они нужны для контроля работы системы, если она стоит на обслуживании.
Так что никаких Lua и никаких 15 Meg - хватает пару на систему + остальное = документация и всё за счет встроенного Web:)
 

pvvx

Активный участник сообщества
Рисуют графики и печатают таблицы.
А на вопрос - А Нафига?
Чтобы указать, что смена работала хуже или лучше прошлой или ... :) Ну чтобы наказать работников :)
Ну и второстепенно для диагностики оборудования.
Можете ещё придумать цели для логеров или других баз данных по любому оборудованию? :)
Если взять другую сферу применения, к примеру геофизику, то там данные ныне собираются аналогично. Смотрится сколько собрано для той-же цели = наказать нерадивого работника. Остальная обработка данных происходит в другом месте, "на базе". И условия с внешними коммуникациями ещё хуже :p Lua и прочее могут использоваться только "на базе", где есть источники энергии для монтсроидальных устройств.
WiFi на российском производстве требует сертификации и на множестве заводов-пароходов просто запрещен. А раз уж такое, то цена не соответствует модулю ESP-8266, то можно поставить и что по круче, особо не заморачиваясь.
Как итого - Lua нафиг не катит на простейших устройствах на базе ESP-8266, кроме случаев наколенно-кухонных домашних изделий на полчаса (помигали светодиодом перед соседом и выкинули).
 
Последнее редактирование:

pvvx

Активный участник сообщества
Показали оборудование, датчики горелки, робота.
...
Вот и нафига козе баян?
В пром. ПЛК и “панелях оператора” ныне тоже пошла тенденция использовать макросы на СИ, а не старых логических языках. Luaчто-то там вообще не прижилась, хотя, возможна и её интеграция.
А ваш случай - причина в том, что там "иносранное" оборудование :)
Наверно скоро нас туда вызовут, на замену оборудования на наше :p
 
Последнее редактирование:

pvvx

Активный участник сообщества
Луа туда еще не дошла. Это следующий этап.
Посмотрите в инете конференции по луа,
будут более понятны перспективы.
Когда дойдет, тогда и будет разговор. Но в ESP она только для демки.
Я вам и предложил изменить это и сделать что-то более стабильное. Но у вас что-то не складывается с Lua - не можете описать что надо менять в NodeMCU для согласования с новыми SDK.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Кто подскажет, что делать с этой ошибкой и куда бежать:
Собираю задачку с модулем mqtt или с другим модулем.
Без модуля все собирается без ошибок. SDK 1.2.0.
SDK 1.1.2. собирается без ошибок
---------------------------
section `.text' will not fit in region `iram1_0_seg'
----------------------
Спасибо
Это не ошибка, а не хватает 32 килобайт IRAM.
Либо использовать систему увеличения IRAM до 48 килобайт, либо размещать функции от MQTT и другие в область flash.
 

pvvx

Активный участник сообщества
Как я понимаю с SDK 1.2.0 тоже ничего на СИ не напишешь?
Т е что луа, что не луа один ....
Верно?
Нет. EspLua делается на любой новый SDK для работы с новыми командами из него и счас работает на SDK 1.2.0 со всеми последними патчами от китайцев, как и все мои проекты.
Например уже вставлены команды wifi.st.rssi() - показывает уровень приема от AP, и команды ограничения мощности передатчика, работающий espconn + ssl ....
А что это за система с 48 К IRAM?
Что у нас доступно 48 килобайт IRAM вместо 32-х, как у вас. :) За счет этого стало возможным корректно использовать тормозную систему коррекции чтения данных с/через прерывание защиты/ошибки CPU с размещением всех констант в IRAM (иначе не хватает). Т.е. фактически у нас больше памяти на 16 к в чипе. Как это включать описано только для сведущих, чтобы китайцы не увеличили код SDK на это дополнение. Им сколько не дай - всё займут никчемным кодом.
 
Последнее редактирование:

nikolz

Well-known member
Собрал в новом UDK китайскую сборку:
NodeMCU 0.9.6;chipid=10517634;flash: id=1458415,size=4096,mode=0,speed=40000000
NodeMCU 0.9.6 build 20150627 powered by Lua 5.1.4
lua: cannot open init.lua
remain:.3396281...used:.0..total:.3396281
heap=34280
------------------------
включены все 22 модуля: "gpio", "pwm", "wifi", "net", "coap", "mqtt", "u8g", "i2c", "spi", "tmr", "node", "file", "adc", "uart","ow", "bit", "ws2801", "ws2812", "cjson", "crypto","rc", "dht"
 

pvvx

Активный участник сообщества
Собрал в новом UDK китайскую сборку:
Соберите на ещё старее SDK - esp_iot_sdk_v0.6.zip
Хип будет больше :)
У вас заголовок темы неверен. У вашей Lua старый кривой SDK v0.9.6 (betta 1) с массой ошибок. Уже пол года прошло и вышло более 10 новых версий, а вы ещё не сообразили?

Поменяйте либы SDK в директории .....\nodemcu-firmware\lib\*.a на новые от SDK 1.2.0 c патчами и пробуйте :)
 
Последнее редактирование:

nikolz

Well-known member
приступил к написанию модуля для исполнения байт-кода из spiffs без загрузки в RAM.
С алгоритмом разобрался, но писать много.
процесс пошел но не быстро.
 
Сверху Снизу