bbill 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба Подскажите, как на Си считать из EEPROMa с байтовой организацией, переменную типа long. Любая 8-ми битная АВРка. Компилятор ИАР 5.30. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба Подскажите, как на Си считать из EEPROMa с байтовой организацией, переменную типа long. Любая 8-ми битная АВРка. Компилятор ИАР 5.30. Вообще-то, как говорил кот Матроскин, чтобы что-то продать(прочитать) нужно вначале купить(записать) ;) union вам в помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба Подскажите, как на Си считать из EEPROMa с байтовой организацией, переменную типа long. Любая 8-ми битная АВРка. Компилятор ИАР 5.30. __eeprom long my_long_var; //объявление ..................................... my_long_var = 0x12345678; //запись ..................................... ............................................ other_var = my_long_var; //чтение ........................................ Или запись через указатель: __eeprom unsigned char eeBuff[16]; //массив в еепром ............................................................ long data; data = 0x11223344; //данные unsigned char __eeprom *peeData; //уазатель на еепром peeData = eeBuff; //инициализция указателя *(peeData+3) = (unsigned char) (data>>24); //запись *(peeData+2) = (unsigned char) (data>>16); *(peeData+1) = (unsigned char) (data>>8); *(peeData+0) = (unsigned char) (data>>0); ............................................................ data = ((long) (*(peeData+3)<<24))|((long)|(*(peeData+2)<<16))|(*(peeData+1)<<8))|(*(peeData+0)<<0)); //чтение ............................................................ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба В опциях проекта выходной формат Intel-extended не забыть поставить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bbill 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба Спасибо mempfis за ответ. Моя ошибка заключалась в том, что сначала нужно было сделать приведение типа, а потом делать сдвиг было u_char adress = eeDataLong; ... data_long |= ((EEPROM_read(adress++)) <<8); data_long |= (EEPROM_read(adress++)) <<16; ... стало ... data_long |= ((EEPROM_read(adress++)) <<8); data_long |= ((long)(EEPROM_read(adress++))) <<16; ... to Dog Pawlowa: Для записи приведение типа делать не нужно, ошибок не было. u_long long_data; ... EEPROM_write(adress++, long_data >>=8); EEPROM_write(adress++, long_data >>=16); ... В опциях проекта выходной формат стоит ubrof8. установка intel-extended не влияет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба В опциях проекта выходной формат стоит ubrof8. установка intel-extended не влияет. Повлияет, если есть инициализируемые переменные в ЕЕПРОМ, тогда на выходе будет два HEX файла. Прошивка для флэш и для ЕЕПРОМ. Например: int __eeprom val = 0x1234; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bbill 0 24 марта, 2010 Опубликовано 24 марта, 2010 · Жалоба У меня в опциях линкера стоит -we133=i -Ointel-extended,(CODE)=$PROJ_DIR$\--Имя проекта--.hex -Ointel-extended,(XDATA)=$PROJ_DIR$\ee_--Имя проекта--.hex на выходе два HEX файла. Где сие вычитал, к сожалению, не помню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться