beez-develop.ru

Потому что трудимся как пчелы

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Главная Вопросы и ответы Программы и код Как передать float через UART?

Как передать float через UART?

E-mail Печать PDF

Начнем с небольшого описания типа. 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++));
}

Обновлено 02.02.2012 16:50