реклама на сайте
подробности

 
 
> Вывод с помощью fprintf в WinAVR, Помогите с форматированным выводом
smk
сообщение Jul 1 2011, 16:20
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Мне нужно выводить строчку в виде "F = 0.0000 Hz". При этом число дожно иметь три вида в зависимости от значения частоты: 1) 0.0000; 2) 00.000; 3) 000.00 . Как правильно это сделать используя библиотечные функции форматированного вывода? Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
skripach
сообщение Jul 3 2011, 14:08
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



printf("F = %06f Hz\n", value); Не?


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 4 2011, 05:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(skripach @ Jul 3 2011, 17:08) *
printf("F = %06f Hz\n", value); Не?
Не.



Цитата(Dnepr33 @ Jul 3 2011, 21:46) *
не уверен за WinAVR - но по крайней мере в стандарте С можно извернуться так
1. использовать sprintf - пишем в память
2. из памяти выводим любым удобным способом - даже посимвольно, как из массива.
Ну где-то так оно и делается. fprintf не догма. можно и другую функцию, лишь бы выводить удобно было.


Цитата(sergeeff @ Jul 3 2011, 21:37) *
А в printf включена поддержка float?
А как узнать? Как я понял там аргумент double.


Цитата(ReAl @ Jul 3 2011, 20:06) *
Точно, не получается :-(
Таки не всё поддерживает, а жаль.
Ну тогда так
Код
    fprintf_P(fconsole
        , value < 10 ? PSTR("F = %6.4f Hz\n") : value < 100 ? PSTR("F = %6.3f Hz\n") : PSTR("F = %6.2f Hz\n")
        , value);
Так как миленькое работает, просто гробовато выглядит.

Значение не отображает. Знак вопроса выводит. Текст выводит правильно.

Вот собственно тестовый код, куда и надо вставить строчку с выводом:
Код
#define F_CPU 8000000UL // 16.0 MHz
#include <util/delay.h>
#include "defines.h"
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <avr/pgmspace.h>
#include "lcd.h"

volatile unsigned char q;
volatile unsigned int f=0xF;
volatile double frq;
double fp = 1;
FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);

ISR(TIMER0_OVF_vect)
{
++q;
if(q==1)
    {
    PORTA ^= (1<<7);
    q=0;
    }
}

int main(void)
{
DDRA  = 0b10000000;
PORTB = 0b00000000;
DDRB  = 0b10111111;
TCCR0A = 0b10000000;
TCCR0B = 0b00000110;
TIMSK  = 0b00000010;

frq=123;

lcd_init();
stderr = &lcd_str;


fprintf_P(stderr, PSTR("F = %6.4f Hz\n"), frq);

/*value < 10 ? PSTR("F = %6.4f Hz\n") : value < 100 ? PSTR("F = %6.3f Hz\n") : PSTR("F = %6.2f Hz\n")*/

asm("sei");

    while(1)
        {
        
        asm("nop");
        }

return 0;
}


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- smk   Вывод с помощью fprintf в WinAVR   Jul 1 2011, 16:20
- - ReAl   В стандартном С это делаетcя так (ширина поля и то...   Jul 1 2011, 19:52
- - smk   Не получается. Нужно как-то иначе. Или прийдется п...   Jul 3 2011, 12:32
|- - ReAl   Цитата(smk @ Jul 3 2011, 15:32) Не получа...   Jul 3 2011, 17:06
|- - demiurg_spb   Цитата(ReAl @ Jul 3 2011, 21:06) Точно, н...   Jul 4 2011, 09:49
|- - ReAl   Цитата(demiurg_spb @ Jul 4 2011, 12:49) Т...   Jul 4 2011, 23:15
|- - smk   Цитата(ReAl @ Jul 5 2011, 02:15) Конечно ...   Jul 5 2011, 06:31
|- - demiurg_spb   КодFILE myout = FDEV_SETUP_STREAM(lcd_putchar,...   Jul 5 2011, 06:52
|- - smk   Цитата(demiurg_spb @ Jul 5 2011, 09:52) К...   Jul 5 2011, 07:13
|- - demiurg_spb   Цитата(smk @ Jul 5 2011, 11:13) как-то ну...   Jul 5 2011, 07:20
|- - ARV   Цитата(smk @ Jul 4 2011, 08:23) Значение ...   Jul 4 2011, 06:20
|- - smk   Цитата(ARV @ Jul 4 2011, 09:20) не включе...   Jul 4 2011, 07:34
- - sergeeff   А в printf включена поддержка float?   Jul 3 2011, 18:37
- - Dnepr33   Цитата(smk @ Jul 1 2011, 19:20) Мне нужно...   Jul 3 2011, 18:46
- - sergeeff   Запустите примеры, которые вам коллеги советовали ...   Jul 4 2011, 08:56
|- - smk   Цитата(sergeeff @ Jul 4 2011, 11:56) Запу...   Jul 4 2011, 09:00
|- - sergeeff   Цитата(smk @ Jul 4 2011, 13:00) не работа...   Jul 4 2011, 09:03
|- - smk   Цитата(sergeeff @ Jul 4 2011, 12:03) Ну н...   Jul 4 2011, 12:01
|- - demiurg_spb   Цитата(smk @ Jul 4 2011, 16:01) Теперь пы...   Jul 4 2011, 19:07
- - smk   Чет не выходит. Наверно таки проще свою процедурку...   Jul 4 2011, 19:29
|- - demiurg_spb   Вольному - воля. PS: если аргумент prec отрицатель...   Jul 4 2011, 19:34
- - smk   я тут похоже с указателем напутал. вывод на диспле...   Jul 4 2011, 20:15


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 14:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01894 секунд с 7
ELECTRONIX ©2004-2016