Можно ли сохранить некоторые данные автоматически в микроконтроллере AVR?

Ну, вопрос говорит сам за себя. Что я хотел бы сделать, так это то, что каждый раз, когда я включаю микроконтроллер, он должен брать некоторые данные из сохраненных данных и использовать их. Он не должен использовать какой-либо внешний флэш-чип. Если возможно, дайте фрагмент кода, чтобы я мог использовать их в AVR studio 4. Например, если я сохраню 8 данных uint16_t, эти данные должны быть загружены в массив uint16_t.


person ponir    schedule 15.06.2012    source источник
comment
Какой АВР вы используете? Ресурсы памяти сильно различаются между устройствами, некоторые имеют пользовательские сектора, предназначенные для хранения калибровочных коэффициентов, серийных номеров и тому подобного.   -  person uɐɪ    schedule 26.06.2012
comment
вы получили ответ, включающий правильный код, пожалуйста, примите его или ответьте, почему он вас не устраивает.   -  person John    schedule 30.04.2014


Ответы (2)


Вы должны записать данные в программную память чипа, если вам не нужно обновлять их программно, или если вы хотите поддержку чтения-записи, вы должны использовать встроенную СППЗУ.

Пример программы:

#include <avr/pgmspace.h>

PROGMEM uint16_t data[] = { 0, 1, 2, 3 };

int main()
{
     uint16_t x = pgm_read_word_near(data + 1); // access 2nd element
}
person Community    schedule 15.06.2012
comment
На самом деле, мне нужно сохранить данные программно. Дело в том, что мне придется откалибровать некоторые данные, чтобы использовать эти данные в течение нескольких часов. Я хочу откалибровать его после использования в течение нескольких часов. Таким образом, калибровка снова и снова выглядит не очень хорошо. Запуск микроконтроллера в течение всех этих часов тоже выглядит не очень хорошо. :( - person ponir; 15.06.2012

Вам необходимо получить техническое описание детали, которую вы используете. Подобные микроконтроллеры обычно содержат по крайней мере флэш-память, а иногда и несколько банков флэш-памяти, чтобы можно было использовать разные загрузчики, при этом упрощая стирание одной флэш-памяти целиком, не затрагивая другую. Также у некоторых есть eeprom. Это все внутреннее, а не внешнее. Esp, поскольку вы говорите, что вам нужно сохранять программно, это должно работать (помните, как легко изнашивать флэш-память, не сохраняйте, если вам это не нужно). Либо eeprom, либо флэш-память будут соответствовать требованию наличия этой информации при включении питания в энергонезависимой памяти. А также возможность сохранить его программно. Погуглив, вы найдете ряд примеров того, как это сделать, в дополнение к техническому описанию, которое вы, по-видимому, не читали, а также примечания к приложению, которые также содержат эту информацию (которую вы должны были прочитать). Если вы ищете что-то вроде одноразового программируемого перегорающего предохранителя, могут быть OTP-версии avr, и вам придется прочитать таблицы данных, справочники программистов и примечания к приложениям о том, как программировать эту память, и должны сказать вам, если Части OTP могут быть написаны программно или если они обрабатываются по-разному.

Чтение данных находится в карте памяти в таблице данных, напишите код для чтения этих адресов. Написание описано в даташите (справочное руководство программиста, руководство пользователя, как бы это ни называлось в atmel), а также в сети есть много примеров.

person old_timer    schedule 13.07.2012
comment
Спасибо. Я начну читать таблицу данных для будущих целей. :) - person ponir; 14.07.2012