Начнем с небольшого описания типа. float - представление чисел с плавающей запятой. Очень популярен такой формат в микроконтроллерах.
Единственный распространенные практически на все типы компиляторов формат с плавающей точкой. Зачастую и тип double является тем же самым float.
float в памяти микроконтроллера представляет из себя 4 байта, в которых хранится мантисса со значениями и десятичная степень числа.
Фактически число 2500 будет выглядеть так: 2.5*10^3. отдельно храним 2.5, и отдельно +3. Но не в этом суть статьи.
Итак, задача такая: передать из микроконтроллера переменную var1 типа float. Код написан на языке С.
float var1;
Для этого требуется найти адрес в памяти, где хранится float и побайтово передать его по UART. Объявляем переменную, которая будет указателем на память.
unsigned char * ptr;
И присваиваем ей значение адреса var1.
ptr = (unsigned char *) &var1;
Теперь у нас указатель напрямую ссылается на 4 байта флоат, что и требовалось для решения.
Как получить доступ к значению байтов?
*(ptr) - доступ к первому байту. Можно как писать, так и читать.
*(ptr+1) доступ ко второму байту.
Функция, для передачи байта: putchar(unsigned char b);
Мы последовательно закладываем в нее наши байты и получаем:
putchar(*(ptr));
putchar(*(ptr+1));
putchar(*(ptr+2));
putchar(*(ptr+3));
Или проще записать в виде функции. Впрочем, можно было сразу мотать до конца статьи. ;-)
void write_float(float f)
{
unsigned char *ptr;
char i;
ptr = (unsigned char *)&f;
for (i=0;i<4;i++)
putchar(*(ptr++));
}