Introduktion till C för enchipsdatorer

Slides:



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

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.
INTRODUKTION TILL PROGRAMMERING
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.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Operatorer.
Välkommen Vahid Mosavat
Att programmera i språket Java
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.
i olika programmeringsspråk
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.
Programmering B PHP Lektion 3
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
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.
Pekare och speciell programstruktur i inbyggda system
Repetition inför slutprovet
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 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.
William Sandqvist C:s minnesmodell.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
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.
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.
Programmering i C# 9. Pekare och osäker kod.
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öreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
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.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 2 programmeringsteknik och Matlab 2D1312/ 2D1305
William Sandqvist Binärkod och Graykod 7 Bitars Kodskiva för avkodning av vridningsvinkel. Skivans vridnings-vinkel finns tryckt som binära.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
1 Matlab, föreläsning 1 Oktober MATLAB Perspektiv på materialdesign Lina Kjellqvist Rum: K324 Telefon:
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
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.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

Introduktion till C för enchipsdatorer Lektion 1 Introduktion till C för enchipsdatorer

Kursinnehåll 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 Plan för de närmaste två veckorna Preliminär, kan anpassas efter önskemål

Planering v1 v1. Lektion 1: Introduktion till C för enchipsdatorer C kontra assembler Datatyper och variabler Lagringsklasser och kvalificerare Operatorer v1. Lektion 2: Programstruktur och kompileringsprocess (1) Symboliska konstanter Villkorssatser Vektorer Funktioner Kompilering av C program v1. C Lab1: Förstå C och skiftregister för portexpansion Undersök ett C program Utöka programmet till multiplikator med skiftregister och display

Planering v2 v2. Lektion 3: Programstruktur och kompileringsprocess (2) Inline assembler Interrupt Kompileringsprocessen v2. Lektion 4: Programmeringstekniker Bit-fält i struct Pekare Programoptimering v2. C Lab 2: PIC Termometer Skiftregister från Lab 1 Konstanter i EEPROM

Dagens Agenda C kontra assembler Datatyper och variabler Storlek Användning Lagringsklasser och kvalificerare Hur skall en specific variabel lagras, respektive behandlas av kompilatorn? Operationer Aritmetiska Logiska Bitvis logiska

C kontra Assembler C Assembler Ganska effektivt Högre abstraktionsnivå, portabel kod Lättare att hantera större projekt Assembler Snabbhet, mindre kodstorlek Svårt att hantera större projekt

ANSI C C Varför ANSI C? Andra Programmeringsspråk Första utgåvan av C publicerad 1978 ANSI C, American National Standards Institute’s Standard för C (1989) Varför ANSI C? Kompilatorstöd (ex. PICC Lite –gratis!) Utbredd användning (ca.80 % av alla inbyggda system projekt 1999-2000) Bra stöd för hårdvarunära programmering Andra Programmeringsspråk C++ (Objektorienterad efterföljare, ej lika effektivt -producerar mer kod, standard?) Ada (Stöd för parallella processer i språket, används till största delen i försvarsindustri)

Inledande Exempel Ganska lätt att förstå! Ett tal räknas upp från 0 till 1000 (3E8) unsigned int j; for(j = 0 ; j<1000; j++) continue; Betydligt svårare! (reg d lägsta byte, reg e högsta byte) Adress Maskinkod Assembler 0003EC 18D CLRF 0xd ;clear register d 0003ED 18E CLRF 0xe ;clear register e 0003EE A8D INCF 0xd, F ;incr. d put back in d 0003EF 1903 BTFSC 0x3, 0x2 ;run next if reg. 3 bit 2 = 1 (statuz z=1) 0003F0 A8E INCF 0xe, F ;incr. d put back in e 0003F1 3003 MOVLW 0x3 ;load 3 to work 0003F2 20E SUBWF 0xe, W ;sub f-w put in w (1st 253 in w) 0003F3 30E8 MOVLW 0xe8 ;load e8 to work 0003F4 1903 BTFSC 0x3, 0x2 ;run next if reg. 3 bit 2 = 1 (statuz z=1) 0003F5 20D SUBWF 0xd, W ;sub f-w put in w 0003F6 1C03 BTFSS 0x3, 0 ;run next if reg. 3 bit 0 = 0 0003F7 2BEE GOTO 0x3ee ;back to 3ee

Variabler En variabel avser ett visst minnesutrymme Variabler deklareras av en viss datatyp Storlek och värde på variabler Viktigt att använda rätt datatyp m.a.p. minneskrav, korrekthet och prestanda I föregående exempel unsigned int 16 bitar (två register krävs)

Datatyper Heltalstyper bit (1 bit, 0 eller 1, ej ANSI C standard men stöds av PICC och kan användas för att spara minne) Mindre heltal char (8 bitar, signed or unsigned) default unsigned, ändras i kompilatorinställningarna) Andra större heltal (little endian, minst värda byten på lägsta adressen) short = int (16 bitar, signed) unsigned short = unsigned int (16 bitar, unsigned) long (32 bitar, signed) unsigned long (32 bitar, unsigned)

Flyttal Flyttal (tal med flytande decimalpunkt), notera att heltalet (alltid =1 för alla tal utom 0) i signifikanden ej lagras – används för ökad precision float (24 bitar) double (32 bitar, välj 24 eller 32 i kompilatorinställningarna) Det som skiljer är noggrannhet

Flyttalsrepresentation (PICC Manual) Ex: Pi ≈ 3,1415926 1 1,00 1001 0000 1111 1110 1101 001 Med double 24 bit-> Pi=3,141602 0 100 0000 0 100 1001 0001 0000 Med double 32 bit-> Pi=3,141593 0 100 0000 0 100 1001 0000 1111 1101 1011 Varför?

Storlek på datatyper (PICC Manual)

Blandning av datatyper Typomvandling sker från ”lägre” till ”högre” typ Vad händer? unsigned int u; if (u >-1) Alltid falskt! -1 omvandlas till unsigned (1111 1111 1111 1111) Antag: int 16 bit och long 32 bit Då är -1L < 1U men -1L > 1UL (L suffix för long, U suffix för unsigned, UL suffix för unsigned long)

Talformat (PICC Manual) Se upp med att använda 0 före ett tal Det betyder att det tolkas som oktalt

Lagringsklasser Lagringsklasspecificerare talar om hur en variabel lagras Extern Global, extern behöver inte deklareras om den definieras i samma fil före den används Auto Behöver ej anges, automatisk allokering, i PICC bank 0 (kan ändras med bank kvalificerare) Static Extern blir osynlig utanför källfilen Auto variabels värde kvarstår utanför funktion Register Lagra helst i register, inte aktuellt i vår PIC där vi endast arbetar med register

Kvalificerare Datatypkvalificerare talar om hur kompilatorn skall tolka en variabel const Variabler med konstant värde (läggs i programminne, observera att detta inte gäller konstanta pekare) volatile Talar om för kompilatorn att värdet kan ändras emellan successiva accesser Förhindrar att kompilatorn optimerar till synes redundanta avsnitt Viktigt att tänka på vid interrupt och minne som delas av flera processorer Speciella datatypkvalificerare (PICC) absolute Specific adress kan anges för globala och statiska variabler volatile unsigned char @ 0x06; persistent, bank ock eeprom

Exempel I filen pic1684.h är SFR deklarerade och mappade till specifika adresser: Lagringsklass kvalificerare datatyp absolut @ adress static volatile unsigned char PORTB @ 0x06; static unsigned char bank1 OPTION @ 0x81; static volatile bit RB7 @ (unsigned)&PORTB*8+7; static bank1 bit RBPU @ (unsigned)&OPTION*8+7; Varför är inte OPTION volatile?

Operatorer Aritmetiska Logiska (Förväxla ej med bitvis) Jämförelse +,-,*,/ Modulus %, ger rest vid heltalsdivision Ex: 25%10 = 5 Logiska (Förväxla ej med bitvis) &&, ||, ! Jämförelse ==, >=, <=,>,<

Bitmanipulation Bitvisa operatorer, används på heltalstyper Varje operand behandlas som en ordnad bitvektor, jämförs bit för bit Ett komplementet ~ varje bit inverteras Och & Returnerar 1 om båda bitarna är 1 Eller | Returnerar 1 om någon av bitarna är 1 Exlusivt eller ^ Returnerar 1 om ena biten är 1 och den andra 0 Skift operatorn Skifta vänster << Skifta höger >> a = b << 6 (innehållet i b skiftas 6 steg åt vänster, de 6 bitarna längst till vänster i b förvinner, fylls på med nollor från höger Se upp med högerskift och signed integer Om neg. tal kan det fyllas med ettor från vänster (kompilatorberoende PICC sign extension dvs. med ettor)

Maskning Ett bitmönster transformeras till ett annat genom en logisk bitvis operation Testa enstaka bit If (bitvar & 0x04) //Alt. 1: test av bit 2 If (bitvar & (1 << 2)) //Alt. 2: test av bit 2 Sätta enstaka bit Bitvar = Bitvar | (1 << 2); // Sätt bit 2 till 1 Bitvar |= (1 << 2); // Sätt bit 2 till 1 Nollställa enstaka bit Bitvar &= ~(1 << 2) //Nollställ bit 2 Kombinera bitar ur flera register nVolt = 0 | ADRESH; nVolt = (nVolt << 8) | ADRESL;

Defaultvärden för konstanter Se upp med att masken är lika stor som operanden! unsigned long j j=0xFFFFFFFF; j &= ~(1 << 15); // j kan bli 0x00007FFF! j &= ~(1 << 16); // j kan bli 0xFFFFFFFF! 1 default int 16 bitar, istället 1L (suffix för long) j &= ~(1L << 15); // j blir 0xFFFF7FFF! j &= ~(1L << 16); // j blir 0xFFFEFFFF! char i; i=0x55; if (~i == 0xAA) //Lurigt, heltalsbefordring till int ger: ~0x0055 = 0xFFAA

Testa flera bitar Om man vill testa fler bitar Ex. testa om bit 0 och 1 är satta if (bitvar & 0x03) True för bit 0 eller bit 1 if ((bitvar & 0x03) == 0x03) if (bitvar & 0x01 && bitvar & 0x02) Båda måste vara true