У меня проблема с хранением данных в EEPROM на 16-битном микроконтроллере Fujitsu. Запись байтов в EEPROM не проблема, я могу без проблем писать и читать данные побайтно.
Мы используем перечисление dword
s для хранения различных переменных в EEPROM, и все они имеют длину 4 байта. Для каждой переменной мы хотим сохранить до этих 4 байтов пространства. Это в значительной степени нехорошо, потому что, когда я хочу сохранить только флаг (один бит) или переменную длиной всего один байт, она все равно использует четыре байта.
Причина, по которой мы используем эту четырехбайтовую технику, заключается в том, что мы знаем, по какому адресу хранится переменная, к которой я хочу получить доступ. Это нормально работает, но имеет ряд недостатков.
Один - это потраченное впустую пространство, а другой - проблема, которая возникает, когда я работаю со структурами.
Например, у меня есть структура вроде
typedef struct {
attenuator_whichone_t attenuator;
char* attenuatorname;
servo_whichone_t associated_servo;
ad_ad7683_whichone_t associated_adconverter;
word item_control;
word item_mode;
word item_position;
} attenuator_info_t;
и инициализируя его как:
static attenuator_info_t constinfo[_NUM_ATTENUATOR_WHICHONE_] = {...}
С кодом, который мы используем сейчас, нам нужно будет сохранять каждое значение индивидуально. Отсюда разрушение конструкции. Мне бы очень хотелось сохранить эту структуру такой, какая она есть. (и еще пара в коде).
Насколько я понимаю, для этого мне понадобится файловая система. Поиск в Google дал мне несколько примеров, таких как microFAT и так далее. Это, на мой взгляд, перебор.
Было бы неплохо сохранить структуру с sizeof и перебрать все байты, но тогда как мне решить проблему знания того, где находятся структуры в EEPROM? Так что, вероятно, нужна какая-то файловая система. Нет ничего меньшего? Или какая-то уловка? В любом случае переменные имеют фиксированную длину. Вот почему мне было интересно, есть ли какой-нибудь хороший и простой способ хранить эти структуры.
Я надеюсь, что смогу подробно остановиться на своей проблеме.