Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.06.2009, 06:47
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Функция printf в cvavr 1.25.8
Здравствуйте!
Попытался разобраться с printf() в CodeVision 1.25.8, написал код для отладки
значению a присваиваю a=1.2 и в USART отправляю на терминале выводится a=
Почему не выводит 1.2, помогите
вот код
include ‹mega16.h›
#include ‹stdio.h›
#include ‹delay.h›
float a=1.2;
void main(void)
{
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;
ACSR=0x80;
SFIOR=0x00;
while (1)
{
printf("a=%f",a);
delay_ms(3000);
};
}
|
|
|
|
22.06.2009, 10:44
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Смотрим раздел Standard C Input/Output Functions встроенного хелпа:
void printf(char flash *fmtstr [ , arg1, arg2, ...])
Далее идет описание параметров:
The format specifier string fmtstr is constant and must be located in FLASH memory.
Вы ему говорите:
"a=%f"
Т.е. даете константу и она нормально выводится.
Затем пытаетесь пропихнуть float a=1.2; и получаете ... впрочем сами знаете что получаете. Обратите внимаение что float a=1.2; - это не строковая константа, а переменная с плавающей точкой, хранящаяся в SRAM.
|
|
|
|
22.06.2009, 11:26
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Вот у меня и получается что число с плавающей запятой не могу посмотреть на терминале в CodeVision,
целое число проблем нет.
|
|
|
|
22.06.2009, 11:50
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Ну в списке стандартных функций я не вижу таких что могли бы преобразовывать float в массив char. Поэтому придется вам ее писать ручками. Тем более что кода там ненамного прибавится.
|
|
|
|
22.06.2009, 12:07
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Понятно! А алгоритм перевода числа с плавающей точкой
в char не подскажите?
|
|
|
|
22.06.2009, 12:14
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
Может я неправильно начал тему, но смысл в том что я присваиваю для примера float a1=3, a2=2, a3;
a3 вычисляю a3=a1/a2;
вывожу в Usart
printf("a3=%f",a3);
А в терминале a3= и все
|
|
|
|
22.06.2009, 12:28
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Без коментариев...
-- Прилагается рисунок: --
|
|
|
|
22.06.2009, 12:40
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
спасибо попробую
|
|
|
|
23.06.2009, 09:17
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Сообщение от Mitrar
|
Понятно! А алгоритм перевода числа с плавающей точкой
в char не подскажите?
|
В одном из своих проектов я использовал следующий код:
void convert_val(unsigned int num)
{
ones=0;
tens=0;
hundreeds=0;
thousands=0;
while(num›=1000)
{
++thousands;
num-=1000;
}
while(num›=100)
{
++hundreeds;
num-=100;
};
while(num›=10)
{
++tens;
num-=10;
};
ones=num;
}
Разумеется для float его надо немножко доработать(как я думаю вы уже догадались). Потом полученные данные можно выводить хоть через putchar(). И еще одно: данный алгоритм считает только положительные числа. Для чисел меньше нуля надо в циклах делать сложение.[/quote]
|
|
|
|
23.06.2009, 10:24
|
|
Частый гость
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
|
спасибо за ответ uk8amk, а ларчик просто открывался Halex07 был прав.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:10.
|
|