2015-04-19 2 views
0

У меня есть проект с Arduino Uno, где мне нужно сохранить char **, который слишком большой для EPROM.Как хранить данные во флэш-памяти Arduino Uno (ATmega328p)

В настоящее время я пытаюсь сделать это с последовательным, но я мог бы также использовать AVRISP программиста, если это необходимо (не желательно)

До сих пор я смотрел в Avr/boot.h API, но я не совсем уверен, как правильно его использовать или если это даже правильный способ сделать это.

+0

Сво не ясно для меня, если вы хотите хранить статические данные или динамические данные, так как вы указываете, что это возможно сделать с помощью программатора AVRISP. Известны ли данные во время компиляции? –

+0

@ Rev1.0 во время компиляции не известно, я хочу создать программу, которая позволяет конечным пользователям загружаться в настройках для настройки устройства, поэтому нет времени компиляции. – leumas95

+0

ОК. Обычным способом, вероятно, будет использование какой-либо внешней EEPROM. Другой способ может быть похож на получение обновления прошивки. Загрузите устройство по запросу -> получите данные из кода загрузчика -> напишите данные на конкретный адрес в конце адресного пространства флэш-памяти -> продолжайте основную программу, которая знает, где искать данные. –

ответ

1

Из таблицы ATmega328P раздела «Загрузчик Поддержка», «Применение и загрузчика Flash Разделы» подраздел «Раздел Application» подподраздела:

... инструкция SPM отключается, когда выполняется из Раздел приложения.

Таким образом, нет возможности записать на флеш из текущей программы. Используйте внешнее запоминающее устройство, если вам нужно хранить больше данных, чем подходит на борту.

0

Я не верю, что это правильно. 328p имеет возможность контролировать то, что некоторые инструкции о том, где им разрешен доступ. Я нигде не видел, чтобы это было невозможно, и в некоторых конфигурациях он (328p) может писать флешку под свой собственный контроль.

Я искал лист данных, чтобы «инструкция SPM была отключена» и попала только на ATmega 48a/48pa. Несколько раз сбив с толку то, что прочтение данных о неправильном контроллере. Это не звонит.

скопированные непосредственно из таблицы (660 страниц):

«ATmega 48A/48PA не имеет отдельной секции загрузчика, и инструкция SPM включен для всей вспышки, если SELFPRGEN предохранитель запрограммирован («0 "). В противном случае команда SPM отключена."

328p имеет «бит бит-бит», устанавливает все эти элементы управления, вообще говоря. Они также контролируют доступ к ним.

Я думаю, что вы хотели бы, чтобы поместить его в ЭСППЗУ (которая отличается) ...

Джек

0

На платформе Arduino (в частности, Atmel 328 версии) только позволяют писать на флэш-память, когда это позволяет загрузчик.

Стандартный загрузчик позволяет записывать на флеш-память при установке новой программы, но не позволяет программам во время выполнения писать во флэш-память.

Решение: Установите загрузчик, который позволяет запускать функции, которые позволяют вам записывать во флэш-память.

Вот Загрузчик (показанный на hackaday) для Arduino, что позволяет писать на флэш-памяти во время выполнения http://majek.mamy.to/en/writing-to-internal-flash-on-arduino/

Вот это hackaday пост на тему https://hackaday.com/2015/07/03/arduinos-and-other-avrs-write-to-own-flash/

Смежные вопросы