| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (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. Спасибо. |