cz8

cz8



Programowanie

Programowanie

■.onego zakresu uwiązanie zup,


u32a;


///////////////////////////////////////////////

// inicjacja portu szeregowego

/////////////////////////////////////////////// fputs_p(psTRC„START\r\n''). ras);

u8a - 100;

u8b - 200;

u8a = (u8b * u8a) / 100;

fptintć p(fRS, pstr(„8x8 wynik: %u\r\n”),

(unsigned int)u8a);

u!Ga = 200; u!6b = 600;

ul6c = Cui6a * ul6b) / 10; fprinrt^p(ERS, pstr(„16x16 Wynik: Xu\r\n"), (unsigned int)u!6c);

ui6o - (-jint32_t)Cul6a * ul6b) / 10;

-fprintf p(fRS, p:;tk(„ (32) (16x16) wynik: %u\r\n"), (unsigned int)ui6c);

cl6c = C(uinC32 c)ul6a * (j-lr.-32_t)ul6b) / 10; iprintf p(fR5, PSTr(„(32)16x(32)16 Wynik: Xu\r\n").

(unsigned intjclfcc); ulćc = ((uint32_t)ul6a * a!6b) / 10; fprintf p(fRS, PSTSC,(32)16x16 Wynik: %u\r\n"), (unsigned int)ui6c); u32a = a 16a * ul6b;

fprintf p(fRS, PSTR(„32=16x16 wynik: aflu\r\n"), (unsigned long int)u32a);

u32a = (uint32_t)ul6a * ul6b;

fprintf P(fRS, i'STR(„32=C32) 16x16 Wynik: *lu\r\n"), (unsigned long int)u32a);

£puts_P(PSTR(„KONIEC\r\n“). fRS);


pierwsza,


Rzutowanie

Poruszyliśmy dziś trudny temat. Na zakończenie zajmiemy się czymś, co przy naszych aktualnych możliwościach powinno być proste i przyjemne. Znając już funkcją printf (oraz jej odpowiednik: fprintf), uzyskaliśmy narzędzie umożliwiające nam wykonanie eksperymentów dotyczących rzutowania. Mamy teraz całą komputerową konsolę do wyświetlania wyników ;).


i rsjget)


f •' •• '• •

Rys. 45 Wynik działania programu z listingu 70.


kopii fcheat Jile. Jest to działanie bardzo proste. Mam jednocześnie znakomitą informacją dla wszystkich chcących uniknąć konieczności stosowania takich sztuczek w przyszłości.

Problem, o którym pisaliśmy, zauważyło więcej użytkowników WlnAYR. Niecały tydzień przed oddaniem tego tekstu do składu nowa wersja jest już dostępna i problem, z którym dziś walczyliśmy, został tam rozwiązany. Rozwiązanie to jest dość podobne do zaproponowanego tutaj, tak więc zdobyta wiedza ułatwi zrozumienie wprowadzonych

Mimo wszystko opisane działanie było znakomitym pretekstem do pokazania kodów źródłowych naszego środowiska oraz głębszego zapoznania się z wewnętrzną zasadą działania strumieni.

.isring 69 If'pływ ograni. o przebieg obliczeń oraz

#incłude <avr/io.h> #inc1ude <stdio.h> #include <avr/pgmspace.

#include „rs.h"

śHnclude „harddef.h" #inc1ude „fcheat_stdio.

Lnt32 t

Rzutowanie wskaźnika powinno być prostsze do zrozumienia niż przedstawione poprzednio rzutowanie zakresu zmiennej. Pamiętać musimy, że działanie takie ma sens jedynie między wskaźnikami na obiekty które mają między sobą coś wspólnego. Spójrz na listing 70. Jest to kolejna modyfikacja ostatniego programu, która umożliwia wypróbowanie, jak działa rzutowanie wskaźników. Wskaźnik traktowany jest idowc umieszczone są w pamięci w taki składowa o nazwie a pojawia się jako a składowa o nazwie d jako ostatnia.

ABC... C Rzutowanie - konwersja zakresu wartości zmiennej oraz ABC... C Rzutowanie wskaźnika, przedstawiają obiecane od pewnego już czasu informację o tym, jak dokładniej działa rzutowa-

Strukiura odwrotna odwraca tę kolejność oraz posiada o jedno pole mniej. Spójrz na rysunek 45 wynik działania naszego programu. Zauważ, jaki efekt daje dostęp za pomocą wskaźnika typu odwrotna do obszaru pamięci zajmowanego przez strukturę nl typu normalna. Łatwo zauważyć, że do składowej zawartej w nl nic jesteśmy w stanie w ogóle dostać sic poprzez wskaźnik poi. Składowe struktury umieszczane będą w pamięci w kolejności, na jakie wskazuje kolejność ich deklarowania. Nie ma to nic wspólnego z ich nazwą.

Uwaga. Nawet gdyby obie struktury z listingu 70 były identyczne, dla kompilatora i tak są to dwa różne typy danych. Oznacza to, że przy kopiowaniu ich wskaźników niezbędne jest rzutowanie albo na typ docelowy (jak na listingu 67), albo poprzez wskaźnik typu void (jak na listingu 68).

nie i do czego służy.

Poeksperymentuj z kodami z listingów 69 oraz 70 obrazujących wykorzystanie obu typów rzutowania.

Jeśli wciąż masz wątpliwości, jak działa łańcuch formatowania

w funkcji printf, ram- _

ka Kilka dodatkowych słów o p rintf być może rozwieje Two-jc wątpliwości. Spróbuj wrócić do poprzedniej części, gdzie pojawił się dokładny opis tworzenia odpowiedniego opisu dołączanych do printfa argumentów.

Na koniec, w ostatniej już ramce, przedstawiam dodatkowe informacje o wskaźniku na typ pusty. Nazwa brzmi być może poważniej, niż sprawa naprawdę wygląda. Ramka wyjaśnia między innymi sens kodu z listingu 68.

Listing 70 Rzutowanie wskaźników.

typedef struct normalna


int m&ir, (voi d)


normalna nl;

odwrotna* no i = (cdwrotna*)4m I; /////////////////////////////// // inicjacja portu szeregowego (...)

// Koniec inicjacji /////////////////////////////// Ipurs_P(PSTR(”START\r\n”), fRS);


fprintl_p(fRS,

PSTR("odwrotna:\r\na=Xd\r\nb=*d\r\nc=%d\r\n”), (int)poi->a, (int)poi->b, (int)poi->c);

rputs_p(?siR("KONiEC\r\n”)1 fRS);


Elektronika dla Wszystkich Marzec 2006 W1


Wyszukiwarka

Podobne podstrony:
Inne bloki programuWcięcia określają zakres różnych bloków programu: #
PROGRAM SZKOLENIA Z ZAKRESU OCENY EFEKTYWNOŚCI POROZUMIEWANIA SIĘ DZIECI NIEMOWIĄCYCH Z UŻYCIEM NARZ
PROGRAM KURSU Zakres programowy kursu podany został w załączniku do niniejszej informacji. Zajęcia
cz8 Programowanie Programowanie ABC... C Zamieszanie z puts i gets W praktyce większość funkcji pos
cz8 Programowanie Znamy już przyczynę problemu. Jak go rozwiązać? W posiadanej przez nas wersji Jak
cz8 Programowanie Programowanie #def i ni i nt8_t bardziej rozbudowany typ, Zamiast tworzyć struktu
cz8 Programowanie Rys. 43 Poszukiwanie źródeł bibliotek standardowych. Wybierając odnośnik avr-libć
cz8 Programowanie niem naszego wskaźnika na wskaźnik na strukturą typu niekompletnego.
cz8 Programowanie I Listing 68 ■ fcheat_iPodsumowanie rozwiązania Możesz uznać teraz, że C jest str
cz8 Programowanie ie pobiera albo ni inny wskaźnik. Więcej nawet. O ile normalnie nie wolno, bez rz
68 Słuchanie radia (2) 68 Słuchanie radia Usuwanie ostatnich programów Założenie: zakres odbioru FM
Laboratorium sterowników programowalnych PLC 5. Zakresy pamięci i cechy S7-200 Tabela 5. zakres
2. Programy szkolenia w zakresie poszczególnych przedmiotów 2.1. Przepisy ruchu drogowego TEMAT
opiniowanie projektów planów i programów inwestycyjnych w zakresie gospodarowania wodami, opiniowani
934872?8182145534611@36897418888237672 n IV Kok, Wydział Lekarski Kok Akademicki 2014/2015 Prog

więcej podobnych podstron