|
CVAVR struct EEPROM copy struct SRAM |
|
|
|
Jun 12 2007, 13:37
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(WHALE @ Jun 12 2007, 10:35)  Вы будете смеяться,но В CV это реализовано именно с помощью простого присвоения char a=5; eeprom char b; b=a; Все что вы написали,абсолютно верно,только имхо,все это нужно просто держать в уме. З.Ы. Последние посты уже откровенный оффтоп и религиозная война-я предлагаю прекратить,пока че-нить от модеров не огребли.  Первым начал я -извиняюсь,вчера немного праздновали.  З.З.ЫПока писал-пропустил пост аффтара. Могу вам сбросить 1.25.5-никмких проблем с взломом нет. Если Вы это про мой пост, то я вобще названий никаких компиляторов в своих постах не упоминал Я говорил только про запись в eeprom вне зависимости от компилятора... Я в курсе что в некоторых компиляторах запись осуществляется присвоением, но ИМХО, чаще всего, так делать не стоит. Так что никаких религиозных войн
|
|
|
|
|
Jun 14 2007, 13:35
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
>может кто встречал доку типа "переход с CV на (WinAVR/IAR)" Не встречал. Использую WinAVR последней версии. Его выбрал давно за GPL  . Сравнивал с IAR новым. Где-то лучше, где-то хуже. Некий код компилировал под оба и смотрел дизассемблер. В моем случае WinAVR больше понравился. Make файл не столь страшен. Есть скрипт в поставке, генерящий его под Вашу задачу. Достаточно просто правиться руками. С EEPROM работал через функции встроенной библиотеки, вполне корректно, за исключением аппаратного глюка в EEPROM ATMega128. Выбор за Вами в любом случае. Наверно сообщение несколько не по теме.
Сообщение отредактировал mdmitry - Jun 14 2007, 13:39
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Jun 14 2007, 13:50
|
Частый гость
 
Группа: Участник
Сообщений: 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, используем, все работает...
|
|
|
|
|
Jun 14 2007, 14:55
|

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

|
Цитата(mdmitry @ Jun 14 2007, 17:35)  С EEPROM работал через функции встроенной библиотеки, вполне корректно, за исключением аппаратного глюка в EEPROM ATMega128. Выбор за Вами в любом случае. Наверно сообщение несколько не по теме. А мужики-то не знают!  Можно поподробнее насчет аппаратного глюка EEPROM ATMega128?Прям щас лежит девайс c ATMega128 на столе,EEPROM довольно активно испльзуется,вроде полет нормальный. Где грабли зарыты?
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Jun 14 2007, 19:19
|

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

|
Цитата(SunnyDevil @ Jun 14 2007, 16:50)  Как ручками? Код typedef struct { uint8_t a; uint16_t b; } tipa_struct_t
tipa_struct_t Struct1; tipa_struct_t PROGMEM Struct2 = {1,2};
void test() { Struct1 = Struct2; // ась??? } char T; void test2(const prog_char * pSrc) { T = *pSrc; // ась? }
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 14 2007, 20:33
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
>А мужики-то не знают! Можно поподробнее насчет аппаратного глюка EEPROM ATMega128?Прям щас >лежит девайс c ATMega128 на столе,EEPROM довольно активно испльзуется,вроде полет нормальный. >Где грабли зарыты? Года два назад. Компилятор WinAvr был 2005 года . Не записывался первый байт в EEPROM по любому страничному адресу, а не только по нулевому (известный глюк). Обнаружили при чтении программатором EEPROM'а после записи данных. Пришлось использовать мажоритарную схему 2 из 3 для надежного сохранения блоков данных, каждый блок с CRC8. Может быть в новых ревизиях кристаллов это исправлено. А может у меня руки кривые  .? Проверить нет возможности новый компилятор и кристаллы, так как платы переданы заказчику.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Jun 15 2007, 04:26
|

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

|
Цитата(mdmitry @ Jun 15 2007, 00:33)  Года два назад. Компилятор WinAvr был 2005 года . Не записывался первый байт в EEPROM по любому страничному адресу, а не только по нулевому (известный глюк). Обнаружили при чтении программатором EEPROM'а после записи данных. Пришлось использовать мажоритарную схему 2 из 3 для надежного сохранения блоков данных, каждый блок с CRC8. Может быть в новых ревизиях кристаллов это исправлено. А может у меня руки кривые  .? Проверить нет возможности новый компилятор и кристаллы, так как платы переданы заказчику. Ну дык так и пишите,что по неизвестной причине у меня глючил EEPROM,а не про "известный аппарат- ный глюк",а то я уже было испугался. А запись в нулевую ячейку вылечили еще в поздних ревизиях at90. А что такое страничный адрес EEPROM?это-ж не пик.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Jun 16 2007, 20:57
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(WHALE @ Jun 15 2007, 08:26)  А запись в нулевую ячейку вылечили еще в поздних ревизиях at90. Это я и назвал известным глюком. Выразился плохо про страничные адреса, извините  . Делал запись по адресам кратным 0x100. Эффект описал ранее, использовались функции из библиотеки WinAvr соответствующей версии.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|