sobie - w pamięci programu... Bardzo się 2 tego pytania cieszę. Jeśli jeszcze tego nie zrobiłeś popatrz na wynik symulacji. Łańcuch zajmuje cenną pamięć RAM, jednocześnie do jej inicjacji konieczna jest kopia danych w pamięci ROM.
Omawiane funkcje, tak jak większość z występujących w AVR-GCC, posiadają specjalne wersje z przyrostkiem _P. Zmodyfikuj poprzedni program zgodnie z listingiem 58. Konieczne będzie dodanie do programu nagłówka <avr\pgmspace.h>. Efekt zmiany można zaobserwować w symulacji na rysunku 42. Od strony funkcjonalnej nie powinny pojawić się widoczne zmiany.
fUŁJUUUUfeC 9TUEUU7F CALI UkUUUUL
---- c Ngcc-src^kurs\_do_c27\2\m«in
w r30: printf(
=C>fQD00006E: 92FF
Ho Source
+UJUUUU6F , +03000070 ‘<■03000071 >03000072 7 ->03000071 +03000074 >03000075 £ +03000076 ’f03000077 % +03000078 ■ »03 + 03 ..
. +0300
+0300007C
9 2 Et 92FF 92EF 931F 930F 93LF 930F 931F 930F E080
&ołarj»podp
00007B 93Jffi 00007C 9WETO0E
FUSH PUSH FUSH PUSH PUSH PUSH PUSH PUSH PUSH LDI LDI
program u
PUSH
"a(/ś2d) "5Jd\r' PUSH
Rys. 41 - przesyłanie argumentów do funkcji printf
Rys. 42 Efekt umieszczenia łańcucha formatowania w pamięci programu
Listing 57- wykorzystanie funkcji printf
int main(VOld)
{
int a - 1234; int b = 0xff;
(...)
fdevopen(rs_put, rs_get, 0);
printf( „a(*>ftd)=%d\r\n” ..a(%&0=%x\r\n” „AOf»x)e*x\r\n" „b(X*#x)«*#x\r\n" „b(%&o)-%o\r\n"»
a , a | a , b, b) \
}
36 printl_P(?ST!5( Na(X/idi "Jid^rsn"
+0000038B 92FF PUSH R15
—— Nu Suuice
92EF
92FF
92EF
S31F
S30F
933F
930F
931F
930F
PUSH
PUSH
PUSH
PUSH
PUSH
(00000382 +00000380 +0000038E +0000038F +00000390 +U0UUUJ91 +00000392 - +00000393 - <00000394
>UUUUUJ$9 540E0OFB
----c: Ngcx:-srcNkurs\_do_::z7^'iiiain . c
42 >
Listing 58 - wykorzystanie pamięci programu
dla łańcucha formatowania
printf J>(pstr(„ a 0&d>?śd\r\n" ,a(9t&x)=9&x\r\n" .,aO0£O«ftx\r\n" .,bOft#x)«K#x\r\n” .,b(%Xo)«%o\r\n").
df d| d| b| b)i
Na identycznej zasadzie możesz zmodyfikować pierwszy z programów.
Podsumowanie
Dziś poznaliśmy bardzo ważną funkcję z biblioteki standardowej C. Wykorzystaliśmy ją w jeden z najprostszych sposobów. Praktyka jest jednak taka, że w AVR-GCC, standardowe funkcje wejścia/wyjścia, działające na domyślnych strumieniach nie zostały dobrze zoptymalizowane. Musimy liczyć się z tym, że jest to jednak narzędzie darmowe i czasami daje to odczuć. Jest jednak szansa na poprawę - miałem okazję testować najnowsze biblioteki i ich działanie rzeczywiście zostało popra
wione. Jednak dopóki nie powstanie nowa wersja całego pakietu, zmiana bibliotek wymaga ręcznych modyfikacji. W najbliższym odcinku będziemy pracować na strumieniach innych niż domyślne - okazuje się, że funkcje te są lepiej optymalizowane, jeśli chodzi o rozmiar kodu. Dodatkowo daje to możliwość wykorzystania tych samych podprogramów do wysyłania danych przez RS232 czy na LCD, co sprawia, ze poznawana biblioteka staje się coraz ciekawsza.
Radosław Koppel
radosla u*, koppel@elponal.pl
Środek penetrujący i smarujący, przenikający rdzę, wypierający wodę, myjący z brudu i kurzu
Opis: CRC 5-56 - wielofunkcyjny preparat dla potrzeb seksowych, środek penetrujący i smarujący, przenikający rdzę, wypierający wodę, myjący z brudu i kurzu Składa się z oleju parafinowego, organicznych inhibitorów korozji co pozwala na utworzenie bariery chroniącej przed dostępem wody i tlenu
Własności:
■ szybko penetruje, wnikając
w najmniejsze pory, szczeliny w rozwiniętej powierzchni dobre własności smarne, wypiera wilgoć z układów elektrycznych i zapłonowych
■ luzuje zardzewiałe połączenia
■ tworzy cienką warstwę ochronną przeciwdziałająca korozji wywołanej wpływami atmosferycznymi
■ nie oddziałuje z metalami i ich stopami
■ nie oddziałuje z większością
plastików, gum, powierzchni
lakierowanych (w razie wątpliwości
- zalecany test technologiczny) opakowania aerozolowe wyposażone są w zawór 360* działania oraz cienką rurkę aplikacyjną. .
Gaz pędny - niepalny CC2
- co skutkuje 97% wykorzystaniem aktywnego preparatu
Zamówienia przyjmuje Dział Handlowy AVT, 01-939 Warszawa, ul. Burleska 9, tel. (22) 568 99 50, fax (22) 568 99 55
antłlcwv<?avt pl
46 Luty 2006 Elektronika dla Wszystkich