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

 
 
> Почему не работает разложение Float на байты?, Для записи Float в EEPROM
Димон Безпарольн...
сообщение Aug 20 2017, 19:44
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Делаю пока в компиляторе C-Free. Удобный и компактрый для таких дел. Ругается на строку

Цитата
float &num = (float&)raw;


Цитата
[Error] D:\8051\CFree\sprintf.c:9: error: syntax error before '&' token


Вот код:

Код
unsigned char EEPROM[5];

// чтение
float EEPROM_float_read(int addr) {  
  unsigned char raw[4];
  unsigned char i;
  float num;
  for(i = 0; i < 4; i++) {raw[i] = EEPROM[i];}
  float &num = (float&)raw;
  return num;
}

// запись
void EEPROM_float_write(int addr, float num) {
  unsigned char raw[4];
  unsigned char i;
  (float&)raw = num;
  for(i = 0; i < 4; i++) EEPROM[i] = raw[i];
}


int main (void)
{    
  EEPROM_float_write(0, 1.2568);
  float a = EEPROM_float_read(0);

printf("%f", a);

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
RadiatoR
сообщение Aug 20 2017, 20:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



в С нет ссылок

В вашем случае верните так:
return *( (float *) raw);

Присвоение забыли разыменовать и не тот знак воткнули
*( (float *) raw) = num;
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Aug 20 2017, 20:01
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Ругается на *((float&)raw) = num;.

Цитата
[Error] D:\8051\CFree\sprintf.c:16: error: syntax error before '&' token


Сообщение отредактировал Димон Безпарольный - Aug 20 2017, 20:02
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 20 2017, 20:12
Сообщение #4


Гуру
******

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



QUOTE (Димон Безпарольный @ Aug 20 2017, 23:01) *
Ругается на *((float&)raw) = num;.

Найдите десять отличий:
QUOTE (RadiatoR @ Aug 20 2017, 23:00) *
*( (float *) raw) = num;



--------------------
На любой вопрос даю любой ответ
"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
Димон Безпарольн...
сообщение Aug 20 2017, 20:25
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Зы. Да, отличия есть. Но вроде от сюда копировал...

Да, работает. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:03
Рейтинг@Mail.ru


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