Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подкиньте идею организации массива данных.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
zheka
Следующая задачка. ОПять же ради бога, не подумайте что я прошу писать за меня программу. Просто мне хочется совета от человека, который напишет ее рациональнее чем я.

Итак, нужно сделать массив для заполнения таблички.
1 колонка - порядковый №
2 колонка - заголовок
3 колонка - сохраняемая настройка
4 колонка - текущее состояние.

Ясно что первую и вторую колонки нужно сохранять во flash. УДобнее будет и заполнять и редактировать.
3 колонка - однозначно eeprom
4 колонка - ram.

Возникают следующие мысли - сделать структуру в RAM типа:

Код
typedef struct {
unsigned char chain_id; //номер цепи
char header_1;          // строка 1 заголовка
char header_2;          // строка 2 заголовка
char header_3;          // строка 3 заголовка
unsigned char key_id;   // номер ключа коммутирующего цепь (сохраняемая в eeprom настройка)
unsigned char default;  // состояние по умолчанию (сохраняемая в eeprom настройка)
unsigned char diagnos;  // результат диагностики цепи (записывается в RAM во время работы)
unsigned char state;    // включен/выключен (записывается в RAM во время работы)
} TChain;


TChain CHAINS[40];

unsigned char eeprom key_ids[40];
unsigned char eeprom defaults[40];


и вот дальше я что-то застрял... думается что массив CHAINS будет формироваться после загрузки, заполнять его путем переписи из key_ids и defaults, кроме того, такой же массив с заголовками создать во flash...

А надо ли это? может быть тупо пользоваться по отдельности массивами key_ids, defaults и массивом заголовков из flash ??
СТруктура конечно удобная, но нужна ли она в данном случае?

Как бы вы организовали операции с данными в описанной ситуации?
Dog Pawlowa
Цитата(zheka @ Jan 16 2011, 01:57) *
...
Как бы вы организовали операции с данными в описанной ситуации?

Макросы!
Код
SETUP_DATA  (    Backlight                 , "Backlight"           , "Disp.-Beleucht."      ,  BacklightAlwaysOn  ,   BacklightAuto )
zheka
разобрался....
SasaVitebsk
Я бы тоже "лепил структуру". Структурирование данных, по-моему, правильный подход.
Только как вы это себе представляете. Одна структура с полями в разных регионах памяти? Как с ней работать компилятору. Это с точки зрения IAR, например, невозможно. Да и с моей точки зрения, как минимум неправильно.

Вы должны организовать структуру в памяти где поле - есть указатель на переменную. Например строка во флэши либо в eeprom. Это прокатит и будет правильным синтаксически. Так как такую структуру компилятор сможет разместить и сможет с ней работать.
А Вам не придётся её заполнять при инициализации. Компилятор сам инициализирует.
Это также займёт меньше места.
zheka
Слепил структуру - не хватает памяти RAM в mega32.

ПРодемонстрируйте Ваш способ, если не трудно.
codier
Надо разобраться какие ресурсы где хранятся и там их и хранить :-)

Саму структуру, которая это всё собирает можно тоже во флеш пихать, т.к. она указывает на константные адреса что во flash, что в ram, что eeprom.

Идея такая:
Код
flash char descr_1[] = "Header 1";  // во FLASH
flash char descr_2[] = "Header 2";  // во FLASH

eeprom struct s_state config_1;  // в EEPROM
eeprom struct s_state config_2;  // в EEPROM

struct s_state state_1;  // в RAM
struct s_state state_2;  // в RAM


flash TChain chain_1 = {&descr_1, &config_1, &state_1}; // Указывает на 1 элемент. Сам хранится во FLASH
flash TChain chain_2 = {&descr_2, &config_2, &state_2}; // Указывает на 2 элемент. Сам хранится во FLASH

// Или так:
flash  TChain chains[] = {
    {&descr_1, &s_config_1, &s_state_1},
    {&descr_2, &s_config_2, &s_state_2}
};


Можно сделать какие-нибудь обёртки с макросами для удобства создания, наверное.

Тут главное использовать функции доступа к элементам соответствующие их типам хранения (RAM, FLASH, EEPROM).
zheka
Я решил все-таки что 3 массива ничуть не напряжнее чем общая структура.
Да и с точки зрения ресурсов контроллера - зачем грузить в RAM то что можно прочитать из flash. В общем однотипные параметры запихал в 3 структуры а из этих структур сделал массивы и доволен как слон.

Однако как все-таки интересно получается. Битый час бьешься над проблемой, не можешь решить - пишешь на форум. Ответ еще не последовал, а решение приходит само-собой. А пока не спросишь у форума, никаких мыслей...
Dog Pawlowa
Цитата(zheka @ Jan 16 2011, 17:07) *
А пока не спросишь у форума, никаких мыслей...

Это нормально.
Офф. В бытность мою на заводе пока не принесешь в цех здоровенный логический анализатор и не начнешь думать, куда щупы подключать, решение не находится. А принесешь - все понятно ДО включения анализатора.

Что касается удобства заполнения таблички, то решение я предлагал - переопределямые макросы, но я его тут не развиваю, потому что Вам рановато еще пока будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.