Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохранение вещественного числа побайтно в память
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Hastja
Кто сталкивался, подскажите аль поделитесь идеями, как красиво сохранить вещественне число побайтно в память, в какую - это уже аппаратный вид реализации.
Язык Си.

Сам могу предположить:
- преобразовать в строковый тип библиотечными функциями и сохранить побайтно.
- сделать ассемблерную вставку, а там все сделать.

Хотелось бы выслушить ваши предложения,
по возможности реализацию.
Заранее благодарен за любые старания.
wodya
Насколько я понял нужно получить доступ к каждому байту вещественного числа.

Я делаю так

float x;
*((BYTE*)(&x)) - первый байт
*((BYTE*)(&x)+1) - второй байт
*((BYTE*)(&x)+2) - третий байт
*((BYTE*)(&x)+3) - четвертый байт
blackbit
Наложи байтовый массив через union.
Hastja
>Наложи байтовый массив через union.
В принципе можно обьеденить одинакового размера две переменные, например
typedef union
{ float f_32; // 32bit
unsigned int i_32; // 32bit
} foo_t;

Будет же что и массив
float x;
*((BYTE*)(&x)) - первый байт
*((BYTE*)(&x)+1) - второй байт
*((BYTE*)(&x)+2) - третий байт
*((BYTE*)(&x)+3) - четвертый байт
DASM
зачем на int ?
Код
union
{
float f;
struct
{
  char b0;
  char b1;
  char b2;
  char b3;
};
}
f = 3.14145926;
printf ("%d %d %d %d", b0, b1, b2, b3);
Hastja
>зачем на int ?
Если int 32 бита(4 байта), например компилятор IAR, RealView, то
такое:
union {
float f;
struct {
char b0;
char b1;
char b2;
char b3;
};
}

И такеое:
typedef union {
float f;
unsigned int b;
} foo_t;

будут равнозначны.
С массивом функциональнее читается.

Уже работает на AT45 во всю.
Сергей Борщ
Цитата(Hastja @ Apr 4 2007, 11:21) *
С массивом функциональнее читается.
Тогда возьмите такую реализацию:
Код
union
{
    float f;
    uint8_t char b[sizeof(f)];
};
или
union
{
    float f;
    uint8_t char b[];
};
printf ("%d %d %d %d", b[0], b[1], b[2], b[3]);
topkin
"Натяни" на это число байтовый массив через union. Хошь потом по байтам обращайся к переменной, а хочешь к переменной в целом, так будет читабельнее и приятней) ИМХО
Коллеги уже примеры написали, повторяться не буду))
defunct
memcpy( куда, &MyFloat, sizeof( float) );
Hastja
Спасибо за советы, и бесценный опыт каждого!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.