Presentation laddar. Vänta.

Presentation laddar. Vänta.

Lektion 4 C för enchipsdatorer: Pekare och speciell programstruktur i inbyggda system.

Liknande presentationer


En presentation över ämnet: "Lektion 4 C för enchipsdatorer: Pekare och speciell programstruktur i inbyggda system."— Presentationens avskrift:

1 Lektion 4 C för enchipsdatorer: Pekare och speciell programstruktur i inbyggda system

2 Dagens Agenda Bit-fält i struct –Definition och användning Pekare –Definition, betydelse, vektorer och pekare, pekare och funktioner Exempel med pekare och bit-fält Optimeringar av C-kod –Minne, exekveringstid Inför C Lab 2 –12F675 –Voltmeter (PIC-termometer) Summering av tidigare lektioner

3 Bit-fält i struct Ett sätt att deklarera variabler så att enskilda bitar kan läsas/sparas –Följer ANSI C standarden Kan vara ett sätt att spara minne om minsta datatypen egentligen är ”för stor” Koden kan göras mer portabel, ex. kan ej ANSI standardkonstruktioner, typ bit, m.fl. utelämnas –I detta fall refereras adresser direkt med pekare

4 struct En härledd datatyp som är tillverkad av programmeraren –Sammansatt av andra datatyper (struktur av datatyper) Som också kan vara struct, i ”botten” måste det i dock finnas någon datatyp som är standard Ordningen på elementen i minnet i en struct när den sparas bestäms av deras inbördes ordning

5 Definition av struct Nyckelordet struct introducerar en sk. postdeklaration –struct deklaration definierar en typ –Variablerna i posten kallas medlemmar –Namnet kallas för handtag Deklarationen av en struct reserverar inget minne –det är endast när variabler definieras av den aktuella struct typen som minne reserveras

6 struct deklaration struct(nyckelord) handtag(valfritt namn){ medlemmar } struct point{ int x; int y; };

7 struct variabler Variabler av typen struct definieras på samma sätt som variabler av standard-datatyper –Lagringsklasser mm. används på samma sätt Definition av variabel pt av typen struct point –struct point pt; Användning av struct medlemmar –”.” operatorn –pt.x, pt.y refererar till medlemmar av posten pt

8 Bit-fält i struct Bit-fält i struct beskriver hur olika bitar i en struct refererar till en specifik variabel –En struct med bit-fält beskriver bit för bit hur minnet är organiserat I bit-fält får endast signed eller unsigned int användas på medlemmar Siffran talar om storleken i bitar

9 Exempel bit-fält i struct struct controlBitsReg{ unsigned clp :1; unsigned ds1 :1; unsigned a1 :1; unsigned a0 :1; unsigned wr:1; }; struct inputNumbersReg{ unsigned number1 :4; unsigned number2 :4; };

10 Pekare Vad är en pekare? –En variabel som pekar på (innehåller) en adress till en variabel –Variabeln som pekas på är av en bestämd datatyp Pekare används ofta inom inbyggda system –Realtids OS, funktioner med pekarargument –Mycket användbart vid funktioner eftersom det är enda möjligheten att dela objekt mellan funktioner (förutom globala variabler och kopiering via returvärde) –Kan dock skapa obegripliga program? Vid vårdslös användning

11 Definition av pekare Pekare är en grupp av minnesceller som kan lagra en adress –I PIC, en eller två byte stor Pekare deklareras med * operatorn –int *ip; Pekare deklareras till att peka på en viss datatyp –I likhet med vanliga variabler –När en variabel definieras som pekare talar vi om att det är en adress som skall lagras I variabel istället för ett värde –Varför ska man lagra adresser? Dessa kan skickas som argument till funktioner Vet vi adressen till en variabel så kan vi modifiera data på denna inuti funktion Smidigt sätt att indexera en vektor

12 Användning av pekare Operatorn & ger adressen till ett objekt –Endast på objekt i minnet, ej uttryck eller konstanter –p=&c Operatorn * ger indirekt åtkomst –När den används på pekare får man tillgång till det objekt som pekas på

13 Pekare och struct Definition av variablerna pt och *pp av typen struct point (enligt tidigare) –struct point pt, *pp; –pp=&pt Användning av pekare till struct medlemmar –”->” operatorn –pt.x, pt.y refererar till medlemmar av posten pt –pp->x, pp->y (alt. (*pp).x, (*pp).y) refererar till samma

14 Pekare och vektorer Pekare och vektorer har mycket gemensamt –Varje operation som kan utföras med vektorindex kan också utföras med pekare –Med pekare går det vanligtvis snabbare En vektor är egentligen adressen till första elementet i vektorn –Men är inte identiskt med pekare –Jämför int a[10]; int *pa; pa är en variabel, a är en vektor referens till a[i] kan också skrivas som *(a+i)

15 Indexering med pekare Pekare kan på ett enkelt sätt användas för att indexera vektorer –char dispString1[5], dispString2[5] ; –char *toDisp1, *toDisp2; –toDisp1=&dispString1[0]; –*toDisp1=dispString1[0]; –toDisp1++;//ökar pekarens adress med 1 steg – (*toDisp1)++;//ökar det som pekas på (värdet)

16 Pekare ej identiskt med vektor Därför är följande möjligt –Tilldela vektor till pekare, pekare till pekare toDisp1=dispString1; toDisp1=toDisp2; Men inte följande –Tilldela pekare till vektor, vektor till vektor dispString1=toDisp1; dispString1=dispString2;

17 Funktioner och pekare I C skickas argument till funktioner genom att kopiera deras värde –Call by value, det finns inget direkt sätt att ändra en variabel i den anropande funktionen –Pekarargument tillåter att funktionen kan läsa och ändra variabler i den anropande funktionen –När ett vektornamn skickas till en funktion är det i själva verket adressen för det första elementet I en funktionsdefinition är följande parametrar ekvivalenta –char s[] –char *s

18 Exempel pekare och funktioner void Swap (int *p1, int *p2){ int temp =*p1; *p1=*p2; *p2=temp; } int x =4; int y = 7; Swap(&x, &y);

19 Exempel pekare och bit-fält Pekare kan användas för att referera till adresser för olika register –Enda sättet att komma åt särskilda adresser vid sk. memory-mapped I/O Nästa exempel är C lab 1 från föregående föreläsning utan pic.h inkluderad –Adresser till register refereras med pekare –Bit-fält används för att komma åt enskilda bitar i register

20

21

22 Kodoptimering Flyttalsoperationer kräver stora resurser –Kan löna sig att formulera om problemet, istället för att skaffa dyrare processor Division/multiplikation med tal som ej är multipel av 2 tar stora resurser –Omformulering till multipel av 2 kan löna sig, detta innebär endast skiftning Använd unsigned istället för signed om möjligt –Operationer kräver färre instruktioner

23 Exempel från microchipc.com Räkna ner loopar till noll istället för att räkna upp –Att kontrollera om något är noll går fortare unsigned char i; for(i=0;i<250;i++) do_func(); //executes do_func() 250 times, in 3.25ms for(i=250;i!=0;i--) do_func(); //executes do_func() 250 times, in 2.5ms

24 Inför C laboration 2 Ny PIC: 12F675 Konstruera en voltmeter –De som vill (ev. får tid över) kan försöka sig på en termometer) –Samma skiftregister och display som föregående C lab 1 –Viktigt att studera datablad Hur portar och register används Använd gärna funktioner och pekare

25 Processor PIC 12F675 –8 ben, 6 GPIO, A/D omvandlare –I boken står att 12 serien har 2 nivå stack men i datablad står 8 nivå (rätt) –Pris/st ELFA: 24,40 kr (16F84 66,30 kr) Samma grundarkitektur och instruktioner Datablad på Ping Pong

26 Repetition lektion 1 C kontra assembler Datatyper och variabler –Storlek –Användning Lagringsklasser och kvalificerare –Hur skall en specifik variabel lagras, respektive behandlas av kompilatorn? Operationer –Aritmetiska –Logiska –Bitvis logiska

27 Repetition lektion 2 –Uppvärmning Exempel och förtydliganden rörande ämnen från Lektion 1 –C preprocessor #include #define –Villkorssatser if, case, while, for –Vektorer Array, string –Kompilering och simulering av C program Inför C lab1 –Introduktion till funktioner argument, returvärde, variabler

28 Repetition lektion 3 Laboration 1 –Exempelprogram med flera filer Kompileringsprocessen (PICC) –Steg –Filer Interrupt –Funktionsdefinition Assembler i C-program –Olika metoder

29 Summering av mål Innehåll C föreläsningar –Viss del repetition –Om användning av C för inbyggda system i allmänhet –Använda C för programmering av PIC enchipsdator


Ladda ner ppt "Lektion 4 C för enchipsdatorer: Pekare och speciell programstruktur i inbyggda system."

Liknande presentationer


Google-annonser