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

 
 
> CVAVR struct EEPROM copy struct SRAM
AndryG
сообщение Jun 11 2007, 08:44
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Доброго времени суток.

В еепром хранится массив записей.
Нужно определить в ram парочку таких же записей и гонять данные туда-сюда.

Пишу на CV. (1.25b2 ... пробовал и на других - тот же результат)
TINY2313

Первое неудобство:
Код
typedef eeprom struct{
  unsigned char h;
  unsigned char m;
  unsigned char s;
  unsigned char d;
} tpoint_eep;

typedef struct{
  unsigned char h;
  unsigned char m;
  unsigned char s;
  unsigned char d;
} tpoint_ram;

tpoint_ram      point_ram;
eeprom tpoint_eep      point_eep;

Приходится объявлять два "почти одинаковых" типа sad.gif

Ну да ладно ... смирирился .. продолжаю.
Код
void func1(void)
{
point_ram = point_eep;
}

Ругается на ошибку в АСМ-коде ... смотрю листинг - красота!
Код
__COPYME:
    SBIC EECR,EEWE
    RJMP __COPYME
    IN   R23,SREG
    CLI
    OUT  EEARL,R30
    OUT  EEARH,R31
    SBI  EECR,EERE
    IN   R22,EEDR
    OUT  SREG,R23
    ADIW R30,1
    ST   X+,R22
    DEC  R24
    BRNE __COPYME
    RET

OUT EEARH,R31 - нет такого.

Встречал кто такое? Как побороли?
____
P.S.
Плюнул на CV:"Вот хороший повод переползти на WinAvr" ... почитал ... а у него вообще работа с "не SRAM" через функции eeprom_read_byte и т.д.
Тогда получается сравнение point_eep.h == point_rem.h вырастает в такую хучу кода ...
sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Jun 11 2007, 11:41
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Увы,у CV большие проблемы в работе с EEPROM sad.gif Если вы посмотрите хэлп,то увидите,что практически
все библиотечные фукции определены только для данных,лежаших во флеш и рам,а с епром приходится руками работать.Хотя можно доствточно быстро наклеать самописных.)Сответственно,и работа со структурами в EEPROM-дело не для слабонервных.
З.Ы. дык если они пишут,что пофиксили баг с доступом в версии 1.25.4,почему не работает в 1.25.5?
З.З.Ы. 2 Сергей Борщ в CV в определении структуры надо явно указывать ее тип,а такое опреде
ление он понимает как структруру в раме и при определении обьектов структуры еепром ругается на
несовпадение типов.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 11 2007, 13:10
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(WHALE @ Jun 11 2007, 14:41) *
З.З.Ы. 2 Сергей Борщ в CV в определении структуры надо явно указывать ее тип,а такое определение он понимает как структруру в раме и при определении обьектов структуры еепром ругается на несовпадение типов.
Тогда пожалуй прав AndryG:
Цитата(AndryG @ Jun 11 2007, 12:14) *
может точно в WinAvr переползти ... и нафиг этот cv.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jun 11 2007, 15:32
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(Сергей Борщ @ Jun 11 2007, 17:10) *
Тогда пожалуй прав AndryG:

(AndryG @ Jun 11 2007, 12:14)
может точно в WinAvr переползти ... и нафиг этот cv.

Ну вот опять-сразу голову рубить sad.gif Может,усы сбрить будет достаточно? smile.gif
Конвенцию это не нарушает,т.к.стандарт С про разные типы памяти,ессно,ни сном ни духом.
Соответственно,это 100% особенности реализации конкретного компилятора.
Имхо,в CV это сделано логично-без спецификатора типа памяти он по дефолту считает,что работает с
ОЗУ,т.е. по стандарту.
И опять имхо,а как по другому-указатель на данные в рам и например,во флэш действительно должны
иметь разные типы. unsure.gif
З.Ы. Уважаемый аффтар,а нафига вам ваще структура,вы ведь размещаете в ней данные одного типа?
Структуры ведь обычно используют для обьединения в единое целое данных разных типов cranky.gif
В вашем случае,имхо,массив лучше подойдет.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 11 2007, 17:17
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(WHALE @ Jun 11 2007, 18:32) *
Конвенцию это не нарушает,т.к.стандарт С про разные типы памяти,ессно,ни сном ни духом.
Соответственно,это 100% особенности реализации конкретного компилятора.
Имхо,в CV это сделано логично-без спецификатора типа памяти он по дефолту считает,что работает с
ОЗУ,т.е. по стандарту.
И опять имхо,а как по другому-указатель на данные в рам и например,во флэш действительно должны
иметь разные типы.
Не согласен. Типы данных как раз одни и те же - char, int, float, struct. Отличаются они модификатором размещения - например const, volatile, eeprom, __flash. Часть этих модификаторов действительно является расширениями языка, но они никоим образом не говорят о том, что данные имеют другой тип. И насколько я понимаю стандарт, с его точки зрения совершенно фиолетово, что
Код
typedef struct
{
    ........
} a_type;
a_type const a_const;
что
Код
typedef struct const
{
    ........
} a_type;
a_type a_const;
, а в CV мы наблюдаем именно изменение типа, что для меня несколько непонятно.
Цитата(WHALE @ Jun 11 2007, 18:32) *
З.Ы. Уважаемый аффтар,а нафига вам ваще структура,вы ведь размещаете в ней данные одного типа?
Структуры ведь обычно используют для обьединения в единое целое данных разных типов cranky.gif
В вашем случае,имхо,массив лучше подойдет.
Вообще-то структуры используют для группирования именованных данных независимо от типа, чтобы потом обращаться к этим данным по осмысленному имени а не по загадочному индексу массива, так что тут автора понять можно. Правда насчет WinAVR можно немного расстроить автора - он вообще прохо представляет что такое флеш и eeprom, поэтому там доступ к данным ф флеш и eeprom делается вручную с помощью функций чтения/записи байта/слова


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SunnyDevil
сообщение Jun 14 2007, 13:50
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 108
Регистрация: 15-05-07
Пользователь №: 27 742



Цитата(Сергей Борщ @ Jun 11 2007, 20:17) *
Правда насчет WinAVR можно немного расстроить автора - он вообще прохо представляет что такое флеш и eeprom, поэтому там доступ к данным ф флеш и eeprom делается вручную с помощью функций чтения/записи байта/слова


Как ручками?
А вот такое:

Код
extern void *memcpy_P(void *, PGM_VOID_P, size_t);
extern char *strcat_P(char *, PGM_P);
extern int strcmp_P(const char *, PGM_P) __ATTR_PURE__;
extern char *strcpy_P(char *, PGM_P);
extern int strcasecmp_P(const char *, PGM_P) __ATTR_PURE__;
extern size_t strlcat_P (char *, PGM_P, size_t );
extern size_t strlcpy_P (char *, PGM_P, size_t );
extern size_t strlen_P(PGM_P) __ATTR_CONST__; /* program memory can't change */
extern size_t strnlen_P(PGM_P, size_t) __ATTR_CONST__; /* program memory can't change */
extern int strncmp_P(const char *, PGM_P, size_t) __ATTR_PURE__;
extern int strncasecmp_P(const char *, PGM_P, size_t) __ATTR_PURE__;
extern char *strncat_P(char *, PGM_P, size_t);
extern char *strncpy_P(char *, PGM_P, size_t);
extern char *strstr_P(const char *, PGM_P) __ATTR_PURE__;


Это из стандартной библиотеки WinAVR, используем, все работает...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AndryG   CVAVR struct EEPROM copy struct SRAM   Jun 11 2007, 08:44
- - Сергей Борщ   Цитата(AndryG @ Jun 11 2007, 11:44) Перво...   Jun 11 2007, 09:00
- - AndryG   Не проходит такой простой вариант - пробовал ... р...   Jun 11 2007, 09:14
|- - Сергей Борщ   Цитата(AndryG @ Jun 11 2007, 12:14) Не пр...   Jun 11 2007, 09:31
- - AndryG   Про телепатов я в курсе ... Кодtypedef struct{ ...   Jun 11 2007, 10:08
|- - WHALE   Цитата(Сергей Борщ @ Jun 11 2007, 21:17) ...   Jun 11 2007, 17:34
|- - singlskv   Цитата(Сергей Борщ @ Jun 11 2007, 21:17) ...   Jun 11 2007, 17:44
|- - Сергей Борщ   Цитата(SunnyDevil @ Jun 14 2007, 16:50) К...   Jun 14 2007, 19:19
- - WHALE   Цитата(singlskv @ Jun 11 2007, 21:44) И И...   Jun 11 2007, 18:14
|- - singlskv   Цитата(WHALE @ Jun 11 2007, 22:14) Дык эт...   Jun 11 2007, 18:42
|- - AndryG   Ух! Как обычно на этом форуме ... хоть вопрос ...   Jun 12 2007, 06:24
- - WHALE   Вы будете смеяться,но В CV это реализовано именно ...   Jun 12 2007, 06:35
|- - singlskv   Цитата(WHALE @ Jun 12 2007, 10:35) Вы буд...   Jun 12 2007, 13:37
- - mdmitry   >может кто встречал доку типа "переход с C...   Jun 14 2007, 13:35
|- - WHALE   Цитата(mdmitry @ Jun 14 2007, 17:35) С EE...   Jun 14 2007, 14:55
- - mdmitry   >А мужики-то не знают! Можно поподробнее на...   Jun 14 2007, 20:33
- - WHALE   Цитата(mdmitry @ Jun 15 2007, 00:33) Года...   Jun 15 2007, 04:26
- - IgorKossak   Цитата(WHALE @ Jun 15 2007, 07:26) А что ...   Jun 16 2007, 06:48
- - mdmitry   Цитата(WHALE @ Jun 15 2007, 08:26) А запи...   Jun 16 2007, 20:57


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

 


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


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