Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EEPROM AtXMega и типы int16,int32,double.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Navovvol
Не могу нормально реализовать запись/чтение EEPROM на AtXMega128A1. (AVR Studio 6, Си)
Использовал стандартную библиотеку
Код
#include <avr/eeprom.h>

Пример использования
CODE

EEMEM int16_t eep_SD_WL;//
EEMEM int16_t eep_SZ_WL;//
EEMEM int32_t eep_DD_WL;//
EEMEM int32_t eep_DZ_WL;//
EEMEM int32_t eep_KM_WL;//
//.....
int16_t inSourceDelta;
int16_t inSourceZero;
int32_t inDestinationDelta;
int32_t inDestinationZero;
//Чтение
inSourceDelta=(int16_t)eeprom_read_word(&eep_SD_WL);
inSourceZero=(int16_t)eeprom_read_word(&eep_SZ_WL);
inDestinationDelta=(int32_t)eeprom_read_dword(&eep_DD_WL);
inDestinationZero=(int32_t)eeprom_read_dword(&eep_DZ_WL);
//Запись
eeprom_write_word(eep_SD_WL,4095);
eeprom_write_word(eep_SZ_WL,100);
eeprom_write_dword(eep_DD_WL,1);
eeprom_write_dword(eep_DZ_WL,1);

Чтение и Запись проходят удачно. Но как только сбрасываю питание - значения теряются.

Нашел на сайте Атмел Апликатион ноте AVR1315 Accessing the XMEGA EEPROM, но он ваще не удобный, нужно вычислять адреса страниц, байтов, и запись только побайтная.
Navovvol
Вообщем я решил траблу, нашел странное поведение компилятора.
Былоsad.gif Работало не понятно как)
Код
/Чтение
inSourceDelta=(int16_t)eeprom_read_word(&eep_SD_WL);

Теперь переделал вот так:
Код
/Чтение
inSourceDelta=eeprom_read_word(&eep_SD_WL);

Почему-то так работает без нареканий. Включена оптимизация Q1.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.