вот рабочий пример, взят из реального прожекта. не ардуино, сделано в микрочип студии, но должно и в ардуино работать.
имеем в заголовочном файле:
//описывем некую структуру
typedef struct {
uint8_t VMC_FEATURE_LEVEL;
uint8_t VMC_DISPLAY_COLUMNS; //0x00 = no display available
uint8_t VMC_DISPLAY_ROWS;
uint8_t VMC_DISPLAY_TYPE; //0x00 = Numbers, upper case letters, blank and decimal point; 0x01 = Full ASCII
uint8_t VMCMfgCode[3];
uint8_t VMCSerialNumber[12];
uint8_t VMCModelNumber[12];
uint8_t VMCSofwareVersion[2];
} VMCData_t;
VMCData_t VMCData;
void ReadVMCData(void);
void WriteVMCData(void);
в реализации пишем:
#include <avr/eeprom.h>
#include <avr/pgmspace.h>
VMCData_t EEMEM nv_VMCData = {3,16,2,1,"RUS","000000000000","000000000002","01"};
void ReadVMCData()
{
eeprom_read_block((void*)&VMCData, (const void*)&nv_VMCData, 33);
}
void WriteVMCData()
{
eeprom_write_block((void*)&VMCData, (const void*)&nv_VMCData, 33);
}
едит: все операции с изменением полей, проводятся с экземпяром VMCData
едит2: после компиляции будет помимо хекс файла еще и файл содержимого епром (.eep), его тоже надо залить в чип
MMM
24.Январь.2025 07:17:18
23
Какая глупос… ой простите… прелесть!
@Optron
Объясните подробнее. Абсолютно уверен, что ваша проблема имеет иное решение, не связанное с необходимость перезаписи прогмем.
1 лайк
flexprint:
вот рабочий пример
Я тоже иногда “с разбегу” путаю еепром и прогмем
виноват-с, не до мелочей, родина в опасности сами знаете
1 лайк
Optron
24.Январь.2025 07:25:59
26
Почему - глупость???
Или в динамической памяти хранить одну структуру и записывать ее в PROGMEM после изменения.
Или хранить массив структур в динамической памяти.
а чем тебя килобайт EEPROMa не устраивает?
Optron
24.Январь.2025 07:40:16
28
Ограниченным ресурсом перезаписи.
есть EERAM , ты столько не проживешь.
MMM
24.Январь.2025 08:09:54
30
ресурс прогмема ЕЩЕ меньше
ЕЕПРОМ - 100 тыс циклов, ресурс ПРОГМЕМ всего 10 тыс циклов
2 лайка
чотаржу еще громче. PROGMEM можно 10000 раз перезаписать, а EEPROM в 10 раз больше. Ты нормальный? Мошт, надо книшки какие почитать?
2 лайка
Вас это беспокоит? Давайте об этом поговорим
Есть клёвая штука FRAM называется, работает по i2c, быстрая и неограниченная перезапись. Оччень удобно.
1 лайк
“Шурик, это же не наш метод!”
ТС написал мега код и хочет его защитить вот и ломает нам мозг…
Надо просто найти в загрузчике(он должен быть !) точку входа в функцию записи блока во флеш и вызывать её …
MMM
24.Январь.2025 09:18:43
35
ну мы же с вами знаем, что желание “защитить код” в таком возврасте - это только от непонимания, что твой код дер-мо и нафик никому не нужен.
не надо.
“Не нужна тебе такая машина, Вовка” (с) Бумер
1 лайк
Green1
24.Январь.2025 09:21:40
36
Ну почему же. “Я страдал - пусть и другие пострадают.”
te238s
24.Январь.2025 12:44:21
37
В точку:rofl: До того как чему-нибудь научился тоже думал как всё скрыть, защитить и обезопасить. Ведь это мои будущие миллионы денех!
Вощем это никудышная затея с flash. Никто так и не понял зачем и почему)
Зато у Вознесенского рифма к вопросу “Нафига?” правильная
1 лайк
Optron
24.Январь.2025 14:12:00
39
Спасибо! Разубедили вы меня в этой затее.
FM24CL16 мне в помощь.
А затея была для экономии динамической памяти. Но у нее, оказывается, ресурс перезаписи ограничен.
У динамической памяти - нет. У постоянной - ограничен. И то не у всей.
Optron
24.Январь.2025 14:37:06
41
Поэтому и смотрю в сторону FM24CL16 .
Пока не могу найти ее с обвязкой. Попадаются голые микросхемы.