реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Подкиньте идею организации массива данных.
zheka
сообщение Jan 15 2011, 19:57
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Следующая задачка. ОПять же ради бога, не подумайте что я прошу писать за меня программу. Просто мне хочется совета от человека, который напишет ее рациональнее чем я.

Итак, нужно сделать массив для заполнения таблички.
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 ??
СТруктура конечно удобная, но нужна ли она в данном случае?

Как бы вы организовали операции с данными в описанной ситуации?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 15 2011, 20:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



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

Макросы!
Код
SETUP_DATA  (    Backlight                 , "Backlight"           , "Disp.-Beleucht."      ,  BacklightAlwaysOn  ,   BacklightAuto )


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 15 2011, 21:00
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



разобрался....

Сообщение отредактировал zheka - Jan 15 2011, 22:09
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 15 2011, 22:57
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я бы тоже "лепил структуру". Структурирование данных, по-моему, правильный подход.
Только как вы это себе представляете. Одна структура с полями в разных регионах памяти? Как с ней работать компилятору. Это с точки зрения IAR, например, невозможно. Да и с моей точки зрения, как минимум неправильно.

Вы должны организовать структуру в памяти где поле - есть указатель на переменную. Например строка во флэши либо в eeprom. Это прокатит и будет правильным синтаксически. Так как такую структуру компилятор сможет разместить и сможет с ней работать.
А Вам не придётся её заполнять при инициализации. Компилятор сам инициализирует.
Это также займёт меньше места.
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 15 2011, 23:42
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Слепил структуру - не хватает памяти RAM в mega32.

ПРодемонстрируйте Ваш способ, если не трудно.

Сообщение отредактировал zheka - Jan 15 2011, 23:42
Go to the top of the page
 
+Quote Post
codier
сообщение Jan 16 2011, 09:07
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 21-01-05
Пользователь №: 2 113



Надо разобраться какие ресурсы где хранятся и там их и хранить :-)

Саму структуру, которая это всё собирает можно тоже во флеш пихать, т.к. она указывает на константные адреса что во 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).

Сообщение отредактировал codier - Jan 16 2011, 09:10
Go to the top of the page
 
+Quote Post
zheka
сообщение Jan 16 2011, 11:07
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Я решил все-таки что 3 массива ничуть не напряжнее чем общая структура.
Да и с точки зрения ресурсов контроллера - зачем грузить в RAM то что можно прочитать из flash. В общем однотипные параметры запихал в 3 структуры а из этих структур сделал массивы и доволен как слон.

Однако как все-таки интересно получается. Битый час бьешься над проблемой, не можешь решить - пишешь на форум. Ответ еще не последовал, а решение приходит само-собой. А пока не спросишь у форума, никаких мыслей...
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 16 2011, 11:21
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(zheka @ Jan 16 2011, 17:07) *
А пока не спросишь у форума, никаких мыслей...

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

Что касается удобства заполнения таблички, то решение я предлагал - переопределямые макросы, но я его тут не развиваю, потому что Вам рановато еще пока будет.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.54191 секунд с 7
ELECTRONIX ©2004-2016