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

 
 
> Hi-Tech C & EEPROM & FLASH, как красиво работать ?
_Pasha
сообщение Sep 29 2008, 15:52
Сообщение #1


;
******

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



Доброго времени!
Уж на что в GCC некомфортно получается работать с флешом и еепром, но по сравнению с продукцией hi-tech это - вершина сервиса!
Кто-нить красиво работает в HTC? Имеется ввиду инициализация, работа со структурами... при наличии только EEPROM_READ(address) и __EEPROM_DATA(...).
Грустно все это...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DL36
сообщение Sep 30 2008, 06:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 460
Регистрация: 5-10-06
Из: Херсон
Пользователь №: 21 006



Цитата(_Pasha @ Sep 29 2008, 18:52) *
Доброго времени!
Уж на что в GCC некомфортно получается работать с флешом и еепром, но по сравнению с продукцией hi-tech это - вершина сервиса!
Кто-нить красиво работает в HTC? Имеется ввиду инициализация, работа со структурами... при наличии только EEPROM_READ(address) и __EEPROM_DATA(...).
Грустно все это...

Например так
Код
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Восстанавливам данные из EEPROM
//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void initSetNU(void)
{ unsigned char i, *p, n, N;
  i = sizeof(NUcanal);                    // Размер структуры
  p = (unsigned char*)(NUcanal);            // Указатель на место размещения в памяти
  n = NuCanalStartEEprom;                 // Размещение в ЕПРОМ

  while (i--)
    {*(p++)=eeprom_read(n++);}          //Чтение
}

И чего грустить.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 30 2008, 07:30
Сообщение #3


;
******

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



Цитата(DL36 @ Sep 30 2008, 10:00) *
И чего грустить.

Вот чего:
Код
/*My extension to working with EEPROM*/
void eeprom_read_block(void* dest, void*src, size_t size);

/*
total parameter set, stored in EEPROM, fits in single record - the simplest way to operate instead of fixed address definition
*/
typedef struct
{
  int fld1;
  long fld2;
} complex_type_t;

complex_type_t* eep_image;
int requested_field;

void main(void)
{
/* blah blah blah*/
eep_image = (complex_type_t*) 0;
eeprom_read_block(&requested_field,&(eep_image->fld1),sizeof(requested_field));
}


А потом эту структуру инициализируем черт знает чем __EEPROM_DATA (...)
И это при том, что параметров может быть несколько десятков.
Проктологи отдыхают...smile.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 18 2008, 06:50
Сообщение #4


;
******

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



Вот, наконец-то, нормальное решение. И удобно, и максимально близко к WINAVR, используемому гораздо чаще, чем hi-tech. Работает на основе стандартного макроса offsetof.

Код
#include <stddef.h>
typedef struct
{
  int fld1;
  unsigned char fld2[45];
} complex_type_t;

typedef struct
{
int memb1,memb2;
complex_type_t record;
} paramset_t;

void main(void)
{
/* blah blah blah*/
unsigned char tmp;
tmp = eeprom_read(offsetof(paramset_t,record.fld2[6]));
}


Ессно, это примитив для чтения/записи блока.
P.S. вначале написал, а потом нашел оч. красивую статью: статья
smile.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th June 2025 - 00:39
Рейтинг@Mail.ru


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