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

 
 
 
Reply to this topicStart new topic
> EEPROM в ATmega162
Vladimir_T
сообщение Feb 16 2009, 04:56
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Здравствуйте, уважаемые коллеги, столкнулся с такой ситуацией, когда в EEPROM ATmega 162 калибровочные константы из программы сохраняются и (я их вижу программатором AS2M), а когда по включении прибора вычитываю из EEPROM, то мне возвращаются всегда нули. Пользуюсь IAR EW AVR 4.12. Уже и напрямую с регистрами управления EEPROM работал, и все равно возвращаются нули, а сохраняются данные нормально.

Вот примерный кусок:

unsigned int __eeprom C_Par;
unsigned int __eeprom *ptr_C = &C_Par;
unsigned int Rest_Par;


void Save_Par (void)
{ int i;
*ptr_C = C_Par;
}

unsigned int Restore_Par (void)
{
C_Par = *ptr_C;
}


main ()
{
Rast_Par = Restore_Par ();
}
Go to the top of the page
 
+Quote Post
west329_
сообщение Feb 16 2009, 05:48
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Код
__no_init unsigned int __eeprom C_Par;
__no_init unsigned int __eeprom *ptr_C = &C_Par;
__no_init unsigned int Rest_Par;


попробуй так,
советую перед использование ещё и верифицировать данные в еепром crc8, crc16 рулит,
проблем с IAR и мегой162 недолжно быть, сам работал с ней всё нормально.

Сообщение отредактировал west329_ - Feb 16 2009, 05:53
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 16 2009, 05:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Vladimir_T @ Feb 16 2009, 11:56) *
Вот примерный кусок: ...
белиберда какая то написанаsmile.gif C_Par - это переменная типа unsigned int, в коде же обращение к ней как к массиву. Опять же указатель ptr_C в коде должен иметь справа звездочку... Вы же пытаетесь записать что то по адресу, хранящемуся в указателе? ... Указатель же хранит адрес переменной C_Par ... В общем бардакsmile.gif


--------------------
Go to the top of the page
 
+Quote Post
Vladimir_T
сообщение Feb 16 2009, 06:56
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Плохо написал, конечно.
Сохраняю-то я структуру.
А в примере написал принцип только и с грубыми ошибками.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 16 2009, 07:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Vladimir_T @ Feb 16 2009, 13:56) *
Вообще по EEPROM, у меня лично, проблем не возникало ни с одним МК. Может быть в ATmega162 есть какие то ньюансы. А так, все должно работать.
Код
__no_init char __eeprom a[16];
char b[16];

main(void)
{    
    int i;
    
    a[0] = 'h';
    a[1] = 'e';
    a[2] = 'l';
    a[3] = 'l';
    a[4] = 'o';
    a[5] = 0x00;

    for(i = 0; i < 16; i++)
        b[i] = a[i];

    printf(b);
}


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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