Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 22.06.2009, 06:47  
Mitrar
Частый гость
 
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
Mitrar на пути к лучшему
По умолчанию Функция 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);
};
}
Реклама:
Mitrar вне форума  
Непрочитано 22.06.2009, 10:44  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию

Смотрим раздел 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.
uk8amk вне форума  
Непрочитано 22.06.2009, 11:26  
Mitrar
Частый гость
 
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
Mitrar на пути к лучшему
По умолчанию

Вот у меня и получается что число с плавающей запятой не могу посмотреть на терминале в CodeVision,
целое число проблем нет.
Mitrar вне форума  
Непрочитано 22.06.2009, 11:50  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию

Ну в списке стандартных функций я не вижу таких что могли бы преобразовывать float в массив char. Поэтому придется вам ее писать ручками. Тем более что кода там ненамного прибавится.
uk8amk вне форума  
Непрочитано 22.06.2009, 12:07  
Mitrar
Частый гость
 
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
Mitrar на пути к лучшему
По умолчанию

Понятно! А алгоритм перевода числа с плавающей точкой
в char не подскажите?
Mitrar вне форума  
Непрочитано 22.06.2009, 12:14  
Mitrar
Частый гость
 
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
Mitrar на пути к лучшему
По умолчанию

Может я неправильно начал тему, но смысл в том что я присваиваю для примера float a1=3, a2=2, a3;
a3 вычисляю a3=a1/a2;
вывожу в Usart
printf("a3=%f",a3);
А в терминале a3= и все
Mitrar вне форума  
Непрочитано 22.06.2009, 12:28  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,455 раз(а) в 955 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию

Без коментариев...

-- Прилагается рисунок: --
Halex07 вне форума  
Непрочитано 22.06.2009, 12:40  
Mitrar
Частый гость
 
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
Mitrar на пути к лучшему
По умолчанию

спасибо попробую
Mitrar вне форума  
Непрочитано 23.06.2009, 09:17  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию

Сообщение от 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]
uk8amk вне форума  
Непрочитано 23.06.2009, 10:24  
Mitrar
Частый гость
 
Регистрация: 25.05.2007
Сообщений: 37
Сказал спасибо: 1
Сказали Спасибо 7 раз(а) в 5 сообщении(ях)
Mitrar на пути к лучшему
По умолчанию

спасибо за ответ uk8amk, а ларчик просто открывался Halex07 был прав.
Mitrar вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как использовать функцию printf для выовода на второй USART igla_85 Микроконтроллеры, АЦП, память и т.д 1 01.06.2009 02:35
Функция загрузчик (MK ATMEGA644) Gn0me Микроконтроллеры, АЦП, память и т.д 0 27.03.2009 16:59
CVAVR while и таймер kr11507 Микроконтроллеры, АЦП, память и т.д 10 13.12.2008 21:29
GCC AVR не работает printf("Hello word") Kabron Proteus, KiCAD и другие ECAD 8 03.03.2007 14:33
atmega128 -->sg12864; IAR -->printf()??? D1ma Микроконтроллеры, АЦП, память и т.д 2 01.03.2007 21:00


Часовой пояс GMT +4, время: 10:14.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot