Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EEPROM в ATmega162
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Vladimir_T
Здравствуйте, уважаемые коллеги, столкнулся с такой ситуацией, когда в 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 ();
}
west329_
Код
__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 недолжно быть, сам работал с ней всё нормально.
prottoss
Цитата(Vladimir_T @ Feb 16 2009, 11:56) *
Вот примерный кусок: ...
белиберда какая то написанаsmile.gif C_Par - это переменная типа unsigned int, в коде же обращение к ней как к массиву. Опять же указатель ptr_C в коде должен иметь справа звездочку... Вы же пытаетесь записать что то по адресу, хранящемуся в указателе? ... Указатель же хранит адрес переменной C_Par ... В общем бардакsmile.gif
Vladimir_T
Плохо написал, конечно.
Сохраняю-то я структуру.
А в примере написал принцип только и с грубыми ошибками.
prottoss
Цитата(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);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.