Вот пошел второй месяц как пытаюсь понять искусство писания на данном языке. Возник вопрос. Имею число типа Float хочу записать в EEProm. Как обратится к 1,2,3,4 байту числа Float???? Компилятор IAR Embedded Workbench.
Вот пошел второй месяц как пытаюсь понять искусство писания на данном языке. Возник вопрос. Имею число типа Float хочу записать в EEProm. Как обратится к 1,2,3,4 байту числа Float???? Компилятор IAR Embedded Workbench.
Видимо, следует почитать про формат числа float в представлении библиотеки math.h для Вашего МК.Сообщение от bob1
С трудом представляю, а для чего это может понадобиться? Наверное, я что-то упустил в жизни.
главное не пользоваться АВРовским компилятором.
Я его года 4 назад мучал, потом посомтрел ассемблер с него на выходе, за голову взялся...
Если у него конструкции CASE и вложенные IF Выдают на выходе совершенно разный код...
Сообщение от bob1(не идеал, но как пример для этой архитектуры пойдёт)Код:typedef union { float f; unsigned char a [sizeof (float)]; } bd_dloat; .... bd_float v; v.f = 355.0 / 113.0; int i; for (i = 0; i < sizeof v.f; ++ i) write_one_byte_to_eeprom(offset + i, v.a [i]);
или с использованием многобайтных функций записи в eeprom:
Код:float v; v = 355.0 / 113.0; eeprom_busy_wait(); eeprom_write_block(data, (void *) offset_in_eeprom, sizeof v);
Я, конечно, в С не шибко силен, но я думаю, что компилятор будет не очень доволен. Ведь в объединение записали float, а берем из него unsigned char.
v.f = 355.0 / 113.0; это float, а здесь
write_one_byte_to_ee prom(offset + i, v.a [i]); уже не float
вообще-то не будет ругаться. Книжку почитал.
а если побитовым сдвигом разделить значение float на 4 char и спокойно их сохранить в памяти?
Такие вещи делаю указателями.
unname
Ассемблер лучше не смотреть, что бы за голову не держаться
Genadi Zawidowski
Геннадий спасибо . Уже попробовал--работает.
RU3XN
Что за книжка?
unname
НА побитовый сдвиг числа float компилятор ругается.
Alex007
Пробовал так:
float *A;
uint8_t *B;
B=A;
В 3 строчке пишет ошибка.
p.s.Проц ATxMega128A1. Там указатели занимают 3 байта.
Успехов!!
Ещё так.
или вот такКод:float f; const uint8_t * p; int8_t i; p = (const uint8_t *) & f; for (i = 0; i < sizeif f; ++ i) write_byte_to_eeprom(offset + i, p [i]);
Код:float f; int8_t i; for (i = 0; i < sizeif f; ++ i) write_byte_to_eeprom(offset + i, ((const uint8_t *) & f) [i]);
А что, функций блочной записи в eeprom нет?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)