Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > [avr] Формат дробных чисел в avr


Автор: kiLLProg 9.4.2011, 09:46
Вот уже я весь интернет перерыл, а найти информацию о формате дробных числах для AVR микроконтроллерах не могу. 
Читал про IEEE-754 и про формат предложенный Microchip. В AVR другой формат. В этом я убедился после просмотра дробного числа в памяти микроконтроллера (в AvrStudio View->Memory). 

Например: число 3.14

IEEE 754 - 4048F5C3 
Microchip - 8048F5C3
AVR         - C3F54840

Подскажите пожалуйста, где мне найти нужную информацию?

Автор: Mazzi 9.4.2011, 22:00
Представление чисел с плавающей точкой зависит от компилятора. Вы каким пользуетесь? 

Автор: kiLLProg 10.4.2011, 05:02
WinAVR Си.

Автор: Mazzi 10.4.2011, 09:45
Насколько я знаю, WinAVR использует компилятор GCC. В интернете можно найти исходники этого компилятора.
А для какой цели вам это нужно?

Добавлено через 3 минуты и 38 секунд
Внимательнее посмотрел и увидел, что это одно и то же.

IEEE 754 - 4048F5C3 
AVR         - C3F54840

Только у AVR байты расположены в обратной последовательности.

Автор: kiLLProg 10.4.2011, 14:43
Цитата
Внимательнее посмотрел и увидел, что это одно и то же.

Точно! А я не замечал. Вот если бы не вывел байты в один столбик, то мы бы намного позже заметили такую простую разницу байт между ИЕЕЕ и АВР. 
Значит теперь буду записывать байты в переменную в обратном порядке, и переводить в десятичное дробное число согласно стандарту ИЕЕЕ 754.

Цитата
А для какой цели вам это нужно?

Моя задача состоит в том чтобы обрабатывать поступающие байты от некоторого устройства. Если сообщение с индификатором 001 (к примеру) то в байтах приходит дробное число, если 002 то в батах целое.  Собрать целое число из нескольких пришедших байт не проблема. А вот с дробными проблематично, тем более если не знаешь в каком виде они хранятся в памяти ЭВМ (стандарт ИЕЕЕ 754 это описывает). Далее этот набор байтов я "пересчитаю" и получу искомое дробное число (я надеюсь это возможно, ведь есть примеры пересчета 16ричного представления дробного числа в ЭВМ в десятичное дробное число). 

Если вы не знаете. C3F54840 не равно 3.14, что бы получить 3.14 нужно сделать преобразования над 16ричным числом C3F54840.

Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)