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

 
 
> Структура с хранением данных в flash и eeprom, Возможно ли такое в CodeVison?
altlogic
сообщение May 16 2008, 02:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



Здравствуйте!

Потребовалась простенькая структура хранящая часть информации во флеше, а часть в еепром. По документации кодвижина не могу понять как это сделать.
Нужно реализовать нечто подобное:
Код
typedef struct  
{          
   flash unsigned char ModeID;
   flash unsigned char ModeName[10];
   eeprom int DayTemp[7];
   eeprom int NightTemp[7];
   eeprom unsigned char StartDayTime[2];  
   eeprom unsigned char FinishDayTime[2];  
}mode_t;

то есть первые две переменные хранить во флеше, а остальные в еепром. Возможно ли это в кодвижине?

Сообщение отредактировал altlogic - May 16 2008, 02:38


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение May 16 2008, 07:25
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Код
          
   flash unsigned char ModeID;
   flash unsigned char ModeName[10];
   eeprom int DayTemp[7];
   eeprom int NightTemp[7];
   eeprom unsigned char StartDayTime[2];  
   eeprom unsigned char FinishDayTime[2];  

typedef struct  
{          
   unsigned char *pModeID;
   unsigned char *pModeName;
   int *pDayTemp;
   int *pNightTemp;
   unsigned char *pStartDayTime;  
   unsigned char *pFinishDayTime;  
}mode_t;

flash mode_t Mode={&ModeID,&ModeName,&DayTemp,&NightTemp,&StartDayTime,&FinishDayTime};


Вполне жизнеспособный костыль...
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение May 16 2008, 07:39
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(_Pasha @ May 16 2008, 11:25) *
Вполне жизнеспособный костыль...

До тех пор, пока нам не понадобится второй экземпляр объекта node_T. Тогда ручками придется насоздавать
Код
flash unsigned char ModeID_2;
   flash unsigned char ModeName_2[10];
   eeprom int DayTemp_2[7];
   eeprom int NightTemp_2[7];
   eeprom unsigned char StartDayTime_2[2];  
   eeprom unsigned char FinishDayTime_2[2];

flash mode_t Mode_2={&ModeID_2,&ModeName_2,&DayTemp_2,&NightTemp_2,&StartDayTime_2,&FinishDayTime_2};


И кстати только сейчас заметил - вы не указываете квалификаторы flash и eeprom у указателей. По идее, не скомпилится... Или жто особенность Codevision?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 16 2008, 08:50
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Непомнящий Евгений @ May 16 2008, 10:39) *
До тех пор, пока нам не понадобится второй экземпляр объекта node_T.

Понял.
Код
flash unsigned char ModeID;
flash unsigned char ModeName[10];

Для этих мемберов надо заводить массивы, содержащие все возможные значения, и хранящиеся, ессно, во флеше, типа
Код
flash unsigned char Avail_Modes[Max_Avail_Modes];
flash unsigned char * ModeNameStr[Max_Mode_Names]={&ModeName_1, etc...}


А в структуре, которая нужна автору, добавить индексы, по которым можно найти нужные значения из флеша
Код
typedef struct  
{          
   eeprom unsigned short int ModeID_Index;     // хватит же 256 доступных мемберов ?
   eeprom unsigned short int ModeName_Index;
   eeprom int DayTemp[7];
   eeprom int NightTemp[7];
   eeprom unsigned char StartDayTime[2];  
   eeprom unsigned char FinishDayTime[2];  
}mode_t



Цитата
И кстати только сейчас заметил - вы не указываете квалификаторы flash и eeprom у указателей.

Ага. Прощелкал.
Go to the top of the page
 
+Quote Post
altlogic
сообщение May 19 2008, 06:59
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



Прошу прощение за невнимательность к теме, т.к. для себя уже нашёл выход. Вот, что я накрутил:
Код
//!< Названия доступных режимов обогрева
#define MODE_WEEK_NAME  "Недельный"
#define MODE_DAYLY_NAME "Суточный"
#define MODE_SMS_NAME   "SMS"
#define NUM_OF_MODE     3

//!< Идентификаторы доступных режимов обогрева    
#define MODE_DAYLY_ID   0
#define MODE_WEEK_ID    1
#define MODE_SMS_ID     2

//<! Структура для хранения в eeprom
typedef eeprom struct
{
   int DayTemp[7];
   int NightTemp[7];
   unsigned char StartDayTime[2];  
   unsigned char FinishDayTime[2];  
} eeprom_mode_t;

//<! Структура для хранения во flash
typedef flash struct
{
   unsigned char ModeID;
   unsigned char ModeName[10];
} flash_mode_t;


typedef struct
{
  eeprom eeprom_mode_t *e; //<! Указатель на eeprom, лежащий в обычной памяти
  flash flash_mode_t *f;   //<! Указатель на flash, лежащий в обычной памяти
} mode_t;


//!< Данные для инициализации структуры eeprom_mode_t
//<! Суточный режим
eeprom eeprom_mode_t ep1 =
{  {23, 23, 23, 23, 23, 15, 15}, {15, 15, 15, 15, 15, 15, 15}, {6, 30}, {19, 0}  };

//<! Недельный режим
eeprom eeprom_mode_t ep2 =
{  {21, 21, 21, 21, 21, 21, 21}, {20, 20, 20, 20, 20, 20, 20}, {7, 0}, {22, 0}   };

//<! Режим SMS
eeprom eeprom_mode_t ep3;

//!< Данные для инициализации структуры flash_mode_t
flash flash_mode_t fp1 = { MODE_DAYLY_ID, MODE_DAYLY_NAME };   //<! Суточный режим
flash flash_mode_t fp2 = { MODE_WEEK_ID, MODE_WEEK_NAME   };   //<! Недельный режим
flash flash_mode_t fp3 = { MODE_SMS_ID, MODE_SMS_NAME     };   //<! Режим SMS

//<! Объявление массива структур modes
mode_t modes[ NUM_OF_MODE ] = { {&ep1, &fp1}, {&ep2, &fp2},{&ep3, &fp3} };


Инициализация немного сложна, зато обращение выглядит просто:
Код
int id =modes[i].f->ModeID;

Хотя можно было объявить массив указателей fpи ep, но хрен редьки не слаще, тогда при его инициализации нужно было указывать что-то вроде
mode_t modes[ NUM_OF_MODE ] = { {&ep, &fp}, {&ep+xx, &fp+yy},{&ep+2*xx, &fp+2*yy} };
где xx, yy размер структур

Цитата(_Pasha @ May 16 2008, 19:50) *
А в структуре, которая нужна автору, добавить индексы, по которым можно найти нужные значения из флеша
Код
typedef struct  
{          
   eeprom unsigned short int ModeID_Index;     // хватит же 256 доступных мемберов ?
   eeprom unsigned short int ModeName_Index;
   eeprom int DayTemp[7];
   eeprom int NightTemp[7];
   eeprom unsigned char StartDayTime[2];  
   eeprom unsigned char FinishDayTime[2];  
}mode_t

Я решил константы записать во флеш, а переменнные в eeprom, поэтому не смог бы применить вашу конструкцию


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 19 2008, 08:35
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(altlogic @ May 19 2008, 09:59) *
Я решил константы записать во флеш, а переменнные в eeprom, поэтому не смог бы применить вашу конструкцию


Дык я тоже самое и имел ввиду, только другими средствами.
Go to the top of the page
 
+Quote Post



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

 


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


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