Efteruddannelse Embedded C Modul 3 (Onsdag den 13/1-2010) 07.01.2010.

Slides:



Advertisements
Lignende præsentationer
Ligninger af første grad i en variabel
Advertisements

TEST 1 modul 1 20 spørgsmål. Du skal klikke med musen på det rigtige svar, så kommer du automatisk til næste spørgsmål Klik for start.
C# introduktion. using System; Namespace MyFirst { class eks1 { public static void Main() { Console.WriteLine("Hej!"); Console.Write("Skriv dit navn her:
SQL introduktion og basis
Lektor Georg K. Christensen Konstruktion & Produktudvikling
Når en applikation går i fejl… … er det interessant, at vide noget om: Hvornår gik applikationen i fejl Hvilken applikation gik i fejl Hvad er fejlen.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
Efteruddannelse Embedded C Modul 4 (Torsdag den 14/1-2010)
XB5S Biometrisk genkendelse Vejledning 02/07/2014 Version 1 Keld Flindt.
Efteruddannelse Embedded C Modul 5 (Fredag den 15/1-2010)
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
Efteruddannelse Embedded C Modul 4 (Torsdag den 22/4-2010)
1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Modul 1 (B) Rød løber Tid: 30 minutter. Spilleregler for dagen.
Intro Forelæsning 2 Linux install-party lør.14.sept kl – man. 14.okt – Kursets omfang :7,5 ECTS Kursussammensætning: forelæsning.
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
Efteruddannelse Embedded C
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
1 Vil du se detaljer om en fuldmagt, du har fået? Hvis du som medarbejder har fået en fuldmagt af en borger, betyder det, at du kan handle på vegne af.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Tietgen Skolen Syntaks: while ( betingelse for loop ) statement; Eksempel: int tal = 0; while ( tal/3 != 4 ) { System.Console.WriteLine(tal); tal = tal.
Distribution af funktionalitet Webservice med WCF x.
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
Reduktion AM 2009.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
Hvad tror du? -rygning blandt unge Hemmelig afstemning for forældre.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
Hex Oplæg til eksamen 28/ Dagsorden Introduktion Præsentation af spillet Vores graf MinimaxDFS/BFS Disjoint sets.
Induktion og rekursion
Dette program beregner automatisk hvor mange feriedage du får i år. Klik her Vigtig besked fra personaleafdelingen!
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Projekttyper v/ Lise Louv, Uddannelsesafdelingen Siden sidst: evaluering på opgaver og virtuel kursus. Kursets ugeforløb læse – forelæsning – øvelsestime.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
MATLAB Programmering Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 d = size(s); for k = 1:d(1), for n = 1:d(2), if (s(k,n) < 0) r(k,n)
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Efteruddannelse Embedded C Modul 1 (Mandag den 11/1-2010)
Multi-vejs hobe med ekstra bytes Foredrag: Claus Jensen Projektmedlemmer: Jyrki Katajainen, Fabio Vitale, Claus Jensen.
Collectionklasser Ekstra materiale. Collections Motivation – hvorfor bruge collections? Realisering af en-til-mange relationer – Importer, erklær, initialiser.
and many other things and many other things.
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
Paradigmer i Programmering 4. IO + oversigt over udtryk.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
Microcontroller ► Fordele ved anvendelse af microcontroller ► Teori ► Informationsflow i microcontrolleren ► Anvendelses muligheder ► Implementering.
Efteruddannelse Embedded C Modul 1 (Mandag den 19/4-2010)
Efteruddannelse Embedded C Modul 2 (Tirsdag den 20/4-2010)
Efteruddannelse Embedded C Modul 3 (Onsdag den 21/4-2010)
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Intro Siden sidst: evaluering på opgaver og virtuel kursus Kursussammensætning: forelæsning – læse – arbejde selvstændigt – newsgroup – øvelsestime – aflevering.
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Quiz 3.1. Quiz 1 – Assignment dIntProg, E14 Hvad er værdierne af x og y efter udførelse af følgende program? 1.x er 6, y er 3 2.x er 8, y er 5 3.x er.
DAIMIIntroducerende objektorienteret programmering4D.1 Betingelsessætninger if.
Quiz Uge 2 – torsdag. Hvorfor har vi clicker quizzer? Formålet med quizzerne er –at afveksle undervisningsformen – så I ikke falder i søvn –at tvinge.
1587 Server - Blandet miljø Embedded I
ADC (Analog/Digital converter) Bruges til at måle analoge spændinger på kontrollerens inputporte. På dit board sidder en drejeknap under displayet som.
Quiz Uge 2 – mandag.
Areal bestemt ved integration
Intelligent afstandsmåler
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Positive sider som far 1:____________________________ 2:____________________________ 3:____________________________ 4:____________________________ 5:____________________________.
Præsentationens transcript:

Efteruddannelse Embedded C Modul 3 (Onsdag den 13/1-2010)

Modul 1 Indhold: 1)Opsamling fra i går 2)A/D-konvertering 3)Forgreningsstrukturer 4)Pointer i C 5)Strenge 6)Realtidssystemer 7)Interrupt 8)RTOS kerner 9)Opsamling

Opsamling fra modul 2 Man skal altså ikke altid stole på kode, som er skrevet af andre  heller ikke velrenommerede firmaer, vores problemer fra i går skyldes, at der er en fejl i timing i oled driveren (ResetDevice), oled når ikke at komme ud af reset, før man forsøger at opsætte registerne, løsning er vist nedenfor: OriginalModificeret version

A/D-konverter i PIC PIC18F46J50 indeholder en 10 bits A/D-konvereter, med en 13 ports MUX. Features for A/D-konverter: Kan konverter medens processor er i sleep Kan foretage selv-kalibrering. Auto acquisition 102kS/sek

Setup registre ADCON0

Setup register ADCON1

Analog port config register ANCON0

Analog port config register ANCON1

MPLAC C18 register definition extern volatile near unsigned char ADCON1; extern volatile near union { struct { unsigned ADCS:3; unsigned ACQT:3; unsigned ADCAL:1; unsigned ADFM:1; }; struct { unsigned ADCS0:1; unsigned ADCS1:1; unsigned ADCS2:1; unsigned ACQT0:1; unsigned ACQT1:1; unsigned ACQT2:1; }; } ADCON1bits ; ADCON1 extern volatile near unsigned char ADCON0; extern volatile near union { struct { unsigned ADON:1; unsigned GO_NOT_DONE:1; unsigned CHS:4; unsigned VCFG:2; }; struct { unsigned :1; unsigned GO_DONE:1; unsigned CHS0:1; unsigned CHS1:1; unsigned CHS2:1; unsigned CHS3:1; unsigned VCFG0:1; unsigned VCFG1:1; }; struct { unsigned :1; unsigned DONE:1; }; struct { unsigned :1; unsigned GO:1; }; struct { unsigned :1; unsigned NOT_DONE:1; }; } ADCON0bits; ADCON0

MPLAB C18 register specifikation extern volatile near unsigned ADRES; extern volatile near unsigned char ADRESL; extern volatile near unsigned char ADRESH; extern volatile far unsigned char ANCON0; extern volatile far struct { unsigned PCFG0:1; unsigned PCFG1:1; unsigned PCFG2:1; unsigned PCFG3:1; unsigned PCFG4:1; unsigned PCFG5:1; unsigned PCFG6:1; unsigned PCFG7:1; } ANCON0bits; ANCON0 ADRES extern volatile far unsigned char ANCON1; extern volatile far struct { unsigned PCFG8:1; unsigned PCFG9:1; unsigned PCFG10:1; unsigned PCFG11:1; unsigned PCFG12:1; unsigned :1; unsigned VBG2EN:1; unsigned VBGEN:1; } ANCON1bits; ANCON1

Mux og ekstern ref. spænding

Analog ækvivalent diagram

Beregning af acquisition time

Pulsplan for A/D-konverter

Spec for A/D-konverter

Øvelse Lav øvelsen i ”Lab3.docx”

”Conditional branching” ~ betinget forgrening Hvis man ønsker at udfører noget kode hvis en bestemt betingelse er opfyldt gøres dette med en if struktur. Eksempel: if (x>=10) { printf(”X var stoerer eller ligmed 10”); }

If-else Vil man gerne vælge mellem to stumper kode der udføres hvis betingelse er sand eller falsk anvendes en if-else struktur. Eksempel if (x == 10) { printf(”X var lig med 10”); } else { printf(”X var forskellig fra 10”); }

If sætninger i if sætninger If sætninger må godt være ”nested” (if i if sætninger), herved kan man lave nogle mere komplekse strukturer. Eksempel if (x>0) { if( x%2 == 0) { printf(”x er et positiv, lige tal”); } else { printf(”x er et positiv, ulige tal”); } else { if osv osv…

Switch statement En switch struktur er en multiforgrening der kan bruges i stedet for f.eks if..else hvis man skal forgrene programafvikling ud i mere end 2 grene. Syntaks: switch (expression) { case Konstant-udtryk 1: statement1; case Konstant-udtryk2: statement2; … default : statement-default; }

Break Anvendes til at hoppe ud af en switch struktur eller en løkke. Eksempel switch(svar) { case ’j’ : printf(”Dit svar var ja”); break; case ’n’ : printf(”Dit svar var nej”); break; osv.

Continue Hvis man ønsker at springe til ”bunden” af en løkke kan continue anvendes, den terminere altså ikke løkken, men hopper egentligt videre til næste gennemløb. Eksempel: for ( i=1; i<8; i++) { if ((i==3)||(i==5)) continue; sum+=i; }

Pointers Pointere i C er både en ”farlig”, men dog stadig i C en nødvendig sprog konstruktion, med pointere er det muligt at adressere variable eller data indirekte, hvilket betyder at en pointer er en variabel der indeholder en adresse på en anden variabel. Med en pointer i C har man mulighed for at tilgå en specifik fysisk adresse i hukommelsen !! det kan godt give anledning til nogle kritiske situationer

Oprettelse af en pointer Pointere er egentligt en ”normal ” statisk variabel der blot indeholder en adresse. Oprettelse af en pointer: int etTal; int *enPointer; * anvendes altså til at angive at der er tale om en pointer. I C skal man normalt angive en datatype for ens pointer, meningen med det er faktisk, at man skal oplyse hvad man ønsker tilgå via pointeren.

Adresse operatoren & Med operatoren & kan man få oplyst adressen på et objekt variabel eller start på noget kode. Eksempel int etTal; int *enPointer; enPointer = &etTal; enPointer ”peger” nu på etTal (eller rettere den adresse som pointeren indeholder er den samme som den adresse som etTal ligger på)

Dereference operator * Hvis man ønsker at læse indhold af den variabel som en pointer ”peger” på gøres dette ved at skrive * foran pointeren og dette vil så betyde at vi får indhold af det som pointer peger på. Eksempel: int x = 10; int y; int *pt ; pt = &x; //Peger på x y = *pt; // y bliver lig med 10

Null pointer En pointer kan godt pege på ”ingen ting” hvilket betyder at pointer ikke indeholder en adresse Eksempel int *pt; pt = null;

Pointer og MPLAB C18

Far og near pointer I MPLAB C18 er ram og program memory som får omtalt to forskellige typer memory med hver sin data bus, far og near har derfor forskellig betydning alt efter om pointer peger på ran eller rom

Sidste krølle på pointers Variable i C kan defineres som const: int const tal=7913; I dette eksempel betyder const at tal ikke kan ændres efterfølgende. Men også på en pointer kan man sætte const: int tal; const char *cp = &tal; Her betyder det at vi ”låser” pointeren til at pege på tal, og tal’s indhold kan faktisk godt ændre sig eller blive ændret men den adresse cp peger på er tal’s.

Strenge Oprettelse af en streng Anatomi af streng i C Længde af en streng Kopiering af strenge

Oprettelse af strenge Strenge i C kan betragtes, som et 1 dimensionalt array af char de oprettes som vist nedenfor char streng[4]; Eller hvis man ønsker at de skal have et indhold. char streng[4] = { ’H’,’e’,’j’,’\0’} Eller blot: char streng[4]=”Hej”; Eller som den dovne vil gøre char streng[ ]=”Hej”;

En strengs anatomi En sekvens af karakterer der afsluttes med ascii tegnet \0 (nul terminering) Nul terminering er vigtig, da det er den der bestemmer når streng er slut. Hvis en streng skal indeholde en ”konstant” tekst kan man også anvende en pointer : char *c_ptr = ”Hello world!!”; Det svarer til at pointer peger på streng der ligger i program memmory

Længden på en streng Rigtig mange gode og nyttige funktioner til manipulation af strenge findes biblioteket streng.h b.la strlen, den returnere længden på en streng. Eks. X = strlen(streng); Husk strlen tæller til den første nul terminering, så der er forskel mellem sizeof og strlen.

Kopiering af strenge Kopiering af strenge foregår med funktionen strcpy. Eks char x[20]; char y[ ] = ”Her er en lille tekst”; strcpy(x,y);

Scanf Anvendes til indlæsning af data fra standart input (normalt tastatur) Eks float x; scanf(”%f”,&x); Eller en teksstreng char minstr[20]; scanf (”%s”,minstr); //bemærk syntaks

Realtidssystemer Def. af realtidssystem er noget flydende, men en generel definition kunne være at et realtidssystem er et system der generere til response (output) indenfor en tidshorisont som i sammenhæng med den konkrete system er ubetydeligt (ikke særlig præcis). Stort set alle indlejrede systemer er realtidssystemer.

Eksempler på realtidssystemer

Interrupt grundlæggende Kan anvendes i simple systemer til at implementer realtids respons. Er normalt den hurtigste måde at lave realtidsafvikling på. Er kun velegnet til simple systemer.

Forgrund/baggrund system

Interrupt, beskrivelse Interrupt betyder afbrydelse, og ideen er netop, at når der sker noget uden for computeren, der kræver dens opmærksomhed, afbrydes computerens igangværende programudførelse. Udtrykket dækker både den programmelmæssige side og det fysiske elektriske signal, der internt i en computer forårsager afbrydelsen. Et interrupt forekommer oftest i forbindelse med overførsel af data mellem computeren og en ydre enhed, eller ved at et interval-ur, baseret på computerens klokke (se klokfrekvens og RTC), giver interrupt. Det kan dog også være en begivenhed som f.eks. strømsvigt, der initierer interruptet.  Læs hele beskrivelse i filen ”Beskrivelse af interrupt.txt”

Interrupt i PIC18 fam. Har 20 interrupt kilder Har 2 interrupt vektorer (1 for lav prioritets interrupt og en for høj prioritets interrupts) Reagere når aktuelle instruktion er fuldført. Ved fast return interrupt gemmes relevante interne registre. Interrupt handler skal under søge hvem der genererede interruptet.

Interrupt systemet i PIC18F46J50 2 Interrupt prioritet niveauer 4 eksterne interrupt, 4 programmerbare _Mange_ interne interrupt kilder Interrupt systemet kan ”vække” processor fra sleep Til styring af en interrupt kilde findes følgende bit: Interrupt flag – Interrupt er ankommet Enable bit - Tænd/sluk af interrupt mulighed Prioritet - Angiver hvor ”vigtigt” et interrupt er

Blokdiagram af interrupt system

Registre til styring af interrupt..\..\Datasheet\39931c.pdf

Interrupt og sw aspekter Interrupt funktioner kan ikke have input parametre og de kan heller ikke returnere data. Eksempel: void isr(void) { osv. Høj prioritets vektor lægger ved 0x0008 Lav prioritets vektor lægger ved 0x0018

Eksempel på interrupt handler void isr(void) { if (TMR0IF==1)//Interrupt genereret af Timer 0 { // kode TMR0IF = 0; //Fjern interrupt flag; } if (RCIF==1) // Interrupt fra seriel modtage modul { // kode RCIF = 0; // Fjern intrupt flag } void main() { // Kode til init af interrupt do { } while (1); }

Interrupt service rutiner

Øvelse Lav øvelsen i filen lab5.docx

Eksempel på forground/background System

Interrupt og task switching

Def. Af task

Def. Prioritet, task switch

Def. Preemption, cooperative

Cooperative OS

Scheduler

Lidt mere komplet model af kernel

Delte ressourcer og de problemer de afføder Simpelt eksempel på den delt resource

Kode eksempel på en simpel kerne

Simpel kernel

Øvelse I kataloget src lægger et eksempel på et RTOS (freeRTOS), som kan kører på en PIC18F processor. I freeRTOS lægger der tre eksempler til MPLAP C18 afprøv disse og undersøg hvordan de virker og hvordan man i disse eksempler opretter en task.

Opsummering Opsummering på dagen Tak for i dag