Свежие обсуждения
Микроконтроллеры

Преобразование числа с плавающей точкой из формата "Microchip" в "IEEE"

Вот уже несколько дней пытаюсь побороть протокол ModBus в часности передачи чисел с плавающей точкой. Передачу самого числа освоил, но вот с преобразованием числа с плавающей точкой из формата Microchip в IEEE проблемма.
Нашел несколько функций преобразования в интернете, попробовал. Но в результате преобразования из формата Microchip в IEEE я так и не смог получить хотябы нужных 4х байтов в виде HEX (причем все функции давали совершенно разные результаты (???) ).

Сейчас вожусь с идущей в комплект компилятора CСS функции "f_PICtoIEEE" - она у меня тоже не работает. Вот пример:
Даю ей переменную float32 с числом "123.456", в HEX 4 байта выглядят как: 0x76 0x85 0x79 0xE9. После выполнения функции она возвращает float32 число, 4 байта которого выглядят как: 0x05 0x9D 0xD2 0xED, что в отладчике MPLABs соответствует числу "-5.090007e+011" в формате IEEE.

Задал для проверки число "123.456" в формате IEEE (прямо в симуляторе) и получил для этого числа совсем другие байты: 0xE9 0x79 0x42 0xF6.

Пробовал передавать преобразованые функцией "f_PICtoIEEE" байты "0xE9 0x79 0x42 0xF6" на ПК и собирать их в разном порядке, а также проделал это в симуляторе MPLAB SIM и в реальном МК, но так и не получил вразумительного результата. А вот передавая на ПК "0xE9 0x79 0x42 0xF6" получаю искомые "123.456".

Неужели у меня руки настолько кривые? Неужели прийдется самому вникать в различия форматов и писать функцию? Не хочется, может кто чем поможет?
......
Пробовал так:
T=123.456;
T=f_PICtoIEEE(T);
T=f_IEEEtoPIC(T);

в результате T=123.456 (в формате Microchip), т.е. как бы и туда и обратно по одному алгоритму работает.

 

Сергей К: А вот передавая на ПК "0xE9 0x79 0x42 0xF6" получаю искомые "123.456"
0x79,0xe9,0xf6,0x42 - если последовательно от 0 байта к третьему.

 

да, порядок байт нужно изменить. Но вот преобразовать число из формата Microchip в IEEE найдеными функциями никак не получается, в HEXе байты совсем не похожи

 

а компилятор какой ? ццс я не знаю, к сожалению.

 

Сишный

 

хороший ответ
мсс18, мсс30, хайтек, микроси ?

 

PICC ССS

 

Теоретически - от компилятора это не должно зависеть

 

хм... мне скрин от мсс18 прикрепить, где все нормально ? Я не знаю как это здесь сделать.

 

Или мне прикрепить, где не нормально?

Сегодня на свежую голову - решил проблему. Взял функцию, которую в самом начале нашел в интернете. Более детально исследовал и понял, что она работает правильно, но переставляет байты в обратном порядке, готовом сразу для передачи на ПК, поэтому в режиме отладки, в оболочке MPLAB отображается неправильное число. Тогда я не углублялся в порядок байт, потому и не заметил.