как выполнить вычисление с плавающей запятой в tmote sky (contiki)

У меня есть следующий фрагмент кода:

#include "contiki.h"
#include <stdio.h> /* For printf() */

PROCESS(calc_process, "calc process");
AUTOSTART_PROCESSES(&calc_process);

PROCESS_THREAD(calc_process, ev, data)
{
 double  dec=13.2, res=0, div=3.2;

  PROCESS_BEGIN();

res=dec+div;

printf("%f",res);


  PROCESS_END();
}

После загрузки вышеуказанного кода на платформе Tmote sky с помощью команды

make TARGET=sky calc.upload, программа загрузится на мот (ошибки нет). Затем войдите в систему, используя команду make login TARGET=sky, появится следующий вывод....

ВЫХОД:

**Райм начался с адреса 4.0 MAC 04:00:00:00:00:00:00:00 Контики 2.7 запущены. Идентификатор узла установлен на 4. CSMA ContikiMAC, частота проверки канала 8 Гц, радиоканал 26 Запуск «процесса расчета»

%f**

Как я могу получить правильное значение?

Спасибо


person siju koshy    schedule 10.11.2014    source источник
comment
возможный дубликат поддержка printf для микроконтроллера MSP430   -  person kfx    schedule 10.11.2014


Ответы (1)


Вам нужна не поддержка вычислений с плавающей запятой — она у вас уже есть. Чего не хватает, так это поддержки с плавающей запятой в printf(). То есть res будет рассчитываться правильно, а printf() не поддерживает его отображение.

Поскольку для этого требуется относительно большой объем кода, многие ориентированные на микроконтроллеры библиотеки опускают поддержку плавающей запятой в stdio. Может быть опция сборки библиотеки, включающая поддержку операций с плавающей запятой — см. документацию по библиотеке.

Вы могли бы поступить правильно, задав вопрос о необходимых конкретных вычислениях и о том, как это можно сделать, используя арифметику с целыми числами или с фиксированной точкой. В качестве альтернативы вы можете написать свой собственный дисплей с плавающей запятой, как описано здесь: >Как вывести значение с плавающей запятой с помощью putchar? например.

person Clifford    schedule 10.11.2014