Pekare och speciell programstruktur i inbyggda system

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

INTRODUKTION TILL PROGRAMMERING
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Funktioner och programorganisation
De fundamentala datatyperna
C-programmering ID120V William Sandqvist Länkad lista
Polymorfism.
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
William Sandqvist C:s minnesmodell.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Grundläggande programmering
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Föreläsning 4 Klasser Och Objekt.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
INTRODUKTION TILL PROGRAMMERING
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Anders Sjögren Deklarationsområde och funktioner.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
KPP053, HT2015 MATLAB, Föreläsning 4
Python.
Presentationens avskrift:

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

Dagens Agenda Bit-fält i struct Pekare Exempel med pekare och bit-fält 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

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 absolute @, bit, m.fl. utelämnas I detta fall refereras adresser direkt med pekare

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

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

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

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

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

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;

Pekare Vad är en pekare? Pekare används ofta inom inbyggda system 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

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

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å

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

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)

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)

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;

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

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);

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

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

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

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

Processor PIC 12F675 Samma grundarkitektur och instruktioner 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

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

Repetition lektion 2 Uppvärmning C preprocessor Villkorssatser 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

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

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