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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как записать/считать float в/из EEPROM, ATmega8
Сергей Борщ
сообщение Oct 27 2010, 08:08
Сообщение #16


Гуру
******

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



Цитата(sergeeff @ Oct 27 2010, 09:12) *
Код
0x0, sizeof(s));
А для чего явное задание адреса цифрами, да еще и без приведения к указателю?
Код
s s1, s2;
s EEMEM s1_ee, s2_ee;
eeprom_write_block(&s1, &s1_ee, sizeof(s1));
eeprom_read_block(&s2, &s2_ee, sizeof(s2));



--------------------
На любой вопрос даю любой ответ
"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
sergeeff
сообщение Oct 27 2010, 08:53
Сообщение #17


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Я просто хотел показать, как писать/читать структуру в/из eeprom. Ясно, что указатель "куда" в eeprom надо как-то по-приличнее определить, но и
Код
s EEMEM s1_ee, s2_ee;
что-то напутанное собой представляет.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 27 2010, 09:03
Сообщение #18


Гуру
******

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



Цитата(sergeeff @ Oct 27 2010, 11:53) *
но и
Код
s EEMEM s1_ee, s2_ee;
что-то напутанное собой представляет.
Это с непривычки. ведь
Код
s const s1_const, s2_const;
читается вполне ясно.


--------------------
На любой вопрос даю любой ответ
"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
sergeeff
сообщение Oct 27 2010, 11:29
Сообщение #19


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



AVR-овские штучки.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 27 2010, 11:53
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Dog Pawlowa @ Oct 27 2010, 09:16) *
А откуда там оверхэд берется, не подскажете?
Я не утверждаю, а спрашиваю/интересуюсь. laughing.gif Для данных в EEPROM может и не будет оверхеда, а вот для памяти данных при использовании union некоторый оверхед все же возникает.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 27 2010, 14:01
Сообщение #21


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Нет там никакого оверхеда. Беда в том, что это непереносимая конструкция. Для записи/чтения это не играет никакой роли - все на одной системе под одним компилятором. Вопрос в том, на кой это надо, если безо всяких union работает.

Вообще все это относится к сериализации данных. Про это много чего понаписано.
Go to the top of the page
 
+Quote Post
drvlas
сообщение Oct 27 2010, 17:24
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 3-09-10
Пользователь №: 59 263



Цитата(sergeeff @ Oct 27 2010, 17:01) *
Нет там никакого оверхеда

Конечно нет. И про ОЗУ тут напрасно беспокоятся. Совершенно нормально, что я переношу из ЕЕПРОМ в ОЗУ все оперативные данные, работаю с ними - а при необходимости прячу снова в ЕЕПРОМ. Вытаскивать 1 байт из ЕЕПРОМ во время обработки данны - это чуднО smile.gif

Цитата(sergeeff @ Oct 27 2010, 17:01) *
Беда в том, что это непереносимая конструкция.

Почему? Куда непереносимая? Или просто Вы ее не переносите wink.gif

Цитата(sergeeff @ Oct 27 2010, 17:01) *
Вопрос в том, на кой это надо, если безо всяких union работает.

Ну, я это использую потому, что при чтении из ЕЕПРОМ и записи туда подсчитываю контрольную сумму. И мне удобно обращаться поэлементно к массиву. Если и при Вашем подходе можно подсчитывать побайтно сумму - то признаю с готовностью, что много лет у меня болталась напрасно усложненная конструкция smile.gif Спасибо за подсказку!
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 27 2010, 20:38
Сообщение #23


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(drvlas @ Oct 27 2010, 20:24) *
Почему? Куда непереносимая? Или просто Вы ее не переносите wink.gif


Например, тут : http://www.cplusplus.com/doc/tutorial/other_data_types/

написано: "The exact alignment and order of the members of a union in memory is platform dependant."

Или здесь: http://www.drdobbs.com/184403890

Цитата
Ну, я это использую потому, что при чтении из ЕЕПРОМ и записи туда подсчитываю контрольную сумму. И мне удобно обращаться поэлементно к массиву. Если и при Вашем подходе можно подсчитывать побайтно сумму - то признаю с готовностью, что много лет у меня болталась напрасно усложненная конструкция smile.gif Спасибо за подсказку!


Вас же, наверное, интересует crc всей структуры? Кто тогда мешает сделать:

Код
s s1;
uint crc_val =  crc(&s1, sizeof(s1));
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 27 2010, 21:43
Сообщение #24


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
И про ОЗУ тут напрасно беспокоятся. Совершенно нормально, что я переношу из ЕЕПРОМ в ОЗУ все оперативные данные, работаю с ними
Ну я немного погодя додумал, что погорячился.

Кстати говоря, никто не мешает натравить на начало структуры поинтер char *ptr и прогнать его по всем байтам. Зачем там массив явно объявлять?
Более того, к этому поинтеру можно скобочки нарисовать ptr[] и синтаксически будет выглядеть как массив smile.gif
Правда, засада может быть если там в структуре для выравнивания дырки имеются. Но, как уже говорилось, нас то интересует crc всей структуры и ничего не мешает посчитать его в месте с теми дырками и с ними же и хранить в EEPROM. Ну а вообще структуру сделать packed чтоб без дырок была....

В общем я тоже не вижу смысла в юнионе. Одни минусы от его использования получаются.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
drvlas
сообщение Oct 28 2010, 12:05
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 3-09-10
Пользователь №: 59 263



Убедили меня smile.gif По второму пункту. Ибо, что касается приведенных ссылок

Цитата(sergeeff @ Oct 27 2010, 23:38) *
Например, тут...
написано: "The exact alignment and order of the members of a union in memory is platform dependant."

...то здесь я же говорил: использую массив только при записи-чтении всей структуры в ЕЕПРОМ. И мне в это время до лампочки, какое там выравнивание и размещение. Согласны?

Цитата(sergeeff @ Oct 27 2010, 23:38) *
Вас же, наверное, интересует crc всей структуры? Кто тогда мешает сделать:
Код
s s1;
uint crc_val =  crc(&s1, sizeof(s1));

Ну, так кто ж знал smile.gif Спасибо, буду знать. Если crc() есть во всех компиляторах, то даже переносимость не ухудшится.

Но все же не могу не отметить, что в моем случае (с учетом вышеобозначенного способа использования союза) удобство предложенного уважаемым товарищем ergeeff способа - только в обращении к элементам структуры без лишнего .u
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 28 2010, 12:37
Сообщение #26


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



cranky.gif какая-то белиберда. Откровенно железозависимые вещи, которые просто обязаны скрываться за каким-нить write///read(void *src, void * dst, size_t size) зачем туда union - ваще непонятно. Структура - это да, без нее сложно.
Go to the top of the page
 
+Quote Post

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

 


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


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