Programstruktur: C för enchipsdatorer

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

INTRODUKTION TILL PROGRAMMERING
Villkor Booelska operatorer Villkorsatser Switchsatser Villkor och annat.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Introduktion till C för enchipsdatorer
Funktioner och programorganisation
Repetition inför provet
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Välkommen Vahid Mosavat
Programmeringsteknik 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 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Java. Kortfattat om Java Syntaxen påminner i hög grad om C++ Stöd för objektorientering Kod kan köras i en virtuell maskin som finns tillgänglig för nästan.
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
Programmering i C# 2. Inledande detaljer.
Programmering B PHP Lektion 2
INTRODUKTION TILL PROGRAMMERING
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Repetition inför slutprovet
Programmeringsbegrepp
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
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 3
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.
Funktioner, styrstrukturer, manipulering av matriser
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Grundläggande programmering
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Modulär programutveckling
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.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
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.
Föreläsning 4 Klasser Och Objekt.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
KPP053, HT2015 MATLAB, Föreläsning 4
Lektion 4.
Föreläsning 2 Programmeringsteknik DD1310
Föreläsning 3: Booleans, if, switch
Iteration – Repetitionssats - while
Presentationens avskrift:

Programstruktur: C för enchipsdatorer Lektion 2 Programstruktur: C för enchipsdatorer

Dagens Agenda Uppvärmning C preprocessor Villkorssatser Vektorer 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

Endianess Big Endian (Motorola 680x0, Sun SPARC, de flesta RISC maskiner) Den mest signifikanta byten är lagrad på den lägsta adressen 0x12345678 sparas som ex. 12 34 56 78 Little Endian (PIC, Intel 80x86, Pentium) Den minst signifikanta byten är lagrad på den lägsta adressen 0x12345678 sparas som 78 56 34 12 unsigned long j; j=0x12345678; Resultat i MPLAB nedan

Ett enkelt program i C

C Preprocessor Preprocessor Två mest viktiga Första steget i kompileringen Rader som börjar med # är instruktion till preprocessor Räckvidd till slutet av filen Två mest viktiga #include Filinkludering #define Makrosubstitution Det finns även andra Avdefinering: #undef Villkorlig inkludering: #if, #elif, #else, #endif, #ifdef, #ifndef

Filinkludering #include <filnamn> eller ”filnamn” Raden ersätts av hela innehållet i filnamn <filnamn> Sökvägen till filen är implementationsberoende, (tillhandahålls av systemet) ”filnamn” Filen eftersöks där källfilen hittades, (tillhandahålls av programmeraren)

Symboliska Konstanter Även det instruktion till pre-processor #define namn ersättningsuttryck Ersätter ett uttryck med ett annat Bra sätt att ersätta konstanta tal i programmet, ex gränsvärden Istället för att deklarera en variabel button i förra exemplet kunde button ha ersatts av uttrycket RA0

If-else If satsen exekveras om uttryck är sant, dvs är skilt från noll. Måste innehålla minst ett if, resten kan utelämnas. if (uttryck) sats else if (uttryck) else Följande har orsakat många missförstånd: if (num1 = 5) Alltid sant num1 tilldelas 5, däremot if(num1 = 0) Alltid falskt if (num1 == 5) Kan vara sant eller falskt if (num1 == 0) Kan vara sant eller falskt

Switch switch (uttryck){ case konstantuttryck: satser default: satser } break; Kan användas för att lämna sats, annars fortsätter exekveringen med nästa case

While och for slingor While satsen utförs om uttryck är sant dvs skilt från noll while (uttryck) sats For-satsen har tre komponenter Vanligast är att uttryck1 och uttryck3 är tilldelningar medan uttryck2 är ett relationsuttryck for (uttryck1; uttryck2; uttryck3) sats Break och continue break; används för att lämna inuti en slinga continue; påbörja nästa varv i en slinga, i while testas uttrycket igen i for överförs kontrollen till uppräkningsdelen.

Oändliga Slingor I inbyggda system är det vanligt att programmet innesluts av en oändlig slinga för att det inte skall avslutas Ex: while (1){ programmets körs för evigt } Eller: for (;;){

Exempel While(1),Switch Samma funktion som tidigare program men med while(1) och switch istället för if Switch ger i detta fall ett större program Program space used ( 4.5%) Data space used ( 10.3%) Mot tidigare Program space used ( 3.2%) Data space used ( 4.4%) Orsak: Kompilatorn gör om if satsen till ett enkelt bit test, sker ej i switch fallet

Vektorer Pekare till minnesblock Sekvens av viss variabeltyp, börjar på noll Sista elementet på n-1 platsen Kan vara flerdimensionella [n] [n] Datatyp Namn [storlek (n)] int nArray[4]; Skapar en vektor av 4 int int nDispArray[]={'1', 2 , 3}; Skapar en vektor av 3 int, initierad till {(ASCII för 1), 2, 3}

String String (teckenvektor) char cDispString[]="Volt"; Vektor av typen char Avslutas med NULL, görs därför i storlek [n+1] Kan initieras med strängliteral char cDispString[]="Volt"; Skapar en vektor av 5 char initierad till ASCII tecknen för Volt, + NULL(0) char cDispVal[5]; Skapar en vektor av 5 char Sista bör reserveras för NULL, alltså 4 användbara

Tilldelning av vektorelement Måste tilldelas element för element cArray1= cArray2; //Går inte för sig cArray1[1]= cArray2[2]; //Fungerar bättre Använd index for (i=0;i<4;i++) cDispVal[i]=i; //Lägger in värdet på i på position i cDispVal[i]='\0'; //Avsluta med NULL när det är en tecken vektor

Kodläsbarhet För att underlätta programförståelse Olika stilar, ex: variabelnamn börjar med liten bokstav (nLength, n_length) Symboliska konstanter med VERSALER (jfr. BUTTON) Använd beskrivande variabelnamn L kontra nLength V kontra fVolt Däremot enkla loopvariabler i,j,k, osv.. Tänk på att n inte är samma som N i C

Kompilering PICC Lite PICC Lite Integreras i MPLAB Gratisversion av PICC ANSI C kompilator från Hi-Tech Software http://www.htsoft.com/ Begränsningar Stödjer inte alla PIC:ar Begränsningar i program och dataminne för vissa (dock ej 16F84) Integreras i MPLAB C koden transformeras till assembler därefter maskinkod

Skapa Projekt med PICC Lite Project Wizard i MPLAB Kontrollera sökvägen till PICC kompilatorn (picl.exe) se nedan Lägg till filen lab1_demo.c till ert projekt

Kompilering För att kompilera programmet Kompileringsinställningar Build All eller Make Kompileringsinställningar Build Options Bl.a. inställningar för char och double

Simulering Debugger: Select Tool: MPLAB SIM Den genererade assemblerkoden visas med Disassembly Listing

Tips för simulering Använd Watch för att titta på variabler StopWatch för att mäta exekveringstider Beroende på vilket fönster som är aktiverat Stegas antingen instruktioner i assemblerkoden eller satser i C koden Högerklocka i C koden och välj Run to Cursor

Funktioner Varför? Funktionsdefinition Läsbarhet Divide and conquer Returtyp funktionsnamn(argumentdeklarationer) { Deklarationer och satser } Vissa delar kan utelämnas, ex returtyp (default int)

Funktionens komponenter En funktion behöver inte returnera något värde Används som subrutin Call by value (värdeanrop) Argumenten är kopior, lokala för funktionen Call by reference kan implementeras med pekare (alt. globala variabler) Variabler definierade inuti funktion är lokala Automatisk minnesallokering Lagringsklassen static kan användas för statisk allokering Om en funktion definieras efter att den anropas måste den deklareras innan den anropas, ex: void DelayUs(int x);

Exempel funktion Exempel på fördröjningsfunktion utan returvärde: void DelayUs(int x){ int y; y= (x - 40) >> 2 ; TMR0= 0xFF - y; while(T0IF == 0){ continue; } T0IF = 0; Anropa ovanstående funktion: DelayUs(100);