Jak dostosować funkcję printf w AVR-GCC do zapisu danych w zewnętrznej pamięci?

[AVR-GCC] jak korzystać z printf





Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: [AVR-GCC] jak korzystać z printf
Date: Sun, 6 Jun 2004 22:24:58 +0200


Witam

Wie może ktoś jak zmienić działanie funkcji printf tak aby działała tak jak
sobie ktoś zamarzy (chodzi o miejsce gdzie wysyłane są dane) bo ja chce
zapisywać je tą funkcją w zewnętrznej pamięci, a nie wysyłać na UART. Na
początku wydawało mi się to proste bo już coś takiego robiłem tyle że na
kompilatorze rainsonance w którym można nadpisywać funkcje i wystarczyło
napisać funkcje putchar w taki oto sposób:

int putchar(const int c)
{
send2mem(c); // ta funkcja wysyłała by wskazany bajt do pamięci
return (0);
}

Jednak niestety z tego co widzę w AVC-GCC nie da się nadpisywać funkcji ;(
także nie zabardzo wiem jak się do tego zabrać.




========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!newsfeed00.sul.t-online.de!newsmm00.sul.t-online.de!t-online.de!news.t-online.com!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Waldemar Krzok <waldemar.krzok_at_nospam_t-online.de>
Subject: Re: [AVR-GCC] jak =?ISO-8859-2?Q?korzysta=E6?= z printf
Date: Sun, 06 Jun 2004 22:36:12 +0200


BT wrote:

Witam

Wie może ktoś jak zmienić działanie funkcji printf tak aby działała tak
jak sobie ktoś zamarzy (chodzi o miejsce gdzie wysyłane są dane) bo ja
chce zapisywać je tą funkcją w zewnętrznej pamięci, a nie wysyłać na UART.
Na początku wydawało mi się to proste bo już coś takiego robiłem tyle że
na kompilatorze rainsonance w którym można nadpisywać funkcje i
wystarczyło napisać funkcje putchar w taki oto sposób:

int putchar(const int c)
{
send2mem(c); // ta funkcja wysyłała by wskazany bajt do pamięci
return (0);
}

Jednak niestety z tego co widzę w AVC-GCC nie da się nadpisywać funkcji ;(
także nie zabardzo wiem jak się do tego zabrać.

chyba kombinujesz jak koń pod górę. Od tego jest sprintf. Dajesz jako
pierwszy parametr adres pamięci i już masz co trzeba.

Waldek


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Mon, 7 Jun 2004 20:50:56 +0200



"Waldemar Krzok" <waldemar.krzok_at_nospam_t-online.de> wrote in message
news:c9vv77$3kj$05$1_at_nospam_news.t-online.com...
BT wrote:

Witam

Wie może ktoś jak zmienić działanie funkcji printf tak aby działała tak
jak sobie ktoś zamarzy (chodzi o miejsce gdzie wysyłane są dane) bo ja
chce zapisywać je tą funkcją w zewnętrznej pamięci, a nie wysyłać na
UART.
Na początku wydawało mi się to proste bo już coś takiego robiłem tyle że
na kompilatorze rainsonance w którym można nadpisywać funkcje i
wystarczyło napisać funkcje putchar w taki oto sposób:

int putchar(const int c)
{
send2mem(c); // ta funkcja wysyłała by wskazany bajt do pamięci
return (0);
}

Jednak niestety z tego co widzę w AVC-GCC nie da się nadpisywać funkcji
;(
także nie zabardzo wiem jak się do tego zabrać.

chyba kombinujesz jak koń pod górę. Od tego jest sprintf. Dajesz jako
pierwszy parametr adres pamięci i już masz co trzeba.

Tak masz racie ale trochę nakłamałem ;) bo tak naprawdę chodzi o zapisywanie
do wewnętrznego EEPROMU. Pozdrawiam



========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.internetia.pl!news.astercity.net!news.aster.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows_at_nospam_amwaw.edu.pl>
Subject: Re: [AVR-GCC] jak =?ISO-8859-2?Q?korzysta=E6_z_printf?=
Date: Sun, 06 Jun 2004 23:54:49 +0200


BT wrote:

Wie może ktoś jak zmienić działanie funkcji printf tak aby działała tak jak
sobie ktoś zamarzy (chodzi o miejsce gdzie wysyłane są dane) bo ja chce
zapisywać je tą funkcją w zewnętrznej pamięci, a nie wysyłać na UART

Aby stosować printf w avr-gcc, musisz najpierw wywołać funkcję fdevopen,
której podajesz m.in. adres funkcji wypisującej jeden znak (poczytaj
helpa do avr libc). Stąd już krótka droga do robienia z tym znakiem, co
tylko ci się zamarzy, np. wysłania go w kosmos drogą radiową. ;) Albo
zapisania w zewnętrznej pamięci.

Ale to chyba nie jest najlepszy pomysł na programowanie np. zewn. Flasha
albo karty MMC - printf przekaże do twojej funkcji każdy znak
oddzielnie, a najczęściej znacznie lepiej jest zapisywać pamięć od razu
całymi blokami.

--
Adam Dybkowski
adybkows_at_nospam_amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Mon, 7 Jun 2004 20:47:39 +0200



Aby stosować printf w avr-gcc, musisz najpierw wywołać funkcję fdevopen,
której podajesz m.in. adres funkcji wypisującej jeden znak (poczytaj
helpa do avr libc). Stąd już krótka droga do robienia z tym znakiem, co
tylko ci się zamarzy, np. wysłania go w kosmos drogą radiową. ;) Albo
zapisania w zewnętrznej pamięci.

Dzięki obczaiłem o co chodzi poprostu zrobili to na wskaźniku do funkcji.
Inna sprawa to to że jest to nikompatybilme z językiem ANSI C no ale ważne
że da się zrobić to co trzeba. Szkoda tylko że w AVR-GCC nie pomyśleli o
nadpisywaniu funkcji bo jest to często bardzo przydatne.

Ale to chyba nie jest najlepszy pomysł na programowanie np. zewn. Flasha
albo karty MMC - printf przekaże do twojej funkcji każdy znak
oddzielnie, a najczęściej znacznie lepiej jest zapisywać pamięć od razu
całymi blokami.

Tak masz racje ale to był tylko taki przykład tak naprawdę jest mi to
potrzebne to zapisania wewnętrznego EEPROMu w Atmega8 poporstu wymyśliłem
sobie że nie będę stosował wyświetlacza w swojej aplikacji, a dane o
działaniu programu będę sobie zapisywał w EEPROMie a później sczytywał
programatorem aby je przeanalizować i obejrzeć na monitorze komputera. Także
wysoka wydajność nie jest mi potrzebna. A w całym układzie nie musze robić
wejścia na wyświetlacz którego i tak w przyszłości aplikacja nie
potrzebowała by do prawidłowego działania.

Adam Dybkowski
adybkows_at_nospam_amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Mon, 07 Jun 2004 23:07:40 +0200


On Mon, 7 Jun 2004 20:47:39 +0200, BT wrote:
Aby stosować printf w avr-gcc, musisz najpierw wywołać funkcję fdevopen,
której podajesz m.in. adres funkcji wypisującej jeden znak (poczytaj
helpa do avr libc). Stąd już krótka droga do robienia z tym znakiem, co
tylko ci się zamarzy, np. wysłania go w kosmos drogą radiową. ;) Albo
zapisania w zewnętrznej pamięci.

Dzięki obczaiłem o co chodzi poprostu zrobili to na wskaźniku do funkcji.
Inna sprawa to to że jest to nikompatybilme z językiem ANSI C

Mozna spytac o standard jaki wymaga ansi C ?

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Tue, 8 Jun 2004 16:51:27 +0200



"J.F." <jfox_nospam_at_nospam_poczta.onet.pl> wrote in message
news:92l9c09nbshb4hgt3fv5nihj8chc4n8c9o_at_nospam_4ax.com...
On Mon, 7 Jun 2004 20:47:39 +0200, BT wrote:
Aby stosować printf w avr-gcc, musisz najpierw wywołać funkcję
fdevopen,
której podajesz m.in. adres funkcji wypisującej jeden znak (poczytaj
helpa do avr libc). Stąd już krótka droga do robienia z tym znakiem, co
tylko ci się zamarzy, np. wysłania go w kosmos drogą radiową. ;) Albo
zapisania w zewnętrznej pamięci.

Dzięki obczaiłem o co chodzi poprostu zrobili to na wskaźniku do funkcji.
Inna sprawa to to że jest to nikompatybilme z językiem ANSI C

Mozna spytac o standard jaki wymaga ansi C ?

J

Trochę nie rozumie twojego pytania, w każdym razie chodzi mi o to, że w ANSI
C nie ma w ogóle funkcji fdevopen ;) i lepiej chyba było by zrobić AVR-GCC
tak aby było w nim wszystko zrobione tak samo jak w ANSI C (wiadomo nie
wszystko się da przenieść na uC),ale zamiast robić jakieś dziwolągi w stylu
fdevopen, mogli by rozwiązać ten problem tak jak w innych kompilatorach.
Zresztą z tego co przeczytałem to twórcy AVR-GCC mają zamiar to zrobić.



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!fu-berlin.de!uni-berlin.de!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Waldemar Krzok <waldemar.krzok_at_nospam_ukbf.fu-berlin.de>
Subject: Re: [AVR-GCC] jak =?ISO-8859-2?Q?korzysta=E6_z_printf?=
Date: Tue, 08 Jun 2004 17:38:39 +0200



której podajesz m.in. adres funkcji wypisującej jeden znak (poczytaj
helpa do avr libc). Stąd już krótka droga do robienia z tym znakiem, co
tylko ci się zamarzy, np. wysłania go w kosmos drogą radiową. ;) Albo
zapisania w zewnętrznej pamięci.

Dzięki obczaiłem o co chodzi poprostu zrobili to na wskaźniku do funkcji.
Inna sprawa to to że jest to nikompatybilme z językiem ANSI C

Mozna spytac o standard jaki wymaga ansi C ?

J


Trochę nie rozumie twojego pytania, w każdym razie chodzi mi o to, że w ANSI
C nie ma w ogóle funkcji fdevopen ;) i lepiej chyba było by zrobić AVR-GCC
tak aby było w nim wszystko zrobione tak samo jak w ANSI C (wiadomo nie
wszystko się da przenieść na uC),ale zamiast robić jakieś dziwolągi w stylu
fdevopen, mogli by rozwiązać ten problem tak jak w innych kompilatorach.
Zresztą z tego co przeczytałem to twórcy AVR-GCC mają zamiar to zrobić.

w ANSI-C nie ma też printf. Wogóle funkcje nie są standaryzowane ANSI.
Ale w każdym kompilatorze jest printf ;-)

Waldek



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: [AVR-GCC] jak =?ISO-8859-2?Q?korzysta=E6_z_printf?=
Date: Tue, 08 Jun 2004 22:35:52 +0200


Waldemar Krzok wrote:
w ANSI-C nie ma też printf. Wogóle funkcje nie są standaryzowane ANSI.
Ale w każdym kompilatorze jest printf ;-)

dziwne. JanB pisał o tej funkcji w książce ,,Język C. Interpretacja
standardu'' już w latach 80-tych. nawet na okładce jest przykład.

http://www.infosys.utas.edu.au/info/documentation/C/CStdLib.html#fprintf

w.


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!fu-berlin.de!uni-berlin.de!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Waldemar Krzok <waldemar.krzok_at_nospam_ukbf.fu-berlin.de>
Subject: Re: [AVR-GCC] jak =?ISO-8859-2?Q?korzysta=E6_z_printf?=
Date: Wed, 09 Jun 2004 10:08:04 +0200




Wojtek Kaniewski:
Waldemar Krzok wrote:

w ANSI-C nie ma też printf. Wogóle funkcje nie są standaryzowane ANSI.
Ale w każdym kompilatorze jest printf ;-)


dziwne. JanB pisał o tej funkcji w książce ,,Język C. Interpretacja
standardu'' już w latach 80-tych. nawet na okładce jest przykład.

http://www.infosys.utas.edu.au/info/documentation/C/CStdLib.html#fprintf

trochę się krzywo wyraziłem: nie jest w definicji języka, czyli w tzw
raporcie, jest jednak w opisie języka jako jedna z funkcji, które język
powinien mieć. Pracowałem jednak kiedyś z kompilatorem (na szczęście nie
długo), który tej funkcji nie miał (Intel na 8096, chyba)

Waldek


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.nask.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: [AVR-GCC] jak =?ISO-8859-2?Q?korzysta=E6_z_printf?=
Date: Tue, 08 Jun 2004 22:47:01 +0200


BT wrote:
Trochę nie rozumie twojego pytania, w każdym razie chodzi mi o to, że w ANSI
C nie ma w ogóle funkcji fdevopen ;) i lepiej chyba było by zrobić AVR-GCC
tak aby było w nim wszystko zrobione tak samo jak w ANSI C (wiadomo nie
wszystko się da przenieść na uC),ale zamiast robić jakieś dziwolągi w stylu
fdevopen, mogli by rozwiązać ten problem tak jak w innych kompilatorach.

potem robić protezy, jeśli chciałoby się używać funkcji stdio dla UARTa,
wyświetlacza? przyznaję, że nie wiem jak to wygląda w innych
kompilatorach, ale możliwość wyboru w avr-libc jest całkiem miłym ficzerem.

w.


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Wed, 09 Jun 2004 01:12:08 +0200


On Tue, 8 Jun 2004 16:51:27 +0200, BT wrote:
"J.F." <jfox_nospam_at_nospam_poczta.onet.pl> wrote in message
Dzięki obczaiłem o co chodzi poprostu zrobili to na wskaźniku do funkcji.
Inna sprawa to to że jest to nikompatybilme z językiem ANSI C

Mozna spytac o standard jaki wymaga ansi C ?

Trochę nie rozumie twojego pytania, w każdym razie chodzi mi o to, że w ANSI
C nie ma w ogóle funkcji fdevopen ;)

IMHO to w standardzie ANSI w ogole nie ma zadnych funkcji
zdefiniowanych, ale moze sie myle. No - stringi formatujace do printf
to byc moze standard obejmuje :-)

A biblioteke to raczej standaryzuje POSIX.

i lepiej chyba było by zrobić AVR-GCC
tak aby było w nim wszystko zrobione tak samo jak w ANSI C (wiadomo nie

Tzn jak ? fopen ?

wszystko się da przenieść na uC),ale zamiast robić jakieś dziwolągi w stylu
fdevopen, mogli by rozwiązać ten problem tak jak w innych kompilatorach.

Drobny niuans - nie przypominam sobie zadnej funkcji w typowych C
[juz nawet nie wymagam zeby to bylo opisane w standardzie], ktora
umozliwialaby wstawienie wlasnej funkcji "drukujacej". Czyli
co byc nie wymyslil, to bedzie niekompatybilne :-)

Mozesz natomiast poslugiwac sie sprintf .. ale na maluchach
zdecydowanie odradzam - bufor w pamieci za duzo jej zuzywa :-)

Mozna tez przeprosic sie z funkcjami itoa, ftoa, ltoa ..

J.


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Thu, 10 Jun 2004 11:10:37 +0200



Dzięki obczaiłem o co chodzi poprostu zrobili to na wskaźniku do
funkcji.
Inna sprawa to to że jest to nikompatybilme z językiem ANSI C

Mozna spytac o standard jaki wymaga ansi C ?

Trochę nie rozumie twojego pytania, w każdym razie chodzi mi o to, że w
ANSI
C nie ma w ogóle funkcji fdevopen ;)

IMHO to w standardzie ANSI w ogole nie ma zadnych funkcji
zdefiniowanych, ale moze sie myle. No - stringi formatujace do printf
to byc moze standard obejmuje :-)

A biblioteke to raczej standaryzuje POSIX.

i lepiej chyba było by zrobić AVR-GCC
tak aby było w nim wszystko zrobione tak samo jak w ANSI C (wiadomo nie

Tzn jak ? fopen ?

Chodzi mi o nadpisywanie.

wszystko się da przenieść na uC),ale zamiast robić jakieś dziwolągi w
stylu
fdevopen, mogli by rozwiązać ten problem tak jak w innych kompilatorach.

Drobny niuans - nie przypominam sobie zadnej funkcji w typowych C
[juz nawet nie wymagam zeby to bylo opisane w standardzie], ktora
umozliwialaby wstawienie wlasnej funkcji "drukujacej". Czyli
co byc nie wymyslil, to bedzie niekompatybilne :-)

No ale wystarczyło by zrobić możliwość nadpisywania funkcji putchar i już po
nadpisaniu tej funkcji miałbyś możliwość wysyłania danych gdzie tylko chcesz
(tak jest właśnie w innych kompilatorach). Nie jestem pewien czy takie
rozwiązanie jest kompatybilne z C (bo na codzień używam C++) i szczerze
powiedziawszy nie pamiętam czy w zwykłym C jest coś takiego jak mechanizm
nadpisywania, ale w C++ oczywiście jest, a ani w C ani w C++ nie ma funkcji
fdevopen czyli z tego wynika że jest to dziwoląg wymyślony przez autorów
AVR-GCC a nadpisywanie było by bardziej zgodne.

Mozesz natomiast poslugiwac sie sprintf .. ale na maluchach
zdecydowanie odradzam - bufor w pamieci za duzo jej zuzywa :-)

Mozna tez przeprosic sie z funkcjami itoa, ftoa, ltoa ..

Narazie się martwie tym że po dadaniu math.h ;) mój program zajmuje już 4k
;-) a jak narazie to właściwie nie robi nic poza odbieraniem sygnałów DTMF i
dzwonieniem pod dany nymer. A z printf i tak ostatecznie zrezygnowałem bo ta
funkcja nie działa prawidłowo (czyli tak samo jak w języku C) wszystko jest
dobrze jeśli wpisuje się do niej stringi ale jak zacznie się podawać
parametry np. typu double itp. to zamiast zapisać ten prametr to wiesza cały
uC ;-) Także tak jak napisałeś ostatecznie przeprosiłem się z funkcjami
itoa, ftoa, ltoa ;-) i zrobiłem sobie własną funkcje która zapisuje to co
trzeba w pamięci.



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Thu, 10 Jun 2004 17:58:22 +0200


On Thu, 10 Jun 2004 11:10:37 +0200, BT wrote:
i lepiej chyba było by zrobić AVR-GCC
tak aby było w nim wszystko zrobione tak samo jak w ANSI C (wiadomo nie

Tzn jak ? fopen ?

Chodzi mi o nadpisywanie.

Nadpisywanie IMHO nigdy nie bylo zestandaryzowane w ANSI. I chyba
nigdy nie bylo wymogu zeby printf poslugiwal sie wewnetrznie putch.

A napisywanie to kwestia linkera i bibliotek - jesli zdefiniujesz
wlasna funkcje putch, to nie bedzie przeszukiwana biblioteka.
Ale dla printf zostanie sciagniety caly modul z biblioteki -
i kto wie czy nie zawiera takze putch, a wtedy linker zglosi
konflikt.

No ale wystarczyło by zrobić możliwość nadpisywania funkcji putchar i już po
nadpisaniu tej funkcji miałbyś możliwość wysyłania danych gdzie tylko chcesz
(tak jest właśnie w innych kompilatorach). Nie jestem pewien czy takie
rozwiązanie jest kompatybilne z C

I ja tylko w kwestii tej kompatybilnosci. Ale to ty zaczales
"jak w ANSI C", a nie "jak w Keilu" :-)

Mozesz natomiast poslugiwac sie sprintf .. ale na maluchach
zdecydowanie odradzam - bufor w pamieci za duzo jej zuzywa :-)
Mozna tez przeprosic sie z funkcjami itoa, ftoa, ltoa ..

Narazie się martwie tym że po dadaniu math.h ;) mój program zajmuje już 4k

No wiesz - jak sie chce uzywac printf ... to jest funkcja-kombajn,
robi wszystko i duza jest :-)

a jak narazie to właściwie nie robi nic poza odbieraniem sygnałów DTMF i
dzwonieniem pod dany nymer.

Samodzielnie wylawiasz DTMF z sygnalu ?
To sie zastanow nad programem, ale imho - na zmiennym przecinku bedzie
za wolne, na stalym .. nie potrzebne ci zadne bilbioteki.

A z printf i tak ostatecznie zrezygnowałem bo ta
funkcja nie działa prawidłowo (czyli tak samo jak w języku C) wszystko jest
dobrze jeśli wpisuje się do niej stringi ale jak zacznie się podawać
parametry np. typu double itp. to zamiast zapisać ten prametr to wiesza cały
uC ;-)

Nie bardzo rozumiem - chyba za latwo sie poddajesz, jakie C jest takie
jest, ale co ma to ma dzialac ..
na uC warto sie doczytac - z reguly sa dwie wersje printf - z obsluga
zmiennego przecinka i bez. Pierwsza dwa razy dluzsza :-)

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!feed.news.interia.pl!news.cyf-kr.edu.pl!news.nask.pl!news-stoc.telia.net!news-stoa.telia.net!telia.net!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Thu, 10 Jun 2004 19:31:32 +0200



Chodzi mi o nadpisywanie.

Nadpisywanie IMHO nigdy nie bylo zestandaryzowane w ANSI. I chyba
nigdy nie bylo wymogu zeby printf poslugiwal sie wewnetrznie putch.

A napisywanie to kwestia linkera i bibliotek - jesli zdefiniujesz
wlasna funkcje putch, to nie bedzie przeszukiwana biblioteka.
Ale dla printf zostanie sciagniety caly modul z biblioteki -
i kto wie czy nie zawiera takze putch, a wtedy linker zglosi
konflikt.

No właśnie zgłasza ;). No tak w AVR-GCC nie ma mechanizmu który by się o to
zatroszczył. A może jednak jest ale też w formie jakiegoś dziwoląga ;-) ?
coś w stylu że trzeba ręcznie wyrzucić z biblioteki oryginalne putchar i
wstawić tam swoje ;) tylko nie zabardzo się da bo biblioteki są
pokompilowane.

No ale wystarczyło by zrobić możliwość nadpisywania funkcji putchar i już
po
nadpisaniu tej funkcji miałbyś możliwość wysyłania danych gdzie tylko
chcesz
(tak jest właśnie w innych kompilatorach). Nie jestem pewien czy takie
rozwiązanie jest kompatybilne z C

I ja tylko w kwestii tej kompatybilnosci. Ale to ty zaczales
"jak w ANSI C", a nie "jak w Keilu" :-)

No ja rozumiem dziękuje wszystkim za pomoc i za podanie rozwiązania w
postaci fdevopen ;-).

Mozesz natomiast poslugiwac sie sprintf .. ale na maluchach
zdecydowanie odradzam - bufor w pamieci za duzo jej zuzywa :-)
Mozna tez przeprosic sie z funkcjami itoa, ftoa, ltoa ..

Narazie się martwie tym że po dadaniu math.h ;) mój program zajmuje już
4k

No wiesz - jak sie chce uzywac printf ... to jest funkcja-kombajn,
robi wszystko i duza jest :-)

No wiem wiem jeszcze za czasów C dość często jej używałem, teraz jak się
bawię C w uC zrezygnowałem z niej bo jednak pamięć się kurczy 8Kb to nie
dużo, a funkcjonalność też nie taka jak w C.

a jak narazie to właściwie nie robi nic poza odbieraniem sygnałów DTMF i
dzwonieniem pod dany nymer.

Samodzielnie wylawiasz DTMF z sygnalu ?
To sie zastanow nad programem, ale imho - na zmiennym przecinku bedzie
za wolne, na stalym .. nie potrzebne ci zadne bilbioteki.

Tak wyławiam DTMF z sygnału. Nie wiem czy dobrze rozumie co do mnie piszesz
;) ale mam wrażenie że chcesz mi powiedzieć że obiczenia zmiennoprzecinkowe
zajmują dużo więcej czasu niż na liczbach całkowitych. Ja do wyławiania DTMF
używam algorytmu goertzla (zresztą podpowiedziano mi go na tej grupie ;). I
mniej więcej jestem zadowolony na Atmega8 z 16Mhz uzyskuje próbkowanie tak
no oko to jakieś 100ms (przy przeszukiwaniu 7 częstotliwości), najwięcej w
tym algorytmie czasu zajmują funkcje sin i cos. Narazie algorytm mi działa
ale nie sprawdziłem go jeszcze w praktyce bo mam kłopoty z przetwornikiem AC
;-) coś nie mogę go prawidłowo uruchomić w AVR-GCC. Także nie potrafie
powiedzieć czy przy próbkowaniu 100ms będzie mi to prawidłowo wyłapywać
sygnały DTMF, jak się okaże że 100ms to za dużo to zacznę jakoś
optymalizować ten algorytm np. tak jak sugerujesz wywalę obliczenia
zmiennoprzecinkowe i zatąpie je jakoś całkowitymi. Oraz zamiast używać
funkcji sin zapisze sobie sinusa w jakiejś tablicy i pewnie wtedy uda się
zejść może nawet do 10ms. Tylko narazie musze uruchomić ten przeklęty
przetwornik ;-)

A z printf i tak ostatecznie zrezygnowałem bo ta
funkcja nie działa prawidłowo (czyli tak samo jak w języku C) wszystko
jest
dobrze jeśli wpisuje się do niej stringi ale jak zacznie się podawać
parametry np. typu double itp. to zamiast zapisać ten prametr to wiesza
cały
uC ;-)

Nie bardzo rozumiem - chyba za latwo sie poddajesz, jakie C jest takie
jest, ale co ma to ma dzialac ..
na uC warto sie doczytac - z reguly sa dwie wersje printf - z obsluga
zmiennego przecinka i bez. Pierwsza dwa razy dluzsza :-)

No pewnie masz racje i jakoś to printf działa pewnie także z double.Ale
pewnie jak jeden parametr jest double a drugi int to już się rozłoży ;-).
Dokumentacja do AVR-GCC jest raczej na niskim poziomie i raczej nie chce się
za bardzo w niej zagłębiać ;) Jest tam za dużo opisu a za mało przykładów
;( kto by miał czas na czytanie tego wszystkiego, a i tak poza skromnym
opisem funkcji to nic tam nie ma.



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Thu, 10 Jun 2004 20:33:48 +0200


On Thu, 10 Jun 2004 19:31:32 +0200, BT wrote:
Samodzielnie wylawiasz DTMF z sygnalu ?
To sie zastanow nad programem, ale imho - na zmiennym przecinku bedzie
za wolne, na stalym .. nie potrzebne ci zadne bilbioteki.

Tak wyławiam DTMF z sygnału. Nie wiem czy dobrze rozumie co do mnie piszesz
;) ale mam wrażenie że chcesz mi powiedzieć że obiczenia zmiennoprzecinkowe
zajmują dużo więcej czasu niż na liczbach całkowitych. Ja do wyławiania DTMF
używam algorytmu goertzla (zresztą podpowiedziano mi go na tej grupie ;). I
mniej więcej jestem zadowolony na Atmega8 z 16Mhz uzyskuje próbkowanie tak
no oko to jakieś 100ms (przy przeszukiwaniu 7 częstotliwości), najwięcej w
tym algorytmie czasu zajmują funkcje sin i cos.

I o tym wlasnie pisze :-)

wspolczynnikow, ktore obliczyc sobie mozesz na kalkulatorze i wpisac
w program. I juz sie rozmiar progamu zmniejsza.

1633Hz]. Doradzam wieksza czestotliwosc. Wiec masz gora 200us na
obrobke probki. To ci chyba troche czasu zabraknie :-)

liczbach calkowitych [bedzie troche zabawy, bo 16 bit moze byc
za malo] - na oko ten procek ma szanse sie zmiescic, ale byc moze
trzeba sie bedzie z assemblerkiem przeprosic.

No pewnie masz racje i jakoś to printf działa pewnie także z double.Ale
pewnie jak jeden parametr jest double a drugi int to już się rozłoży ;-).
Dokumentacja do AVR-GCC jest raczej na niskim poziomie i raczej nie chce się
za bardzo w niej zagłębiać ;)

Trzeba zajrzec do zrodla ... avr/include/stdio.h:

" Since the full implementation of all the mentioned features becomes
fairly large, three different flavours of vfprintf() can be
selected using linker options. [...]

If the full functionality including the floating point conversions
is required, the following options should be used:
\code
-Wl,-u,vfprintf -lprintf_flt -lm
\endcode

"

J.


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "BT" <kurciok_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Thu, 10 Jun 2004 21:09:14 +0200


I o tym wlasnie pisze :-)

To dobrze bo nie wiedziałem czy odpowiadam na odpowiednie pytanie ;)

- algorytm goertzla nie wymaga zadnych sin i cos. Wymaga kilku stalych
wspolczynnikow, ktore obliczyc sobie mozesz na kalkulatorze i wpisac
w program. I juz sie rozmiar progamu zmniejsza.

Ahmm no wiesz przyjrzałem się teraz trochę i rzeczywiście ;-) przy 7
szukanych niezmieniających się częstotliwościach można się pokusić o
obliczenie tego i owego i wklepaniu do programu tego co trzeba (dzięki to
cenna uwaga). Także po tej operacji pewnie spokojnie zmieszcze się w 10ms.

- 100ms .. ale ty masz probkowac co najmniej 3.5kHz [najwiekszy sygnal
1633Hz]. Doradzam wieksza czestotliwosc. Wiec masz gora 200us na
obrobke probki. To ci chyba troche czasu zabraknie :-)

Nie zrozumiałeś całość obliczeń przy 7 częstotliwościach zajmuje 100ms. Cały
algorytm oczywiście jako dane wyjściowe pobiera sygnał pochodzący z
próbkowania 8khz. A później dokonuje na nich obliczeń które zajmują około
100ms. A napisałem że próbkowanie jest co 100ms bo miałem na myśli to że
mogę badać jaki kod DTMF jest na linii właśnie co 100ms. I teraz nie wiem
czy to wystarczy bo jeśli sygnał DTMF jednego przycisku będzie krótszy niż
100ms to może go nie wyłapać. Ale widzę że uda się ten czas skrócić
chociażby przez wyrzucenie tych sinusów. Także wszystko będzie hulało. O ile
uruchomie przetwornik ;-) bo już się męczę z nim cały dzień i nic nie
wymyśliłem. Jeśli możesz to zerknij też proszę na mój post "[AVR-GCC]
przetwornik AC" z dnia 24-06-10

- obliczenia proste i zakres w miare znany - mozesz to zrobic na
liczbach calkowitych [bedzie troche zabawy, bo 16 bit moze byc
za malo] - na oko ten procek ma szanse sie zmiescic, ale byc moze
trzeba sie bedzie z assemblerkiem przeprosic.

No w sumie to ja już przerobiłem to prawie że na wersje liczb całkowitych
mnożenie zmiennoprzecinkowe mam tylko przy sin bo z tej funkcji wychodzi mi
ułamek który reprezentuje radiany, ale jak widze i to łatwo uda się ominąć.

No pewnie masz racje i jakoś to printf działa pewnie także z double.Ale
pewnie jak jeden parametr jest double a drugi int to już się rozłoży ;-).
Dokumentacja do AVR-GCC jest raczej na niskim poziomie i raczej nie chce
się
za bardzo w niej zagłębiać ;)

Trzeba zajrzec do zrodla ... avr/include/stdio.h:

" Since the full implementation of all the mentioned features becomes
fairly large, three different flavours of vfprintf() can be
selected using linker options. [...]

If the full functionality including the floating point conversions
is required, the following options should be used:
\code
-Wl,-u,vfprintf -lprintf_flt -lm
\endcode

UUUuuuuuuuuuu takie buty ;-) dzięki też się przyda.



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: [AVR-GCC] jak korzystać z printf
Date: Fri, 11 Jun 2004 02:41:43 +0200


On Thu, 10 Jun 2004 21:09:14 +0200, BT wrote:
- 100ms .. ale ty masz probkowac co najmniej 3.5kHz

Nie zrozumiałeś całość obliczeń przy 7 częstotliwościach zajmuje 100ms. Cały
algorytm oczywiście jako dane wyjściowe pobiera sygnał pochodzący z
próbkowania 8khz. A później dokonuje na nich obliczeń które zajmują około
100ms. A napisałem że próbkowanie jest co 100ms bo miałem na myśli to że
mogę badać jaki kod DTMF jest na linii właśnie co 100ms. I teraz nie wiem
czy to wystarczy bo jeśli sygnał DTMF jednego przycisku będzie krótszy niż
100ms to może go nie wyłapać.

potrzebujesz rozdzielczosc ok 70Hz, co wymaga jakis 15ms, no w
szczegolnych przypadkach 7. Jesli to ma odrozniac halasy inne,
nastepny odstepy sa inne - to sugeruje dluzszy czas - 30, moze nawet
50ms. Przez ten czas musisz zbierac probki - rozmawiamy
o ok 120 - 400 probkach [pamiec!].

Ile probek ci obrabia w 100ms ? Bo nie bardzo wierze w ta setke
probek. Z sin i cos to raczej jedna probke :-)

No w sumie to ja już przerobiłem to prawie że na wersje liczb całkowitych
mnożenie zmiennoprzecinkowe mam tylko przy sin bo z tej funkcji wychodzi mi
ułamek który reprezentuje radiany, ale jak widze i to łatwo uda się ominąć.

Uwazaj, bo ten ulamek musi byc dosc dokladny.

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!opal.futuro.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: JS <jar0sz_at_nospam_polbox.com.pl_without_pl>
Subject: Re: [AVR-GCC] jak =?iso-8859-2?Q?korzysta=E6?= z printf
Date: Thu, 10 Jun 2004 21:42:22 +0000 (UTC)


W artykule <ca98gd$ovi$1_at_nospam_atlantis.news.tpi.pl>
autorem którego mieni się BT, napisano:

[...]
No ale wystarczyło by zrobić możliwość nadpisywania funkcji putchar i już po
nadpisaniu tej funkcji miałbyś możliwość wysyłania danych gdzie tylko chcesz

To działa, ale powinieneś dostarczyć definicję funkcji fputc
(a nie putchar), bo printf właśnie w ten sposób wyprowadza znaki.

Przeglądałem wersję opisu standardu C (draft) - powiedziane jest tam,
że printf pisze do stdout, ale nie ma nic na temat sposobu, w jaki to
robi (przynajmniej nie rzuciło mi się to w oczy).

--
Pozdrawiam
Jarosław Szynal

========
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mai