Включение преобразований c типом float в Atmel Studio

Posted by Reason89 | Posted in , , ,

    На днях столкнулся с проблемой вывода числа с плавающей запятой на LCD дисплей WH1602.
    При преобразовании обычного десятичного числа, на LCD выводилось все как нужно.
long int Temp = 0x7777;
char st_Temp[6] = "";
itoa(Temp, st_Temp, 10);
LCD_Data(st_Temp[0]);
LCD_Data(st_Temp[1]);
LCD_Data(st_Temp[2]);
LCD_Data(st_Temp[3]);
    После преобразования в число с плавающей  запятой на WH1602 выводился знак вопроса и ряд пробелов.
long int Temp = 0x7777;
char st_Temp[10] = "";
float Temp_float = 0;
Temp_float = (float)Temp / 100; 
sprintf(st_Temp, "%01.2f", Temp_float );
LCD_Data(st_Temp[0]);
LCD_Data(st_Temp[1]);
LCD_Data(st_Temp[2]);
LCD_Data(st_Temp[3]);
LCD_Data(st_Temp[4]);
LCD_Data(st_Temp[5]);
    После долгих поисков проблемы, скачал DEV C++ и скомпилировал проект там с выводом в консоль. Все вывелось, как и было задумано.
    Получается проблема была в компиляторе Atmel Studio. Версия была у меня 6.0.1703
    Так как контроллеры Atmel сами по себе не умеют работать с числами с плавающей запятой, то такие преобразования выполняются сугубо программно.
    Функции преобразования типа float, такие как sprintf, ftoa, snprintf и.т.д. отнимают много ресурсов контроллера от того их использовать не рекомендуется и они по умолчанию отключены в Atmel Studio.
    Можно  постоянно делить число 10, и проверять результат деления больше или меньше он 10. Чтобы своевременно самому выставить запятую, но для этого нужно городить несколько циклов и условий, а в ресурсах МК я не был ограничен.
     Потому для решения проблемы я скачал Atmel Studio 6.2( в 6.0.1703 такие опции я не нашел).
    Переходим на вкладку параметров проекта ALT+F7.
    В меню AVR/GNU linker- General клацаем галочку на против Use vprintf library
     Затем в AVR/GNU linker- Library добавляем 2 библиотеки: printf_flt и scanf_flt
    Компилируем проект, получаем пару предупреждений об использовании типа float и собственно все. На LCD результат выводит с плавающей запятой.



Comments (0)

Отправить комментарий