Можно ли менять данные записанные во flash с помощью PROGMEM

PBykov
Offline
Зарегистрирован: 17.02.2016

Господа,  есть ли возможность работать с данными, которые записаны в виде массива во flash память? Я не нашел описания и примеров такой возможности. Если я все правильно понял, то массив с помощью PROGMEM можно разместить как константу. Далее его можно читать, но в задаче требуется работать с массивом, допустим 10000 значений unsigned long. Значения появляются в ходе работы программы, изменяют значения, удаляются, дополняются в рамках размера массива. Надеюсь, что есть ПРОФИ в данном вопросе. Буду признателен, если подскажете.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

все, что находится в PROGMEM, это константа по определению. Константа задается при компиляции и неизменна.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

инструкции spm ассемблера вам в руки.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

PBykov пишет:

записаны в виде массива во flash память? 

Ну, подумайте сами, откуда же эти данные там берутся. Значит их кто-то туда записывает. А, значит, писать туда можно. Другой вопрос - нужно ли, но об этом ниже.

PBykov пишет:

Я не нашел описания и примеров такой возможности. 

Странно. Как можно не найти то, что написано в даташите? Или Вы в журнале "мурзилка" искали? Открываете даташит на ATmega328 и на странице 288 находите специальный раздел "28.7.4 Programming the Flash"

PBykov пишет:

Значения появляются в ходе работы программы, изменяют значения, удаляются, дополняются в рамках размера массива.

Память в которую Вы хотите писать значения, которые постоянно в процессе работы программы "изменяются, удаляются, дополняются" имеет ресурс всего 10000 операций записи. Для ручной прошивки это очень много (устанете столько раз перешивать), а вот для данных, которые меняются в программе - это сущие копейки. Так что, немного попишете туда и выбросите микросхему.

Кроме того, запись в эту память очень медленная.

Если Вас устраивает медленная запись и ресурс в 10000 перезаписываний - упомянутый раздел 28.7.4 даташита на принтер и на рабочий стол. А если не устраивает, расширяйте память за счёт внешнией памяти. Это тоже достаточно подробно описано, если знать где искать описание.

 

PBykov
Offline
Зарегистрирован: 17.02.2016

Спасибо, логично. Что бы я не перелистывал подшивку Мурзилок, не сочтите за труд дать ссылочку, где описывается расширение памяти. Еще раз спасибо. 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Внешний SPI SRAM  не подойдёт?  https://www.google.ru/search?q=25lv512+arduino&newwindow=1&sa=N&biw=1920...

__Alexander
Offline
Зарегистрирован: 24.10.2012

Arhat109-2 пишет:

инструкции spm ассемблера вам в руки.

она работает только из зоны бутлоадера.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Не совсем так, но нормально - да. Также точно может работать из основной зоны в зону бутлоадера (запись загрузчика), а равно можно работать и в той же самой зоне, но с существенными ограничениями и подготовками .. в даташите есть детальное описание, несколько корявое но вполне сойдет.

.. и да: м-э-д-л-е-н-н-о-м-э-д-л-е-н-н-о.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015