1 / 62

Efteruddannelse Embedded C

Efteruddannelse Embedded C. Modul 2 (Tirsdag den 12/1-2010). 07.01.2010. Modul 1. Indhold: Debugning Standart I/O i C PIC18F’s porte Display Driver til OLED display C assigenment , logiske operatorer løkker, betingelser PIC18F A/D-Converter Opsamling på dagens opgaver.

sakina
Télécharger la présentation

Efteruddannelse Embedded C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EfteruddannelseEmbedded C Modul 2 (Tirsdag den 12/1-2010) 07.01.2010

  2. Modul 1 • Indhold: • Debugning • Standart I/O i C • PIC18F’s porte • Display • Driver til OLED display • C assigenment, logiske operatorer løkker, betingelser • PIC18F A/D-Converter • Opsamling på dagens opgaver.

  3. Demo af debugger • Debuggning af applikation

  4. Øvelse • Med udgangspunkt i jeres HelloWorld applikation, skal i selv prøve, at downloade hex fil via debugger (flyt usb stik til debuggerensusb). • Prøv dels at singel steppe gennem jeres program • Prøv også at indsætte et breakepoint

  5. Standart I/O Internt i en computer repræsenteres alle tal og karakterer som bit, en byte er i den forbindelse en serie af bit hvor den enkelte bit er vægtet binært. Fil begreber repræsentere en ”samling” af relaterede tal eller karakterer. I C behandles en fil som en serie af byte (dvs. den mindste enhed er en byte altså 8 bit) ofte anvendes der betegnelsen stream om en sådant serie af byte. I C er en fil ikke kun ”noget” der ligger på en harddisk, men er faktisk betegnelsen for data der modtages i form af en strøm byte. F. eks : input fra tastatur, output til printer, filer fra HD etc.

  6. Pre definerede filer stream i C • stdin - Standart input • stdout - Standart output • stderr - Standart til udskrift af fejl meddelelser På en PC’er er disse tre typisk forbundet til tastatur og skærm, men på andre typer af systemer kan de være forbundet til andre input/output enheder

  7. getc funktionen #include <stdio.h> voidmain() { int kar; printf("Tryk paa en tast !\n"); kar = getc(stdin); printf("Du trykkede på : %c\n",kar); } • getc() læser den næste karakter fra en fil stream og returnere den i form af en integer. • Funktionen getc findes i stdio.h derfor skal denne inkluderes for at bruge funktionen. • Syntaks for getc er : intgetc(FILE *stream);

  8. getchar funktionen • Funktionen getchar findes i stdio.h og denne skal derfor inkluderes. • getchar er identisk med getc(stdin), dvs. at man med getchar anvende en ”fast” file stream, nemmerligstdin.

  9. Funktionen putc #include <stdio.h> voidmain() { int kar = 145; putc(kar, stdout); getchar(); } • Når der skal udskrives karakterer på en specifik file stream anvendes funktionen putc. • putc findes i stdio.h • Syntaks : intputc(int c, FILE *stream);

  10. Funktionen putchar • Findes i stdio.h • Har en funktion tilsvarende putc(c, stdout) • Udskriver på stdout, man kan altså ikke vælge hvor karakterer skal sendes hen. • getchar og putchar er egentligt bare special udgaver af getc og putc, normalt vil de også være lavet med getc og putc funktionerne hvor file stream er sat til standart i/o enheder.

  11. Funktionen printf • Vi har allerede brugt denne funktion, men printf er egentligt en omfattende funktion med mange egenskaber. Printf funktionen udskriver på stdio og for at bruge printf skal stdio.h inkluderes. • printf kan bruges til at udskrive en konstant tekst streng: printf(”Hello World”); • printf kan også udskrive indhold af variabel: int x = 10; printf(”x indeholder vaerdien %d”,x);

  12. Tilretning af ”printf” til dedikeret hardware • I MPLAB C18 er det muligt på en relativt simpel måde at til rette hvor Printf som standart skriver ud til, dette gøres ved, at sætte stdout som vist nedenfor: • stdout = _H_USER; • Herefter vil printf anvende funktionen • int _user_putc (char c); • For hver karakter der skal udskrives foretager printf nu et kald til funktionen og da vi selv skriver funktione kan vi sende karakterene til det device vi ønsker.

  13. Format specifikatorer for printf

  14. Hexa decimale tal • Alle tal og karakterer er internt i en computer gemt som binærer værdier altså en serie af bits der kan antage værdien 0 eller 1. • En binær værdi er normalt ikke særlig interessant for en normal bruger, derfor kan man i C vælge mellem nogle forskellige talformater når man udskriver værdier med printf. Et af disse talformater er hexa decimale tal (16 symboler i modsætning til det decimales 10)

  15. Udskrift af talværdi som en hexadecimal værdi #include <stdio.h> voidmain() { int tal = 7913; printf("Den hexadecimalvaerdi er %x",tal) ; getchar(); } • Med printf kan variables indhold udskrives hexadecimalt med %x eller %X

  16. Det octaletalformat • Indeholder 8 symboler • Bruger de samme symboler som det decimale talformat

  17. Justering af output • Der er med printf muligt at justere udskrift af tal. • Ved at angive et tal mellem % og d (eks. %4d) justeres tal således at der afsættes 4 pladser til udskrift af tal har tallet så kun 2 cifre bliver tallet højre stillet. • Angives et negativt tal vil tallet blive venstre justeret, med det antal pladser der angives. • Eks %-4d

  18. Program eksempel #include <stdio.h> voidmain() { int tal1 = 1, tal2 = 12, tal3 = 123, tal4 = 1234, tal5 = 12345; printf("%6d %-6d \n",tal1, tal1); printf("%6d %-6d \n",tal2, tal2); printf("%6d %-6d \n",tal3, tal3); printf("%6d %-6d \n",tal4, tal4); printf("%6d %-6d \n",tal5, tal5); getchar(); }

  19. externvolatilenear union { struct { unsigned TRISA0:1; unsigned TRISA1:1; unsigned TRISA2:1; unsigned TRISA3:1; unsigned :1; unsigned TRISA5:1; unsigned TRISA6:1; unsigned TRISA7:1; }; struct { unsigned TRISA:8; }; } TRISAbits; • externvolatilenear union { • struct { • unsigned LATA0:1; • unsigned LATA1:1; • unsigned LATA2:1; • unsigned LATA3:1; • unsigned :1; • unsigned LATA5:1; • unsigned LATA6:1; • unsigned LATA7:1; • }; • struct { • unsigned LATA:8; • }; • } LATAbits; Generel opbygning af porte i PIC18F

  20. Fysisk interface mellem PIC og OLED

  21. #defineoledWR LATEbits.LATE1 #defineoledWR_TRIS TRISEbits.TRISE1 #defineoledRD LATEbits.LATE0 #defineoledRD_TRIS TRISEbits.TRISE0 #defineoledCS LATEbits.LATE2 #defineoledCS_TRIS TRISEbits.TRISE2 #defineoledRESET LATDbits.LATD1 #defineoledRESET_TRIS TRISDbits.TRISD1 #defineoledD_C LATBbits.LATB5 #defineoledD_C_TRIS TRISBbits.TRISB5 Definition af interface mellem pic og OLED

  22. Skrivning til OLED

  23. Læsning fra OLED

  24. Kontrolsignaler

  25. Læsning fra OLED

  26. GDDRAM layout

  27. Pixel map

  28. Commando registre

  29. Commando registre

  30. Commando registre

  31. Commando registre

  32. Commando registre

  33. Commando registre

  34. Commando registre

  35. Commando registre

  36. Sender kommando til OLED Eksempel fra driver til OLED voidWriteCommand(BYTE cmd) { TRISD = 0x00; LATD = cmd; oledRD = 1; oledWR = 1; oledD_C = 0; oledCS = 0; oledWR = 0; oledWR = 1; oledCS = 1; TRISD = 0xFF; }

  37. Øvelse • Lav øvelsen i lab2.docx

  38. Opbygning af en driver • Når der skal opbygges en driver eller et lib. til et stykke hw er det et godt design kriterie at opbygge det lagdelt, herved bliver det betydelig lettere at overskue og det vil også være væsentligt lettere at debugge samt teste koden. • Når vi laver ”procedurale” programmer er en god måde at beskrive strukturen at koden på via Hierakiske diagrammer, i filen ”hd The structurechart.pdf” er disse beskrevet.

  39. Gennemgang af OLED • Hvilke funktioner findes i filen ? • Hvordan hænger de sammen ? • Er der anvendt en lagdelt arkitektur ? • Er der noget af koden der ikke anvendes, efter vi har rettet/ændret i koden ? • Kunne opdelingen af kode være lavet mere hensigtsmæssigt ?

  40. Assignment operatoren (=) • Tilskrivning (assignment) = ”flytter” en værdi fra højreside til et adresse objekt på venstre side. • Eks. • x = 10+20; • Venstre side skal referere til et objekt som der kan ”skrives” til og højreside skal kunnet beregnes til en værdi. • Eks. • x=y=z=5; • Er lovlig og vil sætte x,y,z til værdien 5.

  41. Kombinations operatorer !! Udregning på højre side foregår først

  42. Increment og decrement • Symbolet for increment er ++ (!!ingen mellemrum!!) • Symbolet for decrement er – (igen ingen mellemrum) • Increment og decrement kan anvendes som pre- eller post operator. • Ved post vil værdi først blive tilskrevet efter statement er færdig beregnet. • Eks. • z = x++; • z=++x;

  43. Fortegns operatorer - skifter fortegn af konstanter eller variable hvis de placeres før konstantudtryk eller variable. Eks. -x Hvis x har værdien 10 vil udtrykket ovenfor altså have værdien -10. r = x - - y Er lig med r = x – (-y) (Husk mellemrum mellem - -)

  44. Relations operatorer • Der findes i C nogel operatorer der anvendes til at sammenligne med, nogle af operatorene består af to tegn og disse skal stå ved siden af hinanden (altså uden mellemrum).

  45. Cast operator • Anvendes når man selv vil styre data typen som skal anvendes. • Syntaksen for cast operatoren er • (datatype) x • Anvend type casting når du ønsker en bestemt datatype som resultat af beregning.

  46. Sizeof operatoren • Anvendes til at ”måle” størrelsen af en datatype, da C standarten ikke fastsætter en konkret størrelse for de simple datatyper, må man anvende sizeof for at få oplyst størrelse af en datatype. Sizeof returnere et tal der angiver størrelse i antal byte. • Syntaks: • sizeof(expression)

  47. Logiske operatorer • C indeholder 3 logiske operatorer, som anvendes når vi ønsker at kombinere udtryk.

  48. Bitvise operatorer • Bitvise operatorer virker på de enkelte bit i modsætning til de logiske.

  49. x?y:z Underlige konstruktioner i C • Denne operator kaldes betingelses operatoren og bør absolut anvendes med omtanke, hvis man anvender den bliver koden let svær at læse. • Eksempel • k = x > 10 ? ’L’ : ’S’; • k bliver satlig med karakteren hvis x > 10 ellers bliver k sat til karakteren S.

  50. Løkker • Hvis vores kode ikke blot skal afvikles, som en fast række af instruktioner, man der er dele af vores kode vi ønsker at gentage anvendes løkker. • I C findes i alt 3 løkke strukturer: • while • do-while • for • Mange ting kan udføres med en hvilken som helst af de tre løkker, men ofte er der fordele ved, at vælge den ”rette”

More Related