подскажите как инициолизирвать имя для SoftwareSerial из переменной ? написал так пишит ошибку SoftwareSerial name[a] (10, 11); // RX, TX
Технически, конечно, можно. Например, тут описывается процесс записи во флэш. Но следует понимать, что: 1. Если мы заливаем весь код, то все относительно просто. Льем подряд, и все. Но если мы модифицируем код, то нужно вычислить, с какого адреса это делать, в каком объеме, принять меры к "раздвиганию" кода, если новый больше, чем место, куда его надо втиснуть, или забиванию освободившегося пространства, если новый меньше, или резервированию места под максимальный размер фрагмента. Если при этом программа написана на C/C++, то задача усложняется, поскольку за счет оптимизации нет однозначного соответствия между конструкциями кода и размером его в памяти. Так что придется писать на ассемблере. 2. Писать во флэш надо уже скомпилированный бинарный код, об исходниках на C/C++ на уровне исполнения кода придется забыть. Компилятор в память микроконтроллера ардуины не влезет. 3. Библиотеки ардуины не предоставляют возможности изменения флэша. Придется писать самому. Именно третий пункт я и имел ввиду, когда писал, что "вообще говоря, нет." PS. 4. Зачем? Проще в программе сделать ветвление, выполняющее в разных условиях разные участки кода. Хранить-то все варианты все равно где-то во флэше придется. Да и накладные расходы на модифицирующий код (пямять), на сам процесс загрузки (время). Да еще износ самого флэша от постоянного переписывания, если оно происходит слишком часто. Теоретически можно оправдать такие фокусы, если делать для программы подгружаемые с внешнего носителя модули в условиях нехватки памяти. Но следует понимать, что подкачка таких модулей будет сильно тормозить работу программы. Так что лучше просто взять МК с большей памятью. PPS, 5.Из текста по ссылке: "В МК с поддержкой бутлоадера на команду SPM накладываются ограничения. Её можно выполнить только из BLS (Bootloader section) — области памяти в самом конце флеша, где живут бутлоадеры. Размер этой области устанавливается фьюзами BOOTSZ. "
Я с вами согласен, что и задача и решение нестандартные. Но если есть задача сохранить много данных, то я бы воспользовался внешним модулем с поддержкой SD-карт.
Ну и зачем при этом писать во флэш? Для хранения коэффициентов хватит SRAM/EEPROM. В принципе, само устройство микроконтроллера вполне себе подталкивает к такой задаче, хоть это, наверное, и далеко не самый эффективный путь. К тому же, эта сеть будет иметь смысл только в том случае, если она будет подключена к реальным сенсорам и актуаторам, т.е. будет иметь физическое воплощение, само собой обосновывающее невозможность ее численного моделирования из-за неизвестных НУ/ГУ. Ардуина здесь избыточна донельзя. Один небольшой МК может выполнять функции одного или буквально нескольких модельных нейронов. Для имитации нейронной сети более-менее интересно в качестве PoC взять очень много очень дешевых и миниатюрных МК и нафаршировать ими какого-нибудь робота от и до. Повторюсь еще раз, это будет иметь смысл только если полностью использовать преимущества МК в виде огромного количества распределенного GPIO для взаимодействия с окружающим миром и принципиальную параллельность работы всех узлов сети. Аналогичного эффекта можно достичь с помощью FPGA. Использовать же один МК для обсчета сети из более, чем нескольких модельных нейронов, это довольно неперспективная задача, которую можно использовать разве что для отладки каких-то базовых примитивов.
Ну вот, например, из самых дешевых: ST7FOXF1M6 - 4р от 1000шт (FLASH 4K, SRAM 384b, без EEPROM - подойдет для сенсоров) STM8S003F3P6 - 25р от 400шт (FLASH 8K, SRAM 1K, EEPROM 128b, подойдет для рядового узла) ATtiny13A-SSU - 30р от 2000шт (FLASH 1K, SRAM/EEPROM 64b, аналогично)