Всем привет котаны и котики! Пытаюсь с CodevisionAVR 3.12 пересесть на Atmel Studio7. вот мой небеольшой проектик переписываю в студии, и пришел вопрос как по USART дробные числа вывести в терминал. К примеру CodevisionAVR я бы делал так:
Код:
ftoa(adc,2,buffer); //Вывод напряжения с двумя знаками после точки puts(buffer); puts("\n\r"); //переход на новую строку
Для Студии нет подобных библиотек по выводу дробных чисел? было удобно(( Пошарив по stdlib.h, нашел пару функции dtostrf() и dtostre() не особо устроили... к примеру есть пять символов (12.38), а потом стало 9.88, то перед 9 появляется пробел(((
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
имхо, самое логичное - подключить библиотеку поддержки float для printf и пользоваться возможностями этой функции. printf, кстати, сразу и будет в USART выводить.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
slav0n, ARV, Котаны, как вы заметили я не гуру - а новичок, и больше головой об стену Си бьюсь, потихоньку выбиваю по кирпичику))) Данный вопрос решил тем что взял функцию ftoa(float n,unsigned char decimals,char *str) из библиотеки stdlib.lib CVAVR и тупо в*ерачил её в AtmelStudio 7 .c и .h. Но у меня компилятор начал ругаться на такие строки strcpyf(str,"-NAN"); как я понял это обрабатываем ±inf, nan, поэтому тупо //, и заработало, вывод дробных есть.
switch (((unsigned int *) &n)[1]) { case 0xFFFF: //strcpyf(str,"-NAN"); return;
case 0x7FFF: //strcpyf(str,"NAN"); return; };
if (n<0.0) {n=-n; *str++='-';}; if (decimals>6) decimals=6; i=decimals; while (i--) scale=scale*0.1; n=n+scale; i=0; scale=1.0; while (n>=scale) { scale=scale*10.0; // 08032010_1 if (++i>38) { //strcpyf(str,"INF"); return; } }; if (i==0) *str++='0'; else while (i--) { scale=floor(0.5+scale*0.1); d=(unsigned char) (n/scale); *str++=d+'0'; n=n-scale*d; }; if (decimals==0) {*str=0; return;}; *str++='.'; while (decimals--) { n=n*10.0; d=(unsigned char) n; *str++=d+'0'; n=n-d; }; *str=0; }
Поизучав, что это такое strcpyf(char *dest,char flash *src) нашел инфу что должно содержаться в библиотеке #include <string.h> CVAVR, возможно ли её заменить стандартными функциями из библиотеке #include <string.h> в Студии. Ну и проект по сравнению с использованием функции dtostrf() стал весить на 12% меньше.
Данный вопрос решил тем что взял функцию ftoa(float n,unsigned char decimals,char *str) из библиотеки stdlib.lib CVAVR и тупо в*ерачил её в AtmelStudio
Лишние пробелы в начале строки не проще было пропустить?
Лишние пробелы в начале строки не проще было пропустить?
а как? покажите пример, я только учусь, да и вся эта возня с ftoa принципе в первые... но код то меньше весит, значит не проще! но пример хочу увидеть, вам же не сложно!
Не уверен, что за оставшиеся 15 тактов до переполнения в прерывании успеет выполнится всё, что там написано (включая собственно вход-выход из прерывания), чтобы выйти в основную программу и успеть что-то сделать до нового прерывания.
На 16МГц отмерять интервалы с 1мкс (1МГц) таким методом вряд ли получится.
Не уверен, что за оставшиеся 15 тактов до переполнения в прерывании успеет выполнится всё, что там написано (включая собственно вход-выход из прерывания), чтобы выйти в основную программу и успеть что-то сделать до нового прерывания.
На 16МГц отмерять интервалы с 1мкс (1МГц) таким методом вряд ли получится.
к примеру 4us получается отмерить у ардуинщиков функцией micros() в ArduinoIDE, я так понимаю лучшего тоже не выжму?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения