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

 
 
 
Reply to this topicStart new topic
> Библиотеки для EEPROM записи/чтения двойного слова (32 бит), значения с плавающей точкой (32 бит), Подскажите библиотеки AVR
Ga_ry
сообщение Oct 21 2015, 20:59
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Добрый всем день.
Подскажите библиотеки AVR для EEPROM записи/чтения двойного слова (32 бит), значения с плавающей точкой (32 бит)

ps
контроллер Atmega88
Go to the top of the page
 
+Quote Post
megajohn
сообщение Oct 21 2015, 21:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



а так не катит ?
__eeprom float var = 12.0;
__eeprom long var2 = 123456;

вариант 2:
в intrinsics.h определено __EEPUT и __EEGET для побайтовой работы
на их базе можно сделать что угодно

#define __EEPUT_N(ee_addr,src,size) for( unsigned char i = 0; i < size; i++ ) __EEPUT(ee_addr+i,((unsigned char*)src)[i] )

float var = 34.67;
__EEPUT_N( 0x34, &var, sizeof( var ) );
long var2 = 3467;
__EEPUT_N( 0x40, &var2, sizeof( var2 ) );


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Oct 22 2015, 06:37
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Первый вариант еще вчера пробовал, при попытке чтения компилятор пишет:
Error[e133]: The output format intel-standard cannot handle multiple address

Второй вариант работает без ошибок, спасибо!

Соответственно для чтения так, правильно?
#define __EEGET_N(src,ee_addr,size) for( unsigned char i = 0; i < size; i++ ) __EEGET(((unsigned char*)src)[i],ee_addr+i )

А что с прерываниями?
При работе этих определений во время записи, прерывания нужно запретить?

Сообщение отредактировал Ga_ry - Oct 22 2015, 06:45
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 22 2015, 06:53
Сообщение #4


Гуру
******

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



Поиск по форумы фразы "Error[e133]: The output format intel-standard cannot handle multiple address" дает кучу результатов


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
megajohn
сообщение Oct 22 2015, 07:02
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Ga_ry @ Oct 22 2015, 10:37) *
А что с прерываниями?
При работе этих определений во время записи, прерывания нужно запретить?


если используете вытесняющую RTOS, либо SuperLoop но запись в EEPROM хотите делать и из прерываний - то нужно запрещать. И не забыть что на 5мс ваша система будет глуха и слепа.
самое правильное, это не запрещать прерывания. И если SuperLoop то не делать запись в прерываниях. Если RTOS то запись через отдельную задачу


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post

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

 


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


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