Grundlagen der Systemnahen Programmierung in C (GSPiC)

Größe: px
Ab Seite anzeigen:

Download "Grundlagen der Systemnahen Programmierung in C (GSPiC)"

Transkript

1 Grundlgen der Systemnhen Progrmmierung in C (GSPiC) Überblick: Teil C Systemnhe Softwreentwicklung 12 Progrmmstruktur und Module Teil C Systemnhe Softwreentwicklung 13 Zeiger und Felder Dniel Lohmnn 14 µc-systemrchitektur Lehrstuhl für Informtik 4 Verteilte Systeme und Betriebssysteme 15 Nebenläufigkeit V_GSPIC_hndout Friedrich-Alexnder-Universität Erlngen-Nürnberg Wintersemester 2011/ V_GSPIC_hndout 16 Speicherorgnistion 17 Zusmmenfssung Softwreentwurf Beispiel-Projekt: Eine Wettersttion 12-Module: Softwreentwurf: Grundsätzliche Überlegungen über die Struktur eines Progrmms vor Beginn der Progrmmierung Ziel: Zerlegung des Problems in beherrschbre Einheiten Es gibt eine Vielzhl von Softwreentwurfs-Methoden Objektorientierter Entwurf Stnd der Kunst Dekomposition in Klssen und Objekte An Progrmmiersprchen wie C++ oder Jv usgelegt [ GDI, IV] Top-Down-Entwurf / Funktionle Dekomposition Bis Mitte der 80er Jhre fst usschließlich verwendet Dekomposition in Funktionen und Funktionsufrufe An Progrmmiersprchen wie Fortrn, Cobol, Pscl oder C orientiert Systemnhe Softwre wird oft (noch) mit Funktionler Dekomposition entworfen und entwickelt. 12-Module: Typisches eingebettetes System Mehrere Sensoren 0+&1 Wind -)#''8)# Luftdruck Tempertur 2#$3 Mehrere Aktoren ; # < (hier: Ausgbegeräte) LCD-Anzeige 95: PC über RS232 PC über USB Sensoren und Aktoren n den µc ngebunden über verschiedene Bussysteme I 2 C RS232 Wie sieht die funktionle Dekomposition der Softwre us? ;<%&()%..#),=>?4@ "+'3.*A c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.1 Einführung 12 1 c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.2 Funktionle Dekomposition 12 2

2 Funktionle Dekomposition: Beispiel Funktionle Dekomposition: Probleme 12-Module: Funktionle Dekomposition der Wettersttion (Auszug): 1. Sensordten lesen 0+&1 1.1 Tempertursensor lesen -)#''8)# I 2 C-Dtenübertrgung intiieren 2#$ Dten vom I 2 C-Bus lesen ; # < 1.2 Drucksensor lesen 95: 1.3 Windsensor lesen 2. Dten ufbereiten (z. B. glätten) 3. Dten usgeben 3.1 Dten über RS232 versenden Budrte und Prität festlegen (einmlig) Dten schreiben 3.2 LCD-Disply ktulisieren 4. Wrten und b Schritt 1 wiederholen ;<%&()%..#),=>?4@ "+'3.*A 12-Module: Erzielte Gliederung betrchtet nur die Struktur der Aktivitäten, nicht jedoch die die Struktur der Dten Gefhr: Funktionen rbeiten wild uf einer Unmenge schlecht strukturierter Dten mngelhfte Trennung der Belnge sendbuf[] RS232Init() bud RS232Send() init curdev I2CRec() I2CStrt() lsttemp lstwind GetTemp() Dten min() SendToPC() Aktivitäten c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.2 Funktionle Dekomposition 12 3 c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.2 Funktionle Dekomposition 12 4 Funktionle Dekomposition: Probleme Zugriff uf Dten (Vriblen) Erzielte Gliederung betrchtet nur die Struktur der Aktivitäten, nicht jedoch die die Struktur der Dten Gefhr: Funktionen rbeiten wild uf einer Unmenge schlecht strukturierter Dten mngelhfte Trennung der Belnge Vriblen hben 10 1 Sichtbrkeit (Scope) Wer knn uf die Vrible zugreifen? Lebensduer Wie lnge steht der Speicher zur Verfügung? Wird festgelegt durch Position (Pos) und Speicherklsse (SK) Pos SK Sichtbrkeit Lebensduer 12-Module: Prinzip der Trennung der Belnge Dinge, die nichts miteinnder zu tun hben, sind uch getrennt unterzubringen! Trennung der Belnge (Seprtion of Concerns) ist ein Fundmentlprinzip der Informtik (wie uch jeder nderen Ingenieursdisziplin). 12-Module: Lokl keine, uto Definition Blockende Definition Blockende sttic Definition Blockende Progrmmstrt Progrmmende Globl keine unbeschränkt Progrmmstrt Progrmmende sttic modulweit Progrmmstrt Progrmmende int = 0; sttic int b = 47; void f() { uto int = b; sttic int c = 11; // : globl // b: locl to module // : locl to function (uto optionl) // destroyed t end of block // c: locl to function, not destroyed c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.2 Funktionle Dekomposition 12 4 c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.3 Globle Vriblen 12 5

3 Zugriff uf Dten (Vriblen) (Forts.) Sichtbrkeit und Lebensduer sollten restriktiv usgelegt werden Sichtbrkeit so beschränkt wie möglich! Überrschende Zugriffe von ußen usschließen (Fehlersuche) Implementierungsdetils verbergen (Blck-Box-Prinzip, informtion hiding) Lösung: Modulrisierung Seprtion jeweils zusmmengehöriger Dten und Funktionen in übergeordnete Einheiten Module Lebensduer so kurz wie möglich Speicherpltz spren Insbesondere wichtig uf µ-controller-plttformen 17 3 sendbuf[] bud init curdev lsttemp lstwind min() 12-Module: Konsequenz: Globle Vriblen vermeiden! Globle Vriblen sind überll sichtbr Regel: Globle Vriblen belegen Speicher über die gesmte Progrmmlufzeit Vriblen erhlten stets die geringstmögliche Sichtbrkeit und Lebensduer 12-Module: RS232Init() RS232Send() RS232.c I2CRec() I2CStrt() I2C.c SendToPC() GetTemp() wether.c c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.3 Globle Vriblen 12 6 c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.4 Modulrisierung 12 7 Ws ist ein Modul? Module in C [ Jv] 12-Module: Modul := (<Menge von Funktionen>, <Menge von Dten>, <Schnittstelle>) ( clss in Jv) Module sind größere Progrmmbusteine 9 1 Problemorientierte Zusmmenfssung von Funktionen und Dten Trennung der Belnge Ermöglichen die einfche Wiederverwendung von Komponenten Ermöglichen den einfchen Austusch von Komponenten Verbergen Implementierungsdetils (Blck-Box-Prinzip) Zugriff erfolgt usschließlich über die Modulschnittstelle Modul Abstrktion 4 1 Die Schnittstelle eines Moduls bstrhiert Von der ttsächlichen Implementierung der Funktionen Von der internen Drstellung und Verwendung von Dten 12-Module: In C ist ds Modulkonzept nicht Bestndteil der Sprche, 3 13 sondern rein idiomtisch (über Konventionen) relisiert Modulschnittstelle.h-Dtei (enthält Deklrtionen 9 7 ) Modulimplementierung.c-Dtei (enthält Definitionen 9 3 ) Modulverwendung #include <Modul.h> void RS232Init( uint16_t br ); RS232.h: Schnittstelle / Vertrg (öffentl.) void RS232Send( chr ch ); Deklrtion der bereitgestellten Funktionen (und ggf. Dten) #include <RS232.h> RS232.c: Implementierung (nicht öffentl.) sttic uint16_t bud = 2400; Definition der bereitgestellten sttic chr sendbuf[16]; Funktionen (und ggf. Dten) void RS232Init( uint16_t br) { Ggf. modulinterne Hilfsfunktionen und Dten (sttic) bud = br; void RS232Send( chr ch ) { sendbuf[] = ch; Inklusion der eigenen Schnittstelle stellt sicher, dss der Vertrg eingehlten wird c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.4 Modulrisierung 12 8 c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C 12 9

4 Module in C Export [ Jv] Module in C Import [ Jv] Ein C-Modul exportiert eine Menge von definierten Symbolen Alle Funktionen und globlen Vriblen ( public in Jv) Export knn mit sttic unterbunden werden ( privte in Jv) ( Einschränkung der Sichtbrkeit 12 5 ) Export erfolgt beim Übersetzungsvorgng (.c-dtei.o-dtei) Ein C-Modul importiert eine Menge nicht-definierter Symbole Funktionen und globle Vriblen, die verwendet werden, im Modul selber jedoch nicht definiert sind Werden beim Übersetzen ls unufgelöst mrkiert Quelldtei (br.c) Objektdtei (br.o) 12-Module: Quelldtei (foo.c) int ; sttic int b; void f(void) { sttic void g(int) { foo.c Compiler foo.o // public // privte // public // privte Objektdtei (foo.o), f Symbole und f werden exportiert. Symbole b und g sind sttic definiert und werden deshlb nicht exportiert. 12-Module: extern int ; void f(void); = 0x4711; f(); // declre // declre // public // use // use Symbol min wird exportiert. Symbole und f sind unufgelöst. c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C Module in C Import (Forts.) [ Jv] Module in C Heder [ Jv] Die eigentliche Auflösung erfolgt durch den Linker [ GDI, VI-158] foo.c br.c Compiler foo.o br.o, f min, f Linker min,, f br Elemente us fremden Modulen müssen deklriert werden Funktionen durch normle Deklrtion 9 7 void f(void); Globle Vriblen durch extern extern int ; Ds extern unterscheidet eine Vriblendeklrtion von einer Vriblendefinition. 12-Module: Linken ist nicht typsicher! Typinformtionen sind in Objektdteien nicht mehr vorhnden Auflösung durch den Linker erfolgt usschließlich über die Symbolnmen (Bezeichner) Typsicherheit muss beim Übersetzen sichergestellt werden Einheitliche Deklrtionen durch gemeinsme Heder-Dtei 12-Module: Die Deklrtionen erfolgen sinnvollerweise in einer Heder-Dtei, die von der Modulentwicklerin bereitgestellt wird Schnittstelle des Moduls ( interfce in Jv) Exportierte Funktionen des Moduls Exportierte globle Vriblen des Moduls Modulspezifische Konstnten, Typen, Mkros Verwendung durch Inklusion ( import in Jv) Wird uch vom Modul inkludiert, um Übereinstimmung von Deklrtionen und Definitionen sicher zu stellen ( implements in Jv) c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C 12 13

5 Module in C Heder (Forts.) [ Jv] Zurück zum Beispiel: Wettersttion Modulschnittstelle: foo.h // foo.h #ifndef _FOO_H #define _FOO_H // declrtions extern int ; void f(void); #endif // _FOO_H Modulimplementierung foo.c // foo.c #include <foo.h> // definitions int ; void f(void){ Modulverwendung br.c (vergleiche ) RS232.h I2C.h RS232.c I2C.c wether.c io.h.h r r Quellmodule Objektmodule ELF-Binry gcc (Compiler) RS232.o I2C.o wether.o ld (Linker) io.o.o.o.o.o.o vr-libc.lib wether 12-Module: // br.c extern int ; void f(void); #include <foo.h> = 0x4711; f(); 12-Module: Jedes Modul besteht us Heder- und Implementierungsdtei(en).h-Dtei definiert die Schnittstelle.c-Dtei implementiert die Schnittstelle, inkludiert.h-dtei, um sicherzustellen, dss Deklrtion und Definition übereinstimmen Modulverwendung durch Inkludieren der modulspezifischen.h-dtei Ds Gnze funktioniert entsprechend bei Bibliotheken c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C Überblick: Teil C Systemnhe Softwreentwicklung c dl GSPiC (Teil C, WS 11) 12 Progrmmstruktur und Module 12.5 Module in C Einordnung: Zeiger (Pointer) Literl: Drstellung eines Wertes Progrmmstruktur und Module 13 Zeiger und Felder 14 µc-systemrchitektur Vrible: chr ; Behälter für einen Wert V_GSPIC_hndout 15 Nebenläufigkeit 16 Speicherorgnistion 17 Zusmmenfssung Zeiger-Vrible: chr *p = &; Behälter für eine Referenz uf eine Vrible ein p c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1

6 Zeiger (Pointer) Definition von Zeigervriblen Eine Zeigervrible (Pointer) enthält ls Wert die Adresse einer nderen Vriblen Ein Zeiger verweist uf eine Vrible (im Speicher) Über die Adresse knn mn indirekt uf die Zielvrible (ihren Speicher) zugreifen Drus resultiert die große Bedeutung von Zeigern in C Funktionen können Vriblen des Aufrufers verändern 9 5 (cll-by-reference) Speicher lässt sich direkt nsprechen Effizienz durch Effizientere Progrmme Mschinennähe 3 14 Zeigervrible := Behälter für Verweise ( Adresse) Syntx (Definition): Typ * Bezeichner ; Beispiel int x = 5; x 5 int *ip; ip ➊ int y; ip = &x; ➊ y 5 ➋ Aber uch viele Probleme! Progrmmstruktur wird unübersichtlicher (welche Funktion knn uf welche Vriblen zugreifen?) Zeiger sind die häufigste Fehlerquelle in C-Progrmmen! y = *ip; ➋ c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 2 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.2 Zeiger Definition 13 3 Adress- und Verweisopertoren Zeiger ls Funktionsrgumente Adressopertor: & x Der unäre &-Opertor liefert die Referenz ( Adresse im Speicher) der Vriblen x. Verweisopertor: * y Der unäre * -Opertor liefert die Zielvrible ( Speicherzelle / Behälter), uf die der Zeiger y verweist (Dereferenzierung). Prmeter werden in C immer by-vlue übergeben 9 5 Prmeterwerte werden in lokle Vriblen der ufgerufenen Funktion kopiert Aufgerufene Funktion knn ttsächliche Prmeter des Aufrufers nicht ändern Es gilt: (* (& x)) x Der Verweisopertor ist die Umkehropertion des Adressopertors. Achtung: Verwirrungsgefhr (*** Ich seh überll Sterne ***) Ds * -Symbol ht in C verschiedene Bedeutungen, je nch Kontext 1. Multipliktion (binär): x * y in Ausdrücken 2. Typmodifizierer: uint8_t *p1, *p2 typedef chr* CPTR in Definitionen und Deklrtionen 3. Verweis (unär): x = *p1 in Ausdrücken Insbesondere 2. und 3. führen zu Verwirrung * wird fälschlicherweise für ein Bestndteil des Bezeichners gehlten. Ds gilt uch für Zeiger (Verweise) Aufgerufene Funktion erhält eine Kopie des Adressverweises [ GDI, II-89] Mit Hilfe des *-Opertors knn drüber jedoch uf die Zielvrible zugegriffen werden und diese verändert werden Cll-by-reference c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.2 Zeiger Definition 13 4 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 5

7 Zeiger ls Funktionsrgumente (Forts.) Beispiel (Gesmtüberblick) Zeiger ls Funktionsrgumente (Forts.) Beispiel (Einzelschritte) void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); ➊ void swp (int *px, int *py) { int tmp; tmp = *px; ➋ *px = *py; ➌ *py = tmp; ➍ b px py tmp ➊ ➌ ➍ ➋ void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); ➊ void swp (int *px, int *py) { int tmp; 47 b 11 px py tmp ➊ c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6 Zeiger ls Funktionsrgumente (Forts.) Beispiel (Einzelschritte) Zeiger ls Funktionsrgumente (Forts.) Beispiel (Einzelschritte) void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); 47 b 11 void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); 47 b 11 void swp (int *px, int *py) { int tmp; px py tmp void swp (int *px, int *py) { int tmp; tmp = *px; ➋ *px px py tmp c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6

8 Zeiger ls Funktionsrgumente (Forts.) Beispiel (Einzelschritte) Zeiger ls Funktionsrgumente (Forts.) Beispiel (Einzelschritte) void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); 47 b 11 void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); 11 b 11 void swp (int *px, int *py) { int tmp; tmp = *px; ➋ *px = *py; ➌ *px px *py py tmp 47 void swp (int *px, int *py) { int tmp; tmp = *px; ➋ *px = *py; ➌ px py ➌ tmp 47 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6 Zeiger ls Funktionsrgumente (Forts.) Einordnung: Felder (Arrys) [ Jv] Beispiel (Einzelschritte) Feldvrible := Behälter für eine Reihe von Werten desselben Typs void swp (int *, int *); int min() { int =47, b=11; swp(&, &b); 11 b 47 Syntx (Definition): Typ Bezeichner [ IntAusdruck ] ; Typ Typ der Werte [=Jv] Bezeichner Nme der Feldvriblen [=Jv] void swp (int *px, int *py) { int tmp; tmp = *px; ➋ *px = *py; ➌ *py = tmp; ➍ px py ➍ tmp 47 IntAusdruck Beispiele: sttic uint8_t LEDs[ 8*2 ]; void f( int n ) { uto chr [ NUM_LEDS * 2]; uto chr b[ n ]; Konstnter Gnzzhl-Ausdruck, definiert die Feldgröße ( Anzhl der Elemente). Ab C99 drf IntAusdruck bei uto-feldern uch vribel (d. h. beliebig, ber fest) sein. // constnt, fixed rry size [ Jv] // constnt, fixed rry size // C99: vrible, fixed rry size c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.3 Zeiger und Funktionen 13 6 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.4 Felder Einführung 13 7

9 Feldinitilisierung Wie ndere Vriblen uch, knn ein Feld bei Definition eine initile Wertzuweisung erhlten uint8_t LEDs[4] = { RED0, YELLOW0, GREEN0, BLUE0 ; int prim[5] = { 1, 2, 3, 5, 7 ; Werden zu wenig Initilisierungselemente ngegeben, so werden die restlichen Elemente mit 0 initilisiert uint8_t LEDs[4] = { RED0 ; // => { RED0, 0, 0, 0 int prim[5] = { 1, 2, 3 ; // => { 1, 2, 3, 0, 0 Feldzugriff Syntx: Feld [ IntAusdruck ] Wobei 0 IntAusdruck < n für n = Feldgröße Achtung: Feldindex wird nicht überprüft häufige Fehlerquelle in C-Progrmmen Beispiel uint8_t LEDs[] = { RED0, YELLOW0, GREEN0, BLUE0 ; LEDs[ 3 ] = BLUE1; [=Jv] [ Jv] Wird die explizite Dimensionierung usgelssen, so bestimmt die Anzhl der Initilisierungselemente die Feldgröße for( unit8_t i = 0; i < 4; ++i ) { sb_led_on( LEDs[ i ] ); uint8_t LEDs[] = { RED0, YELLOW0, GREEN0, BLUE0 ; int prim[] = { 1, 2, 3, 5, 7 ; LEDs[ 4 ] = GREEN1; // UNDEFINED!!! c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.4 Felder Einführung 13 8 c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.4 Felder Einführung 13 9 Felder sind Zeiger Felder sind Zeiger Ein Feldbezeichner ist syntktisch äquivlent zu einem konstnten Zeiger uf ds erste Element des Feldes: rry &rry[0] Ein Alis kein Behälter Wert knn nicht verändert werden Über einen so ermittelten Zeiger ist ein indirekter Feldzugriff möglich Ein Feldbezeichner ist syntktisch äquivlent zu einem konstnten Zeiger uf ds erste Element des Feldes: rry &rry[0] Ein Alis kein Behälter Wert knn nicht verändert werden Über einen so ermittelten Zeiger ist ein indirekter Feldzugriff möglich Beispiel (Gesmtüberblick) Beispiel (Einzelschritte) int rry[5]; rry int rry[5]; rry int *ip = rry; ➊ int *ep; ep = &rry[0]; ➋ ➊ ➋ 1 ➍ int *ip = rry; ➊ int *ep; ep = &rry[0]; ➋ ep = &rry[2]; ➌ *ep = 1; ➍ ip ep ➊ ➋ ➌ ➌ ep = &rry[2]; ➌ ip ep ➌ c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.5 Syntktische Äquivlenz c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.5 Syntktische Äquivlenz 13 10

10 Felder sind Zeiger Ein Feldbezeichner ist syntktisch äquivlent zu einem konstnten Zeiger uf ds erste Element des Feldes: rry &rry[0] Ein Alis kein Behälter Wert knn nicht verändert werden Über einen so ermittelten Zeiger ist ein indirekter Feldzugriff möglich Beispiel (Einzelschritte) int rry[5]; int *ip = rry; ➊ rry Zeiger sind Felder Ein Feldbezeichner ist syntktisch äquivlent zu einem konstnten Zeiger uf ds erste Element des Feldes: rry &rry[0] Diese Beziehung gilt in beide Richtungen: *rry rry[0] Ein Zeiger knn wie ein Feld verwendet werden Insbesondere knn der [ ] - Opertor ngewndt werden 13 9 Beispiel (vgl ) uint8_t LEDs[] = { RED0, YELLOW0, GREEN0, BLUE0 ; int *ep; ep = &rry[0]; ➋ ep = &rry[2]; ➌ *ep = 1; ➍ ip ep *ep ➌ LEDs[ 3 ] = BLUE1; uint8_t *p = LEDs; for( unit8_t i = 0; i < 4; ++i ) { sb_led_on( p[ i ] ); c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.5 Syntktische Äquivlenz c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.5 Syntktische Äquivlenz Rechnen mit Zeigern Zeigerrithmetik Opertionen Im Unterschied zu einem Feldbezeichner ist eine Zeigervrible ein Behälter Ihr Wert ist veränderbr Neben einfchen Zuweisungen ist dbei uch Arithmetik möglich int rry[3]; int *ip = rry; ➊ ip++; ➋ ip++; ➌ rry ip ➊ ➊ ➋ ➌ Arithmetische Opertionen ++ Prä-/Postinkrement Verschieben uf ds nächste Objekt Prä-/Postdekrement Verschieben uf ds vorngegngene Objekt +, Addition / Subtrktion eines int-wertes Ergebniszeiger ist verschoben um n Objekte Subtrktion zweier Zeiger Anzhl der Objekte n zwischen beiden Zeigern (Distnz) int rry[5]; ip = rry; ➊ ip ➊ (ip+3) &ip[3] Bei der Zeigerrithmetik wird immer die Größe des Objekttyps mit berücksichtigt. Vergleichsopertionen: <, <=, ==, >=, >,! = 7 3 Zeiger lssen sich wie Gnzzhlen vergleichen und ordnen c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.6 Zeigerrithmetik c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.6 Zeigerrithmetik 13 13

11 Felder sind Zeiger sind Felder Zusmmenfssung Felder ls Funktionsprmeter In Kombintion mit Zeigerrithmetik lässt sich in C jede Feldopertion uf eine äquivlente Zeigeropertion bbilden. Felder werden in C immer ls Zeiger übergeben Cll-by-reference [=Jv] Für int i, rry[n], *ip = rry; mit 0 i < N gilt: rry &rry[0] ip &ip[0] *rry rry[0] * ip ip[0] *(rry + i) rry[i] * (ip + i) ip[i] rry++ ip++ Fehler: rry ist konstnt! Umgekehrt können Zeigeropertionen uch durch Feldopertionen drgestellt werden. Der Feldbezeichner knn ber nicht verändert werden. sttic uint8_t LEDs[] = {RED0, YELLOW1; void enlight( uint8_t *rry, unsigned n ) { for( unsigned i = 0; i < n; ++i ) sb_led_on( rry[i] ); enlight( LEDs, 2 ); uint8_t moreleds[] = {YELLOW0, BLUE0, BLUE1; enlight( moreleds, 3); R 0 Y 0 G 0 B 0 R 1 Y 1 G 1 B 1 Informtionen über die Feldgröße gehen dbei verloren! Die Feldgröße muss explizit ls Prmeter mit übergeben werden In mnchen Fällen knn sie uch in der Funktion berechnet werden (z. B. bei Strings durch Suche nch dem bschließenden NUL-Zeichen) c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.6 Zeigerrithmetik c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.7 Felder ls Funktionsprmeter Felder ls Funktionsprmeter (Forts.) Felder ls Funktionsprmeter (Forts.) Felder werden in C immer ls Zeiger übergeben Cll-by-reference Wird der Prmeter ls const deklriert, so knn die Funktion die Feldelemente nicht verändern Guter Stil! void enlight( const uint8_t *rry, unsigned n ) { Um nzuzeigen, dss ein Feld (und kein Zeiger uf Vrible ) erwrtet wird, ist uch folgende äquivlente Syntx möglich: void enlight( const uint8_t rry[], unsigned n ) { [=Jv] [ Jv] Achtung: Ds gilt so nur bei Deklrtion eines Funktionprmeters Bei Vriblendefinitionen ht rry[] eine völlig ndere Bedeutung (Feldgröße us Initilisierungsliste ermitteln, 13 8 ) Die Funktion int strlen(const chr *) us der Stndrdbibliothek liefert die Anzhl der Zeichen im übergebenen String const chr *string = "hllo"; // string is rry of chr sb_7seg_shownumber( strlen(string) ); Dbei gilt: Implementierungsvrinten Vrinte 1: Feld-Syntx int strlen( const chr s[] ) { int n=0; while( s[n]!= 0 ) n++; urn n; "hllo" h l l o \ Vrinte 2: Zeiger-Syntx int strlen( const chr *s ) { const chr *end = s; while( *end ) end++; urn end - s; c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.7 Felder ls Funktionsprmeter c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.7 Felder ls Funktionsprmeter 13 17

12 Zeiger uf Zeiger Zeiger uf Funktionen Ein Zeiger knn uch uf eine Zeigervrible verweisen int x = 5; int *ip = &x; int **ipp = &ip; /* ** ipp = 5 */ x 5 ip ipp Wird vor llem bei der Prmeterübergbe n Funktionen benötigt Zeigerprmeter cll-by-reference übergeben (z. B. swp()-funktion für Zeiger) Ein Feld von Zeigern übergeben Ein Zeiger knn uch uf eine Funktion verweisen Dmit lssen sich Funktionen n Funktionen übergeben Funktionen höherer Ordnung Beispiel // invokes job() every second void doperiodiclly( void (*job)(void) ) { while( 1 ) { job(); // invoke job for( voltile uint16_t i = 0; i < 0xffff; ++i ) ; // wit second void blink( void ) { sb_led_toggle( RED0 ); doperiodiclly( blink ); // pss blink() s prmeter c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.8 Erweiterte Zeigertypen c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.8 Erweiterte Zeigertypen Zeiger uf Funktionen (Forts.) Zeiger uf Funktionen (Forts.) Syntx (Definition): Typ ( * Bezeichner )( FormlePrm opt ); (sehr ähnlich zur Syntx von Funktionsdeklrtionen) 9 3 Typ Bezeichner Rückgbetyp der Funktionen, uf die dieser Zeiger verweisen knn Nme des Funktionszeigers FormlePrm opt Formle Prmeter der Funktionen, uf die dieser Zeiger verweisen knn: Typ 1,..., Typ n Ein Funktionszeiger wird genu wie eine Funktion verwendet Aufruf mit Bezeichner ( TtPrm ) 9 4 Adress- (&) und Verweisopertor (*) werden nicht benötigt 13 4 Ein Funktionsbezeichner ist ein konstnter Funktionszeiger void blink( uint8_t which ) { sb_led_toggle( which ); void (*myfun)(uint8_t); // myfun is pointer to function myfun = blink; // blink is constnt pointer to function myfun( RED0 ); // invoke blink() vi function pointer blink( RED0 ); // invoke blink() Funktionszeiger werden oft für Rückruffunktionen (Cllbcks) zur Zustellung synchroner Ereignisse verwendet ( Listener in Jv) // Exmple: synchronous button events with libspicbord #include <vr/interrupt.h> // for sei() #include <7seg.h> // for sb_7seg_shownumber() #include <button.h> // for button stuff // cllbck hndler for button events (invoked on interrupt level) void onbutton( BUTTON b, BUTTONEVENT e ) { sttic int8_t count = 1; sb_7seg_shownumber( count++ ); // show no of button presses if( count > 99 ) count = 1; // reset t 100 sb_button_registerlistener( // register cllbck BUTTON0, BTNPRESSED, // for this button nd events onbutton // invoke this function ); sei(); // enble interrupts (necessry!) while( 1 ) ; // wit forever c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.8 Erweiterte Zeigertypen c dl GSPiC (Teil C, WS 11) 13 Zeiger und Felder 13.8 Erweiterte Zeigertypen 13 21

13 PROGRAMMING LOGIC Überblick: Teil C Systemnhe Softwreentwicklung Ws ist ein µ-controller? 12 Progrmmstruktur und Module 13 Zeiger und Felder 14 µc-systemrchitektur 15 Nebenläufigkeit µ-controller := Prozessor + Speicher + Peripherie Fktisch ein Ein-Chip-Computersystem SoC (System-on--Chip) Häufig verwendbr ohne zusätzliche externe Busteine, wie z. B. Tktgenertoren und Speicher kostengünstiges Systemdesign Wesentliches Merkml ist die (reichlich) enthltene Peripherie Timer/Counter (Zeiten/Ereignisse messen und zählen) Ports (digitle Ein-/Ausgbe), A/D-Wndler (nloge Eingbe) PWM-Genertoren (pseudo-nloge Ausgbe) Bus-Systeme: SPI, RS-232, CAN, Ethernet, MLI, I 2 C, V_GSPIC_hndout 16 Speicherorgnistion 17 Zusmmenfssung Die Abgrenzungen sind fließend: Prozessor µc SoC AMD64-CPUs hben ebenflls eingebute Timer, Speicher (Cches),... Einige µc erreichen die Geschwindigkeit großer Prozessoren c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.1 Überblick 14 1 Beispiel ATmeg32: Blockschltbild Beispiel ATmeg-Fmilie: CPU-Architektur VCC PA0 - PA7 PC0 - PC7 CPU-Kern Speicher GND AVCC AREF PORTA DRIVERS/BUFFERS PORTA DIGITAL INTERFACE MUX & ADC PROGRAM COUNTER PROGRAM FLASH INSTRUCTION REGISTER INSTRUCTION DECODER CONTROL LINES AVR CPU ADC INTERFACE STACK POINTER SRAM GENERAL PURPOSE REGISTERS X Y Z ALU STATUS REGISTER SPI PORTC DRIVERS/BUFFERS PORTC DIGITAL INTERFACE TWI TIMERS/ OSCILLATOR COUNTERS INTERNAL OSCILLATOR WATCHDOG OSCILLATOR TIMER MCU CTRL. & TIMING INTERNAL INTERRUPT CALIBRATED UNIT OSCILLATOR EEPROM USART XTAL1 XTAL2 Peripherie 0x0000 0x0046 0x1FFFF min: wit: IRQ-Vektoren Anwendungs- Code Boot-Code Progrmmdressrum (Flsh) KiB, 2-Byte-Elemente 16 Recheneinheit 16 Dtenbus Adressbus 32 Register 64 IO-Register bis zu 160 Ext. IO-Register bis zu 4KiB internes SRAM bis zu knpp 60 KiB externes SRAM 0x0000 0x0020 0x0060 0x0100 0x1100 0xFFFF Dtendressrum (SRAM) 0 64 KiB, 1-Byte-Elemente Hrvrd-Architektur (getrennter Speicher für Code und Dten) COMP. - INTERFACE PORTB DIGITAL INTERFACE PORTB DRIVERS/BUFFERS PORTD DIGITAL INTERFACE PORTD DRIVERS/BUFFERS Peripherie-Register sind in den Speicher eingeblendet nsprechbr wie globle Vriblen Zum Vergleich: PC bsiert uf von-neumnn-architektur [ GDI, VI-6] mit gemeinsmem Speicher; I/O-Register verwenden einen speziellen I/O-Adressrum. PB0 - PB7 PD0 - PD7 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 3

14 Wie rbeitet ein Prozessor? Wie rbeitet ein Prozessor? Zero bit Progrmmspeicher Zero bit Progrmmspeicher PC = 0x0000 Vcc Z SR SR` µc PC PC` R1 R1` Bus min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 Vcc Z SR SR` µc PC PC` R1 R1` Bus min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 w = *PC++ decode(w) Hier m Beispiel eines sehr einfchen Pseudoprozessors Nur zwei Vielzweckregister (R1 und R2) Progrmmzähler (PC) und Sttusregister (SR) (+ Schttenkopien ) Kein Dtenspeicher, kein Stpel Progrmm rbeitet nur uf Registern execute(w) c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4 Wie rbeitet ein Prozessor? Wie rbeitet ein Prozessor? Zero bit Progrmmspeicher PC = 0x0000 Zero bit Progrmmspeicher PC = 0x0000 Vcc Z SR SR` µc PC PC` R1 R1` Bus min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 w = *PC++ Vcc Z SR SR` µc PC PC` 48 R1 R1` Bus min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 w = *PC++ decode(w) decode(w) execute(w) execute(w) c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4

15 Wie rbeitet ein Prozessor? Wie rbeitet ein Prozessor? Zero bit Progrmmspeicher PC = 0x0000 Zero bit Progrmmspeicher PC = 0x0000 Z 0 SR PC Vcc SR` µc PC` 47 R1 R1` Bus min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 w = *PC++ Z 0 SR PC Vcc SR` µc PC` 47 R1 R1` Bus min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 w = *PC++ decode(w) decode(w) w: dec <R> R = 1 if( R == 0) Z = 1 else Z = 0 w: beq <lb> if (Z) PC = lb w: cll <func> PC` = PC PC = func execute(w) w: dec <R> R = 1 if( R == 0) Z = 1 else Z = 0 w: beq <lb> if (Z) PC = lb w: cll <func> PC` = PC PC = func execute(w) c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4 Wie rbeitet ein Prozessor? c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4 Peripheriegeräte Zero bit Z 0 SR PC Vcc SR` µc PC` 58 R1 R1` Bus Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 PC = 0x0000 w = *PC++ decode(w) Peripheriegerät: Hrdwrekomponente, die sich ußerhlb der Zentrleinheit eines Computers befindet Trditionell (PC): Tsttur, Bildschirm,... ( physisch ußerhlb ) Allgemeiner: Hrdwrefunktionen, die nicht direkt im Befehlsstz des Prozessors bgebildet sind ( logisch ußerhlb ) Peripheriebusteine werden über I/O-Register ngesprochen Kontrollregister: Befehle n / Zustnd der Peripherie wird durch Bitmuster kodiert (z. B. DDRD beim ATmeg) w: dec <R> R = 1 if( R == 0) Z = 1 else Z = 0 w: beq <lb> if (Z) PC = lb w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` Dtenregister: Dienen dem eigentlichen Dtenustusch (z. B. PORTD, PIND beim ATmeg) Register sind häufig für entweder nur Lesezugriffe (red-only) oder nur Schreibzugriffe (write-only) zugelssen c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.2 Architektur 14 4 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.3 Peripherie 14 5

16 Peripheriegeräte: Beispiele Peripheriegeräte Register Auswhl von typischen Peripheriegeräten in einem µ-controller Timer/Counter Wtchdog-Timer (A)synchrone serielle Schnittstelle A/D-Wndler PWM-Genertoren Ports Zählregister, die mit konfigurierbrer Frequenz (Timer) oder durch externe Signle (Counter) erhöht werden und bei konfigurierbrem Zählwert einen Interrupt uslösen. Timer, der regelmäßig neu beschrieben werden muss oder sonst einen uslöst ( Totmnnknopf ). Busteine zur seriellen (bitweisen) Übertrgung von Dten mit synchronem (z. B. RS-232) oder synchronem (z. B. I 2 C) Protokoll. Busteine zur momentweisen oder kontinuierlichen Diskisierung von Spnnungswerten (z. B. 0 5V 10-Bit- Zhl). Busteine zur Generierung von pulsweiten-modulierten Signlen (pseude-nloge Ausgbe). Gruppen von üblicherweise 8 Anschlüssen, die uf GND oder Vcc gesetzt werden können oder deren Zustnd bgefrgt werden knn Es gibt verschiedene Architekturen für den Zugriff uf I/O-Register Memory-mpped: Register sind in den Adressrum eingeblendet; (Die meisten µc) der Zugriff erfolgt über die Speicherbefehle des Prozessors (lod, store) Port-bsiert: (x86-bsierte PCs) Register sind in einem eigenen I/O-Adressrum orgnisiert; der Zugriff erfolgt über spezielle inund out-befehle Die Registerdressen stehen in der Hrdwre-Dokumenttion!""#$%% &'($ )*+,- )*+,. )*+,/ )*+,0 )*+,1 )*+,2 )*+,3 )*+,4 5'6$!"#$%!&#' ()*+, -. ( / !"*$%!&*' ( (466 (467 (48 (43 66!"9$%!&9' (4: (4; (4< (4& (4= (4" (4> (46 (47 66!"2$%!&2'?2)7 -@ABCD2EFGHBC7$?FHIFH$2EAIJCB$)BK@LHBC 3<!6>$%!">' 4?)-9 4?)-9; 4?)-9< 4?)-9& 4?)-9= 4?)-9" 4?)-9> 4?)-96 4?)-97 <;!66$%!"6' 99)9 999; 999< 999& 999= 999" 999> <;!67$%!"7' 4,09 4,09; 4,09< 4,09& 4,09= 4,09" 4,09> 4,096 4,097 <3 [1, S. 334] c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.3 Peripherie 14 6 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.3 Peripherie 14 7 Peripheriegeräte Register (Forts.) Registerzugriff und Nebenläufigkeit Memory-mpped Register ermöglichen einen komfortblen Zugriff Register Speicher Vrible Alle C-Opertoren stehen direkt zur Verfügung (z. B. PORTD++) Syntktisch wird der Zugriff oft durch Mkros erleichtert: Peripheriegeräte rbeiten nebenläufig zur Softwre Wert in einem Hrdwreregister knn sich jederzeit ändern Dies widerspricht einer Annhme des Compilers Vriblenzugriffe erfolgen nur durch die ktuell usgeführte Funktion Vriblen können in Registern zwischengespeichert werden #define PORTD ( * (voltile uint8_t*)( 0x12 {{ Beispiel Adresse: int {{ Adresse: voltile uint8_t* (Cst 7 17 ) {{ Wert: voltile uint8_t (Dereferenzierung 13 4 ) #define PORTD (*(voltile uint8_t*)(0x12)) PORTD = (1<<7); // set D.7 uint8_t *preg = &PORTD; // get pointer to PORTD *preg &= ~(1<<7); // use pointer to cler D.7 ) ) PORTD ist dmit (syntktisch) äquivlent zu einer voltile uint8_t- Vriblen, die n Adresse 0x12 liegt // C code #define PIND (*(uint8_t*)(0x10)) void foo(void) { if(!(pind & 0x2) ) { // button0 pressed if(!(pind & 0x4) ) { // button 1 pressed // Resulting ssembly code foo: lds r24, 0x0010 // PIND->r24 sbrc r24, 1 // test bit 1 rjmp L1 // button0 pressed L1: sbrc r24, 2 // test bit 2 rjmp L2 PIND wird nicht erneut us dem Speicher gelden. Der L2: Compiler nimmt n, dss der Wert in r24 ktuell ist. c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.3 Peripherie 14 8 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.4 Exkurs: voltile 14 9

17 Der voltile-typmodifizierer Lösung: Vrible voltile ( flüchtig, unbeständig ) deklrieren Compiler hält Vrible nur so kurz wie möglich im Register Wert wird unmittelbr vor Verwendung gelesen Wert wird unmittelbr nch Veränderung zurückgeschrieben Der voltile-typmodifizierer (Forts.) Die voltile-semntik verhindert viele Code-Optimierungen (insbesondere ds Entfernen von scheinbr unnützem Code) Knn usgenutzt werden, um ktives Wrten zu implementieren: // C code #define PIND \ (*(voltile uint8_t*)(0x10)) void foo(void) { if(!(pind & 0x2) ) { // button0 pressed if(!(pind & 0x4) ) { // button 1 pressed // Resulting ssembly code foo: lds r24, 0x0010 // PIND->r24 sbrc r24, 1 // test bit 1 rjmp L1 // button0 pressed L1: lds r24, 0x0010 // PIND->r24 sbrc r24, 2 // test bit 2 rjmp L2 L2: PIND ist voltile und wird deshlb vor dem Test erneut us dem Speicher gelden. // C code void wit( void ){ for( uint16_t i = 0; i<0xffff;) i++; voltile! // Resulting ssembly code wit: // compiler hs optimized // "nonsensicl" loop wy Achtung: voltile $$$ Die Verwendung von voltile verurscht erhebliche Kosten Regel: Werte können nicht mehr in Registern gehlten werden Viele Code-Optimierungen können nicht durchgeführt werden voltile wird nur in begründeten Fällen verwendet c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.4 Exkurs: voltile Peripheriegeräte: Ports c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.4 Exkurs: voltile Beispiel ATmeg32: Port/Pin-Belegung Port := Gruppe von (üblicherweise 8) digitlen Ein-/Ausgängen PDIP Digitler Ausgng: Digitler Eingng: Externer Interrupt: (bei Pegelwechsel) Bitwert Spnnungspegel n µc-pin Spnnungspegel n µc-pin Bitwert Spnnungspegel n µc-pin Bitwert Prozessor führt Interruptprogrmm us Die Funktion ist üblicherweise pro Pin konfigurierbr Eingng Ausgng Externer Interrupt Alterntive Funktion (nur bei bestimmten Eingängen) (Pin wird von nderem Gerät verwendet)!"#$%&'())*+'!&,())*+,!-.&/%0-.'())*+/!1#'%0-.,())*+2!33())*+4!513-())*+6!5-31())*+7!3#$())*+8 9:3:& ;## <.= "&0>/ "&0>,!9"=())*='!&"=())*=,!-.&'())*=/!-.&,())*=2!1#,+())*=4!1#,0())*=6!-#*,())*=7 *0'))!0=#'( *0,))!0=#,( *0/))!0=#/( *02))!0=#2( *04))!0=#4( *06))!0=#6( *07))!0=#7( *08))!0=#8( 09:? <.= 0;## *#8))!&13#/( *#7))!&13#,( *#6))!&=-( *#4))!&=1( *#2))!&53( *#/))!&#$( *#,))!3=0( *#'))!3#>( *=8))!1#/( Aus Kostengründen ist nhezu jeder Pin doppelt belegt, die Konfigurtion der gewünschten Funktion erfolgt durch die Softwre. Beim SPiCbord werden z. B. Pins ls ADCs konfiguriert, um Poti und Photosensor nzuschließen. PORTA steht dher nicht zur Verfügung. c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.5 Ports c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.5 Ports 14 13

18 Beispiel ATmeg32: Port-Register Pro Port x sind drei Register definiert (Beispiel für x = D) DDRx Dt Direction Register: Legt für jeden Pin i fest, ob er ls Eingng (Bit i=0) oder ls Ausgng (Bit i=1) verwendet wird DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 R/W R/W R/W R/W R/W R/W R/W R/W Strukturen: Motivtion Jeder Port wird durch drei globle Vriblen verwltet Es wäre besser diese zusmmen zu fssen problembezogene Abstrktionen 4 1 Trennung der Belnge 12 4 Dies geht in C mit Verbundtypen (Strukturen) PORTx Dt Register: Ist Pin i ls Ausgng konfiguriert, so legt Bit i den Pegel fest (0=GND sink, 1=Vcc source). Ist Pin i ls Eingng konfiguriert, so ktiviert Bit i den internen Pull-Up-Widerstnd (1=ktiv) PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 R/W R/W R/W R/W R/W R/W R/W R/W PINx Input Register: Bit i repräsentiert den Pegel n Pin i (1=high, 0=low), unbhängig von der Konfigurtion ls Ein-/Ausgng PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 R R R R R R R R Verwendungsbeispiele: 3 5 und 3 8 [1, S. 66] // Structure declrtion struct Student { chr lstnme[64]; chr firstnme[64]; long mtnum; int pssed; ; // Vrible definition struct Student stud; Ein Strukturtyp fsst eine Menge von Dten zu einem gemeinsmen Typ zusmmen. Die Dtenelemente werden hintereinnder im Speicher bgelegt. stud.lstnme.firstnme.mtnum.pssed???? c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.5 Ports Strukturen: Vriblendefinition und -initilisierung Anlog zu einem Arry knn eine Strukturvrible 13 8 bei Definition elementweise initilisiert werden struct Student { chr lstnme[64]; chr firstnme[64]; long mtnum; int pssed; ; struct Student stud = { "Meier", "Hns", 4711, 0 ; Die Initilisierer werden nur über ihre Reihenfolge, nicht über ihren Bezeichner zugewiesen. Potentielle Fehlerquelle bei Änderungen! Anlog zur Definition von enum-typen knn mn mit 6 8 typedef die Verwendung vereinfchen c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) Strukturen: Elementzugriff porta.pin.ddr.port PINA 0 DDRA 0 PORTA Auf Strukturelemente wird mit dem.-opertor zugegriffen [ Jv] port_t porta = { &PINA, &DDRA, &PORTA ; *porta.port = 0; // cler ll pins *porta.ddr = 0xff; // set ll to input Bechte:. ht eine höhere Priorität ls * typedef struct { voltile uint8_t *pin; voltile uint8_t *ddr; voltile uint8_t *port; port_t; port_t porta = { &PINA, &DDRA, &PORTA ; port_t portd = { &PIND, &DDRD, &PORTD ; c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) 14 17

19 Strukturen: Elementzugriff Strukturen ls Funktionsprmeter pport porta.pin.ddr.port PINA 0 DDRA 0 PORTA Im Gegenstz zu Arrys werden Strukturen by-vlue übergeben void initport( port_t p ){ *p.port = 0; // cler ll pins *p.ddr = 0xff; // set ll to output Bei einem Zeiger uf eine Struktur würde Klmmerung benötigt port_t * pport = &porta; // p --> porta *(*pport).port = 0; // cler ll pins *(*pport).ddr = 0xff; // set ll to output Mit dem ->-Opertor lässt sich dies vereinfchen s->m (*s).m port_t * pport = &porta; // p --> porta *pport->port = 0; // cler ll pins *pport->ddr = 0xff; // set ll to output -> ht ebenflls eine höhere Priorität ls * p.port = &PORTD; // no effect, p is locl vrible void min(){ initport( porta ); Bei größeren Strukturen wird ds sehr ineffizient Z. B. Student ( ): Jedes ml 134 Byte llozieren und kopieren Besser mn übergibt einen Zeiger uf eine konstnte Struktur void initport( const port_t *p ){ *p->port = 0; // cler ll pins *p->ddr = 0xff; // set ll to output // p->port = &PORTD; compile-time error, *p is const! void min(){ initport( &porta ); c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) Bit-Strukturen: Bitfelder Unions Strukturelemente können uf Bit-Grnulrität festgelegt werden Der Compiler fsst Bitfelder zu pssenden Gnzzhltypen zusmmen Nützlich, um uf einzelne Bit-Bereiche eines Registers zuzugreifen Beispiel MCUCR MCU Control Register: Steuert Power-Mngement-Funktionen und Auslöser für externe Interrupt-Quellen INT0 und INT1. [1, S ] SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00 R/W R/W R/W R/W R/W R/W R/W R/W typedef struct { uint8_t ISC0 : 2; // bit 0-1: interrupt sense control INT0 uint8_t ISC1 : 2; // bit 2-3: interrupt sense control INT1 uint8_t SM : 3; // bit 4-6: sleep mode to enter on sleep uint8_t SE : 1; // bit 7 : sleep enble MCUCR_t; In einer Struktur liegen die Elemente hintereinnder im Speicher, in einer Union hingegen übereinnder Wert im Speicher lässt sich verschieden (Typ)-interpieren Nützlich für bitweise Typ-Csts Beispiel void min(){ union { uint16_t uint8_t u; u.vl = 0x4711; vl; bytes[2]; // show high-byte sb_7seg_showhexnumber( u.bytes[1] ); // show low-byte sb_7seg_showhexnumber( u.bytes[0] ); u.vl.bytes 0x4711 0x11 0x47 c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) 14 21

20 Unions und Bit-Strukturen: Anwendungsbeispiel Überblick: Teil C Systemnhe Softwreentwicklung Unions werden oft mit Bit-Feldern kombiniert, um ein Register whlweise im Gnzen oder bitweise nsprechen zu können typedef union { voltile uint8_t reg; // complete register voltile struct { uint8_t ISC0 : 2; // components uint8_t ISC1 : 2; uint8_t SM : 3; uint8_t SE : 1; ; MCUCR_t; 12 Progrmmstruktur und Module 13 Zeiger und Felder 14 µc-systemrchitektur void foo( void ) { MCUCR_t *mcucr = (MCUCR_t *) (0x35); uint8_t oldvl = mcucr->reg; // sve register mcucr->isc0 = 2; // use register mcucr->se = 1; // mcucr->reg = oldvl; // restore register V_GSPIC_hndout 15 Nebenläufigkeit 16 Speicherorgnistion 17 Zusmmenfssung c dl GSPiC (Teil C, WS 11) 14 µc-systemrchitektur 14.6 Exkurs: Verbundtypen (struct, union) Ereignisbehndlung Interrupt Funktionsufruf von ußen Bei einem Peripheriegerät tritt ein Ereignis ( ) uf 14 5 Signl n einem Port-Pin wechselt von low uf high Ein Timer ist bgelufen Ein A/D-Wndler ht einen neuen Wert vorliegen... Wie bekommt ds Progrmm ds (nebenläufige) Ereignis mit? min() cll: explizite Aktivierung durch Funktionsufruf foo() foo() interrupt: implizite Aktivierung durch Hrdwresignl Zwei lterntive Verfhren Polling: Interrupt: Ds Progrmm überprüft den Zustnd regelmäßig und ruft ggf. eine Berbeitungsfunktion uf. Gerät meldet sich beim Prozessor, der drufhin in eine Berbeitungsfunktion verzweigt. isr() isr: interrupt service routine t 1 t 2 t 3 t 4 t 5 (z. B. Timer bgelufen) i c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.1 Interrupts: Einführung 15 1 c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.1 Interrupts: Einführung 15 2

21 Polling vs. Interrupts Vor- und Nchteile Interruptsperren Polling ( Periodisches / zeitgesteuertes System ) Ereignisberbeitung erfolgt synchron zum Progrmmbluf Ereigniserkennung über ds Progrmm verstreut (Trennung der Belnge) Hochfrequentes Pollen hohe Prozessorlst hoher Energieverbruch + Implizite Dtenkonsistenz durch festen, sequentiellen Progrmmbluf + Progrmmverhlten gut vorhersgbr Interrupts ( Ereignisgesteuertes System ) Ereignisberbeitung erfolgt synchron zum Progrmmbluf + Ereignisberbeitung knn im Progrmmtext gut sepriert werden + Prozessor wird nur bensprucht, wenn Ereignis ttsächlich eintritt Höhere Komplexität durch Nebenläufigkeit Synchronistion erforderlich Progrmmverhlten schwer vorhersgbr Beide Verfhren bieten spezifische Vor- und Nchteile Auswhl nhnd des konken Anwendungsszenrios Zustellung von Interrupts knn softwreseitig gesperrt werden Wird benötigt zur Synchronistion mit ISRs Einzelne ISR: Bit in gerätespezifischem Steuerregister Alle ISRs: Bit (IE, Interrupt Enble) im Sttusregister der CPU Auflufende IRQs werden (üblicherweise) gepuffert Mximl einer pro Quelle! Bei längeren Sperrzeiten können IRQs verloren gehen! IRQ Interrupt ReQuest Ds IE-Bit wird beeinflusst durch: Prozessor-Befehle: cli: IE 0 (cler interrupt, IRQs gesperrt) sei: IE 1 (set interrupt, IRQs erlubt) Nch einem : IE=0 IRQs sind zu Beginn des Huptprogrmms gesperrt Bei Beten einer ISR: IE=0 IRQs sind während der Interruptberbeitung gesperrt c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.1 Interrupts: Einführung 15 3 c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 4 Interruptsperren: Beispiel Abluf eines Interrupts Überblick IE=1 min() isr() IE=0 sei() cli() sei() Verzögerung t 1 t 2 t 3 t 4 t 5 t 6 (z. B. Timer bgelufen) t 1 Zu Beginn von min() sind IRQs gesperrt (IE=0) t 2, t 3 Mit sei() / cli() werden IRQs freigegeben (IE=1) / erneut gesperrt t 4 ber IE=0 Berbeitung ist unterdrückt, IRQ wird gepuffert t 5 min() gibt IRQs frei (IE=1) gepufferter IRQ schlägt durch t 5 t 6 Während der ISR-Berbeitung sind die IRQs gesperrt (IE=0) Unterbrochenes min() wird fortgesetzt t 6 i ➊ Gerät signlisiert Interrupt Anwendungsprogrmm wird unmittelbr (vor dem nächsten Mschinenbefehl mit IE=1) unterbrochen ➋ Die Zustellung weiterer Interrupts wird gesperrt (IE=0) Zwischenzeitlich uflufende Interrupts werden gepuffert (mximl einer pro Quelle!) ➌ Registerinhlte werden gesichert (z. B. im Dtenspeicher) PC und Sttusregister utomtisch von der Hrdwre Vielzweckregister müssen oft mnuell gesichert werden ➍ Aufzurufende ISR (Interrupt-Hndler) wird ermittelt ➎ ISR wird usgeführt ➏ ISR terminiert mit einem urn from interrupt -Befehl Registerinhlte werden resturiert Zustellung von Interrupts wird freigegeben (IE=1) Ds Anwendungsprogrmm wird fortgesetzt ➀ ➁ ➂➃ Interrupt-Hndler ➅ ➄ c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 5 c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 6

22 Abluf eines Interrupts Detils Abluf eines Interrupts Detils Zero bit IRQ pending bit IRQs enbled bit IP Z IE SR PC Vcc SR` INT µc PC` R1 Bus R1` Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1 Zero bit IRQ pending bit IRQs enbled bit IP Z IE SR PC Vcc SR` INT! µc PC` R1 Bus R1` Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1 Hier ls Erweiterung unseres einfchen Pseudoprozessors 14 4 Nur eine Interruptquelle Sämtliche Register werden von der Hrdwre getet w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1`! Gerät signlisiert Interrupt (ktueller Befehl wird noch fertiggestellt) w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1` c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7 Abluf eines Interrupts Detils c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7 Abluf eines Interrupts Detils Zero bit IRQ pending bit IRQs enbled bit IP Z IE SR PC Vcc SR` INT µc PC` R1 Bus R1` Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1 Zero bit IRQ pending bit IRQs enbled bit IP Z IE 0 0 0! " Vcc INT SR PC SR` µc PC` R1 Bus R1` Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1 (Vor dem nächsten instruction fetch wird der Interruptsttus überprüft) w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1`! Die Zustellung weiterer Interrupts wird verzögert " Registerinhlte werden gesichert w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1` c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7 c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7

23 Abluf eines Interrupts Detils Abluf eines Interrupts Detils Zero bit IRQ pending bit IRQs enbled bit IP Z IE SR PC! Vcc SR` INT µc PC` R1 Bus R1` Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1 Zero bit IRQ pending bit IRQs enbled bit IP Z IE SR PC Vcc SR` INT µc PC` R1 0 Bus R1` Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1! Aufzurufende ISR wird ermittelt w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1`! ISR wird usgeführt w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1` c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7 Abluf eines Interrupts Detils c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7 Pegel- und Flnken-gesteuerte Interrupts IRQ pending bit! Vcc! INT IP Z IE SR SR` Zero bit µc IRQs enbled bit PC PC` R1 R1`! Bus! Progrmmspeicher min: ldi R1, 48 beq L1 cll f sub R1, 58 L1: f: dd R1, 11 isr: ldi R1,1 sts, R1 i 0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x0100 0x0102 0x0200 0x0202 0x0204 0x0206 PC = 0x0000 SR.IE && SR.IP flse w = *PC++ decode(w) true SR.IP = 0 SR` = SR SR.IE = 0 PC` = PC PC = isr R1` = R1 Beispiel: Signl eines idelisierten Tsters (ctive low) Tster drücken Flnkengesteuerter Interrupt loslssen Interrupt wird durch den Pegelwechsel (Flnke) usgelöst Häufig ist konfigurierbr, welche Flnke (steigend/fllend/beide) einen Interrupt uslösen soll V cc GND! ISR terminiert mit i-befehl Registerinhlte werden resturiert Zustellung von Interrupts wird rektiviert Ds Anwendungsprogrmm wird fortgesetzt w: cll <func> PC` = PC PC = func execute(w) w: PC = PC` w: i SR = SR` PC = PC` R1 = R1` Pegelgesteuerter Interrupt Interrupt wird immer wieder usgelöst, so lnge der Pegel nliegt c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 7 c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.2 Interrupts: Steuerung 15 8

24 Interruptsteuerung beim AVR ATmeg Externe Interrupts: Register IRQ-Quellen beim ATmeg32 (IRQ Interrupt ReQuest) 21 IRQ-Quellen [1, S. 45] einzeln de-/ktivierbr IRQ Sprung n Vektor-Adresse Verschltung SPiCbord ( ) INT0 PD2 Button0 (hrdwreseitig entprellt) INT1 PD3 Button1 Tble Vector No. Reset nd Interrupt Vectors Progrm Address (2) Source Interrupt Definition 1 $000 (1) Externl Pin, Power-on Reset, Brown-out Reset, Wtchdog Reset, nd JTAG AVR Reset 2 $002 INT0 Externl Interrupt Request 0 3 $004 INT1 Externl Interrupt Request 1 4 $006 INT2 Externl Interrupt Request 2 5 $008 TIMER2 COMP Timer/Counter2 Compre Mtch 6 $00A TIMER2 OVF Timer/Counter2 Overflow 7 $00C TIMER1 CAPT Timer/Counter1 Cpture Event 8 $00E TIMER1 COMPA Timer/Counter1 Compre Mtch A 9 $010 TIMER1 COMPB Timer/Counter1 Compre Mtch B 10 $012 TIMER1 OVF Timer/Counter1 Overflow 11 $014 TIMER0 COMP Timer/Counter0 Compre Mtch 12 $016 TIMER0 OVF Timer/Counter0 Overflow 13 $018 SPI, STC Seril Trnsfer Complete 14 $01A USART, RXC USART, Rx Complete Steuerregister für INT0 und INT1 GICR Generl Interrupt Control Register: Legt fest, ob die Quellen INTi IRQs uslösen (Bit INTi=1) oder dektiviert sind (Bit INTi=0) [1, S. 71] INT1 INT0 INT2 IVSEL IVCE R/W R/W R/W R R R R/W R/W MCUCR MCU Control Register: Legt für externe Interrupts INT0 und INT1 fest, wodurch ein IRQ usgelöst wird (Flnken-/Pegelsteuerung) [1, S. 69] SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00 R/W R/W R/W R/W R/W R/W R/W R/W Jeweils zwei Interrupt-Sense-Control-Bits (ISCi0 und ISCi1) steuern dbei die Auslöser (Tbelle für INT1, für INT0 gilt entsprechendes): ISC11 ISC10 Description 0 0 The low level of INT1 genertes n interrupt request. 15 $01C USART, UDRE USART Dt Register Empty 16 $01E USART, TXC USART, Tx Complete 17 $020 ADC ADC Conversion Complete 18 $022 EE_RDY EEPROM Redy 19 $024 ANA_COMP Anlog Comprtor 20 $026 TWI Two-wire Seril Interfce 0 1 Any logicl chnge on INT1 genertes n interrupt request. 1 0 The flling edge of INT1 genertes n interrupt request. 1 1 The rising edge of INT1 genertes n interrupt request. 21 $028 SPM_RDY Store Progrm Memory Redy c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.3 Interrupts: Beispiel ATmeg 15 9 c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.3 Interrupts: Beispiel ATmeg Externe Interrupts: Verwendung Externe Interrupts: Verwendung (Forts.) Schritt 1: Instlltion der Interrupt-Service-Routine ISR in Hochsprche Registerinhlte sichern und wiederherstellen Unterstützung durch die vrlibc: Mkro ISR( SOURCE_vect ) (Modul vr/interrupt.h) Schritt 2: Konfigurieren der Interrupt-Steuerung Steuerregister dem Wunsch entsprechend initilisieren Unterstützung durch die vrlibc: Mkros für Bit-Indizes (Modul vr/interrupt.h und vr/io.h) #include <vr/interrupt.h> #include <vr/io.h> ISR( INT1_vect ) { // invoked for every INT1 IRQ sttic uint8_t counter = 0; sb_7seg_shownumber( counter++ ); if( counter == 100 ) counter = 0; // setup DDRD &= ~(1<<PD3); // PD3: input with pull-up PORTD = (1<<PD3); MCUCR &= ~(1<<ISC10 1<<ISC11); // INT1: IRQ on level=low GICR = (1<<INT1); // INT1: enble sei(); // globl IRQ enble Schritt 3: Interrupts globl zulssen Nch Abschluss der Geräteinitilisierung Unterstützung durch die vrlibc: Befehl sei() (Modul vr/interrupt.h) c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.3 Interrupts: Beispiel ATmeg c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.3 Interrupts: Beispiel ATmeg 15 12

25 Externe Interrupts: Verwendung (Forts.) Nebenläufigkeit Schritt 4: Wenn nichts zu tun, den Stromsprmodus beten Die sleep-instruktion hält die CPU n, bis ein IRQ eintrifft In diesem Zustnd wird nur sehr wenig Strom verbrucht Unterstützung durch die vrlibc (Modul vr/sleep.h): sleep_enble() / sleep_disble(): Sleep-Modus erluben / verbieten sleep_cpu(): Sleep-Modus beten #include <vr/sleep.h> sei(); while(1) { sleep_enble(); sleep_cpu(); sleep_disble(); // globl IRQ enble // wit for IRQ Atmel empfiehlt die Verwendung von sleep_enble() und sleep_disble() in dieser Form, um ds Risiko eines versehentliches Beten des Sleep-Zustnds (z. B. durch Progrmmierfehler oder Bit-Kipper in der Hrdwre) zu minimieren. Definition: Nebenläufigkeit Zwei Progrmmusführungen A und B sind nebenläufig (A B), wenn für einzelne Instruktionen us A und b us B nicht feststeht, ob oder b ttsächlich zuerst usgeführt wird (, b oder b, ). Nebenläufigkeit tritt uf durch Interrupts IRQs können ein Progrmm n beliebiger Stelle unterbrechen Echt-prllele Abläufe (durch die Hrdwre) ndere CPU / Peripherie greift jederzeit uf den Speicher zu Qusi-prllele Abläufe (z. B. Fäden in einem Betriebssystem) Betriebssystem knn jederzeit den Prozessor entziehen Problem: Nebenläufige Zugriffe uf gemeinsmen Zustnd c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.3 Interrupts: Beispiel ATmeg c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen Nebenläufigkeitsprobleme Nebenläufigkeitsprobleme (Forts.) Szenrio Eine Lichtschrnke m Prkhuseingng soll Fhrzeuge zählen Alle 60 Sekunden wird der Wert n den Sicherheitsdienst übermittelt sttic voltile uint16_t crs; while(1) { witsec( 60 ); send( crs ); crs = 0; // photo sensor is connected // to INT2 ISR(INT2_vect){ crs++; Wo ist hier ds Problem? Sowohl min() ls uch ISR lesen und schreiben crs Potentielle Lost-Updte -Anomlie Größe der Vrible crs übersteigt die Registerbreite Potentielle Red-Write -Anomlie Wo sind hier die Probleme? Lost-Updte: Sowohl min() ls uch ISR lesen und schreiben crs Red-Write: Größe der Vrible crs übersteigt die Registerbreite Wird oft erst uf der Assemblerebene deutlich send( crs ); crs = 0; min: lds r24,crs lds r25,crs+1 rcll send sts crs+1, zero_reg sts crs, zero_reg // photosensor is connected // to INT2 ISR(INT2_vect){ crs++; INT2_vect: ; sve regs lds r24,crs ; lod crs.lo lds r25,crs+1 ; lod crs.hi diw r24,1 ; dd (16 bit) sts crs+1,r25 ; store crs.hi sts crs,r24 ; store crs.lo ; restore regs c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen 15 16

26 Nebenläufigkeitsprobleme: Lost-Updte -Anomlie Nebenläufigkeitsprobleme: Red-Write -Anomlie min: INT2_vect: ; sve regs lds r24,crs lds r25,crs+1 lds r24,crs lds r25,crs+1 diw rcll send ; restore regs sts crs+1, zero_reg sts crs, zero_reg min: lds r24,crs lds r25,crs+1 rcll send sts crs+1, zero_reg sts crs, zero_reg INT2_vect: ; sve regs lds r24,crs lds r25,crs+1 diw ; restore regs Sei crs=5 und n dieser Stelle tritt der IRQ ( ) uf min ht den Wert von crs (5) bereits in Register gelesen (Register lokle Vrible) INT2_vect wird usgeführt Register werden getet crs wird inkrementiert crs=6 Register werden wiederhergestellt min übergibt den verlteten Wert von crs (5) n send min nullt crs 1 Auto ist verloren gegngen Sei crs=255 und n dieser Stelle tritt der IRQ ( ) uf min ht bereits crs=255 Autos mit send gemeldet min ht bereits ds High-Byte von crs genullt crs=255, crs.lo=255, crs.hi=0 INT2_vect wird usgeführt crs wird gelesen und inkrementiert, Überluf ins High-Byte crs=256, crs.lo=0, crs.hi=1 min nullt ds Low-Byte von crs crs=256, crs.lo=0, crs.hi=1 Beim nächsten send werden 255 Autos zu viel gemeldet c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen Interruptsperren: Dtenflussnomlien verhindern Nebenläufigkeitsprobleme (Forts.) while(1) { witsec( 60 ); cli(); send( crs ); crs = 0; sei(); kritisches Gebiet Wo genu ist ds kritische Gebiet? Lesen von crs und Nullen von crs müssen tomr usgeführt werden Dies knn hier mit Interruptsperren erreicht werden ISR unterbricht min, ber nie umgekehrt symmetrische Synchronistion Achtung: Interruptsperren sollten so kurz wie möglich sein Wie lnge brucht die Funktion send hier? Knn mn send us dem kritischen Gebiet herusziehen? Szenrio, Teil 2 (Funktion witsec()) Eine Lichtschrnke m Prkhuseingng soll Fhrzeuge zählen Alle 60 Sekunden wird der Wert n den Sicherheitsdienst übermittelt void witsec( uint8_t sec ) { // setup timer sleep_enble(); event = 0; while(!event ) { // wit for event sleep_cpu(); // until next irq sleep_disble(); Wo ist hier ds Problem? Test, ob nichts zu tun ist, gefolgt von Schlfen, bis etws zu tun ist Potentielle Lost-Wkeup -Anomlie sttic voltile int8_t event; // TIMER1 ISR // triggers when // witsec() expires ISR(TIMER1_COMPA_vect) { event = 1; c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen 15 20

27 Nebenläufigkeitsprobleme: Lost-Wkeup -Anomlie Lost-Wkeup: Dornröschenschlf verhindern void witsec( uint8_t sec ) { // setup timer sleep_enble(); event = 0; while(!event ) { sleep_cpu(); sleep_disble(); sttic voltile int8_t event; // TIMER1 ISR // triggers when // witsec() expires ISR(TIMER1_COMPA_vect) { event = 1; Angenommen, n dieser Stelle tritt der Timer-IRQ ( ) uf witsec ht bereits festgestellt, dss event nicht gesetzt ist ISR wird usgeführt event wird gesetzt Obwohl event gesetzt ist, wird der Schlfzustnd beten Flls kein weiterer IRQ kommt, Dornröschenschlf 1 void witsec( uint8_t sec ) { 2 // setup timer 3 sleep_enble(); 4 event = 0; 5 cli(); 6 while(!event ) { 7 sei(); kritisches Gebiet 8 sleep_cpu(); 9 cli(); sei(); 12 sleep_disble(); 13 sttic voltile int8_t event; // TIMER1 ISR // triggers when // witsec() expires ISR(TIMER1_COMPA_vect) { event = 1; Wo genu ist ds kritische Gebiet? Test uf Vorbedingung und Beten des Schlfzustnds (Knn mn ds durch Interruptsperren bsichern?) Problem: Vor sleep_cpu() müssen IRQs freigegeben werden! Funktioniert dnk spezieller Hrdwreunterstützung: Befehlssequenz sei, sleep wird von der CPU tomr usgeführt c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen c dl GSPiC (Teil C, WS 11) 15 Nebenläufigkeit 15.4 Nebenläufigkeit und Wettlufsitutionen Überblick: Teil C Systemnhe Softwreentwicklung Speicherorgnistion int ; int b = 1; const int c = 2; // : globl, uninitilized // b: globl, initilized // c: globl, const Wo kommt der Speicher für diese Vriblen her? V_GSPIC_hndout 12 Progrmmstruktur und Module 13 Zeiger und Felder 14 µc-systemrchitektur 15 Nebenläufigkeit 16 Speicherorgnistion 17 Zusmmenfssung 16-Speicher: sttic int s = 3; int x, y; chr* p = mlloc( 100 ); // s: locl, sttic, initilized // x: locl, uto; y: locl, uto // p: locl, uto; *p: hep (100 byte) Sttische Alloktion Reservierung beim Übersetzen / Linken Betrifft globle und modullokle Vriblen, sowie den Code Alloktion durch Pltzierung in einer Sektion.text enthält den Progrmmcode.bss enthält lle uninitilisierten / mit 0 initilisierten Vriblen.dt enthält lle initilisierten Vriblen.rodt enthält lle initilisierten unveränderlichen Vriblen min() b,s c Dynmische Alloktion Reservierung zur Lufzeit Betrifft lokle Vriblen und explizit ngeforderten Speicher Stck enthält lle ktuell gültigen loklen Vriblen x,y,p Hep enthält explizit mit mlloc() ngeforderte Speicherbereiche *p c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.1 Einführung 16 1

28 Speicherorgnistion uf einem µc Speicherorgnistion uf einem µc int ; int b = 1; const int c = 2; // : globl, uninitilized // b: globl, initilized // c: globl, const int ; int b = 1; const int c = 2; // : globl, uninitilized // b: globl, initilized // c: globl, const sttic int s = 3; int x, y; chr* p = mlloc( 100 ); // s: locl, sttic, initilized // x: locl, uto; y: locl, uto // p: locl, uto; *p: hep (100 byte) sttic int s = 3; int x, y; chr* p = mlloc( 100 ); // s: locl, sttic, initilized // x: locl, uto; y: locl, uto // p: locl, uto; *p: hep (100 byte) compile / link Quellprogrmm compile / link Quellprogrmm 16-Speicher: Symbol Tble.dt <> s=3 b=1.rodt c=2.text ELF Heder min ELF-Binry Beim Übersetzen und Linken werden die Progrmmelemente in entsprechenden Sektionen der ELF-Dtei zusmmen gefsst. Informtionen zur Größe der.bss-sektion lnden ebenflls in.rodt. 16-Speicher: Flsh / ROM.dt s=3 b=1.rodt c=2.text min μ-controller flsh Symbol Tble.dt <> s=3 b=1.rodt c=2.text ELF Heder min ELF-Binry Zur Instlltion uf dem µc werden.text und.[ro]dt in den Flsh-Speicher des µc gelden. c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion uf einem µ-controller 16 2 c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion uf einem µ-controller 16 2 Speicherorgnistion uf einem µc Dynmische Speicherlloktion: Hep 16-Speicher: Flsh / ROM RAM init Stck Hep.dt copy.dt.bss =0 s=3 b=1.rodt c=2.text x=? y=? p= *p s=3 b=1 min μ-controller flsh int ; int b = 1; const int c = 2; Symbol Tble.dt <> s=3 b=1.rodt c=2.text compile / link ELF Heder min ELF-Binry // : globl, uninitilized // b: globl, initilized // c: globl, const sttic int s = 3; // s: locl, sttic, initilized int x, y; // x: locl, uto; y: locl, uto chr* p = mlloc( 100 ); // p: locl, uto; *p: hep (100 byte) Quellprogrmm Beim Systemstrt wird ds.bss- Segment im RAM ngelegt und mit 0 initilisiert, ds.dt- Segment wird us dem Flsh ins RAM kopiert. Ds verbleibende RAM wird für den Stck und (flls vorhnden) den Hep verwendet. Verfügt die Architektur über keinen Dten-Flshspeicher (beim ATmeg der Fll 14 3 ), so werden konstnte Vriblen ebenflls in.dt bgelegt (und belegen zur Lufzeit RAM). 16-Speicher: Hep := Vom Progrmm explizit verwlteter RAM-Speicher Lebensduer ist unbhängig von der Progrmmstruktur Anforderung und Wiederfreigbe über zwei Bsisopertionen void* mlloc( size_t n ) fordert einen Speicherblock der Größe n n; Rückgbe bei Fehler: 0-Zeiger (NULL) void free( void* pmem ) Beispiel #include <stdlib.h> int* intarry( uint16_t n ) { // lloc int[n] rry urn (int*) mlloc( n * sizeof int ); gibt einen zuvor mit mlloc() ngeforderten Speicherblock vollständig wieder frei int* rry = intarry(100); // lloc memory for 100 ints if( rry ) { // mlloc() urns NULL on filure // if succeeded, use rry rry[99] = 4711; free( rry ); // free llocted block (** IMPORTANT! **) c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion uf einem µ-controller 16 2 c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.3 Dynmische Speicherlloktion: Hep 16 3

29 Dynmische Speicherlloktion: Stck [ GDI, V-50] Stck-Aufbu bei Funktionsufrufen Lokle Vriblen, Funktionsprmeter und Rücksprungdressen werden vom Übersetzer uf dem Stck (Stpel, Keller) verwltet Prozessorregister [e]sp zeigt immer uf den nächsten freien Eintrg Stck wächst (rchitekturbhängig) von oben nch unten Die Verwltung erfolgt in Form von Stck-Frmes Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); urn(); Stck-Frme für min erstellen & = fp-4 &b = fp-8 &c = fp-12 sp fp urn-ddr fp ten b c Speicher: Aufbu eines Stck-Frmes uf der IA-32-Architektur: Register ebp zeigt uf den Beginn des ktiven Stck- Frmes; Register esp hinter ds ktuelle Ende. Frmepointer (Reg. ebp) Stckpointer (Reg. esp) Prmeter für f1 Rücksprungdresse in min gesicherter Frmepointer von min Lokle Vriblen von f1 getete Register (flls nötig) Prmeter für f2 Rücksprungdresse us f2 zurück in f1 gesicherter Frmepointer von f1 Lokle Vriblen von f2 min( ) f1( ) f2( ) 16-Speicher: Beispiel hier für 32-Bit-Architektur (4-Byte ints), min() wurde soeben beten c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 4 c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5 Stck-Aufbu bei Funktionsufrufen Stck-Aufbu bei Funktionsufrufen 16-Speicher: Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); urn(); Prmeter uf Stck legen Bei Aufruf sp fp Rücksprungdresse uf Stck legen min() bereitet den Aufruf von f1(int, int) vor urn-ddr fp ten b c Prmeter b Prmeter min urn-ddr Speicher: Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); urn(); int f1(int x, int y) { int i[3]; int n; x++; n = f2(x); urn(n); f1() wurde soeben beten y x Stck-Frme für f1 erstellen und ktivieren &x = fp+8 &y = fp+12 &(i[0]) = fp-12 &n = fp-16 sp sp fp fp i[4] = 20 würde urn-addr. zerstören urn-ddr fp ten b c Prmeter b Prmeter min urn-ddr min-fp (1996) i[2] i[1] i[0] n c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5 c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5

30 Stck-Aufbu bei Funktionsufrufen Stck-Aufbu bei Funktionsufrufen 16-Speicher: Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); urn(); int f1(int x, int y) { int i[3]; int n; x++; n = f2(x); urn(n); int f2(int z) { int m; m = 100; urn(z+1); sp Stck-Frme von f2 bräumen ➊sp = fp sp ➋fp = pop(sp) fp fp ➋ ➋ ➊ urn-ddr fp ten b c Prmeter b Prmeter min urn-ddr min-fp (1996) i[2] i[1] i[0] n Prmeter x f1 urn-ddr f1-fp (1968) f2() bereitet die Terminierung vor (wurde von f1() ufgerufen und usgeführt) m Speicher: Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); urn(); int f1(int x, int y) { int i[3]; int n; x++; n = f2(x); urn(n); int f2(int z) { int m; m = 100; urn(z+1); f2() wird verlssen Rücksprung ➌urn y x sp fp ➌ urn-ddr fp ten b c Prmeter b Prmeter min urn-ddr min-fp (1996) i[2] i[1] i[0] n Prmeter x f1 urn-ddr f1-fp (1968) m c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5 c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5 Stck-Aufbu bei Funktionsufrufen Stck-Aufbu bei Funktionsufrufen 16-Speicher: Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); urn(); zurück in min() sp fp urn-ddr fp ten b c Prmeter b Prmeter min urn-ddr min-fp (1996) i[2] i[1] i[0] n Prmeter x f1 urn-ddr f1-fp (1968) m Speicher: Stck mehrerer Funktionsufrufe int min() { int, b, c; = 10; b = 20; f1(, b); f3(4,5,6); ws wäre, wenn mn nch f1 jetzt eine Funktion f3 ufrufen würde? int f3(int z1, int z2, int z3) { int m; urn(m); m wird nicht initilisiert erbt lten Wert vom Stpel z3 sp z2 sp fp fp z1 urn-ddr fp ten b c min urn-ddr min-fp (1996) m i[0] n i[1] Prmeter x f1 urn-ddr f1-fp ten m c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5 c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.4 Dynmische Speicherlloktion: Stck 16 5

31 Sttische versus dynmische Alloktion Überblick: Teil C Systemnhe Softwreentwicklung Bei der µc-entwicklung wird sttische Alloktion bevorzugt Vorteil: Speicherpltzbedrf ist bereits nch dem Übersetzen / Linken exkt beknnt (knn z. B. mit size usgegeben werden) Speicherprobleme frühzeitig erkennbr (Speicher ist knpp! 17 3 ) 12 Progrmmstruktur und Module lohmnn@fui48:$ size sections.vr text dt bss dec hex filenme b sections.vr Sektionsgrößen des Progrmms von Zeiger und Felder Speicher möglichst durch sttic-vriblen nfordern 14 µc-systemrchitektur Regel der geringstmöglichen Sichtbrkeit bechten 12 6 Regel der geringstmöglichen Lebensduer sinnvoll nwenden 15 Nebenläufigkeit 16-Speicher: Ein Hep ist verhältnismäßig teuer wird möglichst vermieden Zusätzliche Speicherkosten durch Verwltungsstrukturen und Code Speicherbedrf zur Lufzeit schlecht bschätzbr Risiko von Progrmmierfehlern und Speicherlecks V_GSPIC_hndout 16 Speicherorgnistion 17 Zusmmenfssung c dl GSPiC (Teil C, WS 11) 16 Speicherorgnistion 16.5 Sttische vs. Dynmische Alloktion 16 6 Lernziele Motivtion: GSPiC Stoffuswhl und Konzept 17-Zusmmenfssung: Vertiefen Ausgngspunkt: Schwerpunkt: Entwickeln des Wissens über Konzepte und Techniken der Informtik für die Softwreentwicklung Grundlgen der Informtik (GdI) Systemnhe Softwreentwicklung in C von Softwre in C für einen µ-controller (µc) SPiCbord-Lehrentwicklungsplttform mit ATmeg-µC Prktische Erfhrungen in hrdwrenher Softwreentwicklung mchen Verstehen der technologischen Sprch- und Hrdwregrundlgen für die Entwicklung systemnher Softwre Die Sprche C verstehen und einschätzen können Umgng mit Nebenläufigkeit und Hrdwrenähe 17-Zusmmenfssung: Lehrziel: Systemnhe Softwreentwicklung in C Ds ist ein sehr umfngreiches Feld: Hrdwre-Progrmmierung, Betriebssysteme, Middlewre, Dtenbnken, Verteilte Systeme, Übersetzerbu,... Dzu kommt dnn noch ds Erlernen der Sprche C selber Herusforderung: Umfng der Vernstltung (nur 2,5 ECTS) Für Vorlesung und Übung eigentlich zu wenig Vernstltung soll trotzdem einen hohen prktischen Anteil hben Anstz: Konzentrtion uf die Domäne µ-controller Konzepte und Techniken n kleinen Beispielen lehr- und erfhrbr Hohe Relevnz für die Zielgruppe (EEI) c dl GSPiC (Teil C, WS 11) 17 Zusmmenfssung 17.1 Ws wr ds Ziel? 17 1 c dl GSPiC (Teil C, WS 11) 17 Zusmmenfssung 17.1 Ws wr ds Ziel? 17 2

32 Motivtion: Die ATmeg-µC-Fmilie (8-Bit) Übungsplttform: Ds SPiCbord Type Flsh SRAM IO Timer 8/16 UART I²C AD Price (e) 17-Zusmmenfssung: ATTINY11 1 KiB 6 1/ ATTINY13 1 KiB 64 B 6 1/ * ATTINY KiB 128 B 18 1/ ATMEGA KiB 512 B 23 2/ * ATMEGA KiB 512 B 35 1/ ATMEGA KiB 512 B 32 2/ ATMEGA KiB 1024 B 54 2/ * ATMEGA64 64 KiB 4096 B 53 2/ * ATMEGA KiB 4096 B 53 2/ * ATmeg-Vrinten (Auswhl) und Großhndelspreise (DigiKey 2006) Sichtbr wird: Ressourcenknppheit Flsh (Speicher für Progrmmcode und konstnte Dten) ist knpp RAM (Speicher für Lufzeit-Vriblen) ist extrem knpp Wenige Bytes Verschwendung signifiknt höhere Stückzhlkosten 17-Zusmmenfssung: ATmeg32-µC JTAG-Anschluss 8 LEDs 2 7-Seg-Elemente 2 Tster 1 Potentiometer 1 Fotosensor LED Reihe (ctive low) LED 0 (Red 0, PD7) LED 1 (Yellow 0, PC0) LED 2 (Green 0, PC1) LED 3 (Blue 0, PC6) LED 4 (Red 1, PC7) LED 5 (Yellow 1, PA7) LED 6 (Green 1, PA6) LED 7 (Blue 1, PA5) Potentiometer (POTI) n ADC1 Fotowiderstnd n ADC0 Ausleihe zur Übungsberbeitung möglich Oder noch besser selber Löten JTAG Anschluss ISP Anschluss Tster 1 (prellt, PD3) Tster 0 (entprellt, PD2) Stromversorgung 7 Segment Anzeigen Einer (Connector PD1) Zehner (Connector PD0) PB4 (ctive low) PB1 PB3 PB2 PB0 PB5 PB6 c dl GSPiC (Teil C, WS 11) 17 Zusmmenfssung 17.1 Ws wr ds Ziel? 17 3 Vernstltungsüberblick c dl GSPiC (Teil C, WS 11) 17 Zusmmenfssung 17.1 Ws wr ds Ziel? 17 4 Teil B: Einführung in C Teil A: Konzept und Orgnistion 1 Einführung 9 Funktionen 10 Vriblen Ds erste C-Progrmm für einen µ-controller Hello World für AVR-ATmeg (SPiCbord) Abstrktion durch Softwreschichten: Vollständiges Beispiel #include <vr/io.h> 17-Zusmmenfssung: Orgnistion Teil B: Einführung in C 3 Jv versus C Erste Beispiele 4 Softwreschichten und Abstrktion 5 Sprchüberblick 6 Einfche Dtentypen 7 Opertoren und Ausdrücke 8 Kontrollstrukturen 11 Präprozessor Teil C: Systemnhe Softwreentwicklung 12 Progrmmstruktur und Module 13 Zeiger und Felder 14 µc-systemrchitektur 15 Nebenläufigkeit 16 Speicherorgnistion 17 Zusmmenfssung 17-Zusmmenfssung: ErsteSchritte: // initilize hrdwre: LED on port D pin 7, Bisher: ctive Entwicklung low mit vr-libc DDRD = Integertypen: (1<<7); // PD7 isgröße used s output und Wertebereich #include <vr/io.h> [ Jv] PORTD = (1<<7); // PD7: high --> LED is off // greet user // initilize hrdwre PORTD &= Die ~(1<<7); interne // Drstellung PD7: low -->(Bitbreite) LED is on ist implementierungsbhängig // button0 on PD2 DDRD &= ~(1<<2); // wit forever Dtentyp-Breite PORTD in Bit = (1<<2); // LED on PD7 while(1){ Jv C-Stndrd µ-controller-progrmmierung gcc DDRD IA32 = (1<<7); gcc IA64 gcc AVR PORTD = (1<<7); chr 16 ist irgendwie 8 nders // wit until PD2: low --> (button0 pressed) short while(pind 16 & (1<<2)) 16 { 16 int Übersetzen und Flshen (mit 32 AVR Studio) Übung 16 // greet user (red LED) long PORTD 32&= ~(1<<7); 64 // PD7: low32 --> LED is on Ausführen (SPiCbord): long long - 64 // wit 64 forever (rote LED 64leuchtet) 64 while(1) { Der Wertebereich berechnet sich us der Bitbreite c dl GSPiC (Teil B, WS 11) 3 Jv versus C Erste Beispiele 3.1 Ausgbe 3 4 (vgl. 3 8 ) signed (2 Bits 1 1) +(2 Bits 1 1) unsigned 0 +(2 Bits 1) 06-Dtentypen: ErsteSchritte: Nun: Entwicklung mit libspicbord #include <led.h> #include <button.h> // wit until Button0 is pressed while(sb_button_getstte(button0)!= BTNPRESSED) { // greet user sb_led_on(red0); // wit forever while(1){ Hrdwreinitilisierung entfällt Progrmm ist einfcher und verständlicher durch problemspezifische Abstrktionen Setze Bit 7 in PORTD sb_set_led(red0) Lese Bit 2 in PORTD sb_button_getstte(button0) Hier zeigt sich die C-Philosophie: Effizienz c dldurch GSPiC Mschinennähe (Teil B, WS 11) Softwreschichten und Abstrktion 4.1 Funktionsbibliotheken 4 3 Die interne Repräsenttion der Integertypen ist definiert durch die Hrdwre (Registerbreite, Busbreite, etc.). Ds führt im Ergebnis zu effizientem Code. c dl GSPiC (Teil B, WS 11) 6 Einfche Dtentypen 6.2 Gnzhltypen: int und Co 6 4 c dl GSPiC (Teil C, WS 11) 17 Zusmmenfssung 17.2 Ws hben wir gemcht? 17 5 c dl GSPiC (Teil C, WS 11) 17 Zusmmenfssung 17.2 Ws hben wir gemcht? 17 6

c dl SPiC (Teil C, SS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1 Zeigervariable := Behälter für Verweise ( Adresse) Beispiel int x = 5;

c dl SPiC (Teil C, SS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1 Zeigervariable := Behälter für Verweise ( Adresse) Beispiel int x = 5; Überblick: Teil C Systemnhe Softwreentwicklung Einordnung: Zeiger (Pointer) Literl: Drstellung eines Wertes 0110 0001 12 Progrmmstruktur und Module Vrible: Bezeichnung chr ; eines Dtenobjekts Behälter

Mehr

3 Module in C. 4 Gültigkeit von Namen. 5 Globale Variablen (2) Gültig im gesamten Programm

3 Module in C. 4 Gültigkeit von Namen. 5 Globale Variablen (2) Gültig im gesamten Programm 3 Module in C 5 Glole Vrilen!!!.c Quelldteien uf keinen Fll mit Hilfe der #include Anweisung in ndere Quelldteien einkopieren Bevor eine Funktion us einem nderen Modul ufgerufen werden knn, muss sie deklriert

Mehr

E Mikrocontroller-Programmierung. E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie) 1 Mikrocontroller-Umgebung. E.1 Überblick.

E Mikrocontroller-Programmierung. E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie) 1 Mikrocontroller-Umgebung. E.1 Überblick. E Mikrocontroller-Progrmmierung E Mikrocontroller-Progrmmierung 1 Mikrocontroller-Umgebung E.1 Überblick E.1 Überblick Mikrocontroller-Umgebung Prozessor m Beispiel AVR-Mikrocontroller Speicher Peripherie

Mehr

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet. U4 4. Übung U4 4. Übung Besprechung Aufgabe 2 Makros Register I/O-Ports U4.1 U4-1 Makros U4-1 Makros Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler

Mehr

Parallel-IO. Ports am ATmega128

Parallel-IO. Ports am ATmega128 Parallel-IO Ansteuerung Miniprojekt Lauflicht Ports am ATmega128 PortE (PE7...PE0) alternativ, z.b. USART0 (RS232) 1 Pin von PortC Port C (PC7...PC0) 1 Parallel-IO-Port "Sammelsurium" verschiedener Speicher

Mehr

1KOhm + - y = x LED leuchtet wenn Schalter x gedrückt ist

1KOhm + - y = x LED leuchtet wenn Schalter x gedrückt ist . Ohm = LED leuchtet wenn chlter gedrückt ist 2. Ohm = NICH ( = NO ) LED leuchtet wenn chlter nicht gedrückt ist = ist die Negtion von? Gibt es so einen kleinen chlter (Mikrotster)? 2. Ohm = UND LED leuchtet

Mehr

Digitaltechnik. 3 Sequenzielle. Schaltungen. Revision 1.1

Digitaltechnik. 3 Sequenzielle. Schaltungen. Revision 1.1 igitltechnik 3 Sequenzielle Schltungen A Revision 1.1 Trnsitionssysteme Synchroner sequenzieller Entwurf Timing-Anlyse Pipelining Mely und Moore Mschinen Zustndsmschinen in Verilog Sequentielle Schltungen

Mehr

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs Programmieren 9.1.11 Microcontroller Kurs/Johannes Fuchs 1 General Purpose Input Output (GPIO) Jeder der Pins der vier I/O Ports kann als Eingabe- oder Ausgabe-leitung benutzt werden.

Mehr

Einführung in die Programmierung von Mikrocontrollern mit C/C++

Einführung in die Programmierung von Mikrocontrollern mit C/C++ Einführung in die Programmierung von Mikrocontrollern mit C/C++ Vorlesung Prof. Dr.-Ing. habil. G.-P. Ostermeyer Rechenleistung/Speicher Systemintegration Grundlagen der Mikrocontrollertechnik (Wiederholung)

Mehr

Einführung in die Welt der Microcontroller

Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Einführung in die Welt der Microcontroller Übersicht Microcontroller Schaltungen Sonstiges Inhaltsverzeichnis 1 Übersicht Möglichkeiten Einsatz 2 Microcontroller

Mehr

Exportmodul Artikel-Nr.: 20208

Exportmodul Artikel-Nr.: 20208 Seite 1 / 5 V5.32 Exportmodul Artikel-Nr.: 20208 Erweiterungsmodul für ds ELV-TimeMster Komplettsystem Hndbuch und Beschreibungen Ab der Version 5 befinden sich die Kurznleitung und ds gesmte Hndbuch ls

Mehr

Wer möchte, kann sein Programm auch auf echter Hardware testen

Wer möchte, kann sein Programm auch auf echter Hardware testen U4 3. Übungsaufgabe U4 3. Übungsaufgabe Grundlegendes zur Übung mit dem AVR-μC Register I/O-Ports AVR-Umgebung Peripherie U4.1 U4-1 Grundlegendes zur Übung mit dem AVR-mC U4-1 Grundlegendes zur Übung mit

Mehr

Rechnerarchitektur Atmega 32. 1 Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

Rechnerarchitektur Atmega 32. 1 Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7 1 Vortrag Atmega 32 Von Urs Müller und Marion Knoth Urs Müller Seite 1 von 7 Inhaltsverzeichnis 1 Vortrag Atmega 32 1 1.1 Einleitung 3 1.1.1 Hersteller ATMEL 3 1.1.2 AVR - Mikrocontroller Familie 3 2 Übersicht

Mehr

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch}; Aufgabe 1: (15 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort

Mehr

Prozessoren für mobile und. eingebettete Systeme II: Die AVR-Architektur. EMES: Eigenschaften mobiler und eingebetteter Systeme

Prozessoren für mobile und. eingebettete Systeme II: Die AVR-Architektur. EMES: Eigenschaften mobiler und eingebetteter Systeme EMES: Eigenschaften mobiler und eingebetteter Systeme Prozessoren für mobile und 00101111010010011101001010101 eingebettete Systeme II: Die AVR-Architektur Dipl. Inf. Jan Richling Wintersemester 2004/2005

Mehr

Tag 2 Eingabe und Interrupts

Tag 2 Eingabe und Interrupts Tag 2 Eingabe und Interrupts 08/30/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Taster Direkt an Portpin angeschlossen (etwa PINB0, PIND3) Pull-Up-Widerstände einschalten!

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C Interrupts Funktionsprinzip Interrupts bei ATmega128 Beispiel in C Funktionsprinzip 1 Was ist ein Interrupt? C muss auf Ereignisse reagieren können, z.b.: - jemand drückt eine Taste - USART hat Daten empfangen

Mehr

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Interrupts. Inhalt. Interrupts. Synchronisation

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Interrupts. Inhalt. Interrupts. Synchronisation Übungen zu Systemnahe Programmierung in C (SPiC) Peter Wägemann, Sebastian Maier, Heiko Janker (Lehrstuhl Informatik 4) Übung 5 Inhalt Synchronisation Stromsparmodi Aufgabe 5: Ampel Hands-on: & Sleep Sommersemester

Mehr

Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* aller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt:

Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* aller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt: 8. Grundlgen der Informtionstheorie 8.1 Informtionsgehlt, Entropie, Redundnz Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* ller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt: 1.

Mehr

Einführung in AVR-Assembler

Einführung in AVR-Assembler Einführung in AVR-Assembler Easterhack 2008 Chaos Computer Club Cologne Stefan Schürmans, BlinkenArea stefan@blinkenarea.org Version 1.0.4 Easterhack 2008 Einführung in AVR-Assembler 1 Inhalt Vorstellung

Mehr

Programmieren in C/C++ und Matlab

Programmieren in C/C++ und Matlab Progrmmieren in C/C und Mtl Sine Schmidt & Sestin Buer Institut für Geowissenschften Christin-Alrechts-Universität zu Kiel Progrmmieren in C/C und Mtl CAU, SS 08 for- / while-schleifen: - numerische Integrlerechnung

Mehr

Programmieren in C Teil 3: Mikrocontrollerprogrammierung

Programmieren in C Teil 3: Mikrocontrollerprogrammierung Programmieren in C Teil 3: Mikrocontrollerprogrammierung 08/30/10 Fachbereich Physik Institut für Kernphysik Bastian Löher, Martin Konrad 1 Tag 1 Hello World 08/30/10 Fachbereich Physik Institut für Kernphysik

Mehr

ARM Cortex-M Prozessoren. Referat von Peter Voser Embedded Development GmbH

ARM Cortex-M Prozessoren. Referat von Peter Voser Embedded Development GmbH ARM Cortex-M Prozessoren Referat von Peter Voser Embedded Development GmbH SoC (System-on-Chip) www.embedded-development.ch 2 Instruction Sets ARM, Thumb, Thumb-2 32-bit ARM - verbesserte Rechenleistung

Mehr

Atmel AVR für Dummies

Atmel AVR für Dummies Atmel AVR für Dummies fd0@koeln.ccc.de 29.12.2005 Übersicht 1 Hardware Kurzvorstellung Atmega8 Programmierkabel (Eigenbau vs. Kommerzlösung) Alternative: Bootloader (Programmieren via rs232) Software Speicher

Mehr

Ausbildung zum Passagement-Consultant

Ausbildung zum Passagement-Consultant M & MAICONSULTING Mngementbertung Akdemie M MAICONSULTING Mngementbertung & Akdemie MAICONSULTING GmbH & Co. KG Hndschuhsheimer Lndstrße 60 D-69121 Heidelberg Telefon +49 (0) 6221 65024-70 Telefx +49 (0)

Mehr

Präfixcodes und der Huffman Algorithmus

Präfixcodes und der Huffman Algorithmus Präfixcodes und der Huffmn Algorithmus Präfixcodes und Codebäume Im Folgenden werden wir Codes untersuchen, die in der Regel keine Blockcodes sind. In diesem Fll können Codewörter verschiedene Länge hben

Mehr

Versuchsplanung. Grundlagen. Extrapolieren unzulässig! Beobachtungsbereich!

Versuchsplanung. Grundlagen. Extrapolieren unzulässig! Beobachtungsbereich! Versuchsplnung 22 CRGRAPH www.crgrph.de Grundlgen Die Aufgbe ist es Versuche so zu kombinieren, dss die Zusmmenhänge einer Funktion oder eines Prozesses bestmöglich durch eine spätere Auswertung wiedergegeben

Mehr

Autonome Mobile Systeme. Dr. Stefan Enderle

Autonome Mobile Systeme. Dr. Stefan Enderle Autonome Mobile Systeme Dr. Stefan Enderle 2. Mikrocontroller Einleitung Unterschied Controller / Prozessor: Speicher (RAM, Flash, Eprom) intern Viele I/Os (Digital, Analog) Bus-Unterstützung (Seriell,

Mehr

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 2 Der Mikrocontroller Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel 1 beschrieben. Auf dem Chip sind die, ein ROM- für das Programm, ein RAM- für die variablen

Mehr

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note: Name: Punkte: Note: Hinweise für das Lösen der Aufgaben: Zeit: 95 min. Name nicht vergessen! Geben Sie alle Blätter ab. Die Reihenfolge der Aufgaben ist unabhängig vom Schwierigkeitsgrad. Erlaubte Hilfsmittel

Mehr

Technische Informatik 2: Addressierung und Befehle

Technische Informatik 2: Addressierung und Befehle Technische Informatik 2: Addressierung und Befehle Memory Map Programm Speicher: Adresse $000-$FFF max. 4096 Byte für kompiliertes Programm Data Memory: Adresse $0000-$FFFF 32 8Bit Register 64 I/O Register

Mehr

Installation und Einsatz von ImageShare

Installation und Einsatz von ImageShare Instlltion und Einstz von ImgeShre Copyright 2000-2002: Polycom, Inc. Polycom, Inc., 4750 Willow Rod, Plesnton, CA 94588 www.polycom.com Polycom und ds Polycom-Logo sind eingetrgene Mrken der Polycom,

Mehr

Version 3. Installation. Konfiguration. Bedienung. Referenz. SYNCING.NET Technologies GmbH Weipertstr. 8-10 74076 Heilbronn www.syncing.

Version 3. Installation. Konfiguration. Bedienung. Referenz. SYNCING.NET Technologies GmbH Weipertstr. 8-10 74076 Heilbronn www.syncing. Rev. 03 SNT 000.2547 Version 3 Instlltion Konfigurtion Bedienung Referenz SYNCING.NET Technologies GmbH Weipertstr. 8-10 74076 Heilbronn www.syncing.net Inhltsverzeichnis Inhltsverzeichnis Einleitung 5

Mehr

Seminar Quantum Computation - Finite Quanten-Automaten und Quanten-Turingmaschinen

Seminar Quantum Computation - Finite Quanten-Automaten und Quanten-Turingmaschinen Seminr Quntum Computtion - Finite Qunten-Automten und Qunten-Turingmschinen Sebstin Scholz sscholz@informtik.tu-cottbus.de Dezember 3. Einleitung Aus der klssischen Berechenbrkeitstheorie sind die odelle

Mehr

Vorlesung. Einführung in die mathematische Sprache und naive Mengenlehre

Vorlesung. Einführung in die mathematische Sprache und naive Mengenlehre Vorlesung Einführung in die mthemtische Sprche und nive Mengenlehre 1 Allgemeines RUD26 Erwin-Schrödinger-Zentrum (ESZ) RUD25 Johnn-von-Neumnn-Hus Fchschft Menge ller Studenten eines Institutes Fchschftsrt

Mehr

Entwurf und Realisierung analoger und digitaler Filter

Entwurf und Realisierung analoger und digitaler Filter Signl- und Messwert- Verrbeitung Dr. K. Schefer Entwurf und Relisierung nloger und digitler Filter Im Rhmen dieses Versuchs wollen wir uns mit der Dimensionierung von nlogen und digitlen Filtern und mit

Mehr

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Lösungen zum Kurs Mikrocontroller Hard- und Software Lösungen zum Kurs "Mikrocontroller Hard- und Software Gerhard Schmidt Kastanienallee 20 64289 Darmstadt http://www.avr-asm-tutorial.net Lösung Aufgabe 2 Aufgabe 2 sbi DDRB,PB0 2 Takte sbi PORTB,PB0 2 Takte

Mehr

Prozeßalgebren. Prof. Dr. Ursula Goltz

Prozeßalgebren. Prof. Dr. Ursula Goltz Prozeßlgebren Prof Dr Ursul Goltz Stnd: 24 Oktober 2012 Vorwort Ds vorliegende Skript ist die Ausrbeitung einer Vorlesung, die wesentliche Grundbegriffe us dem weiten Feld der Prozeßlgebren einführt Dbei

Mehr

Mathematik PM Rechenarten

Mathematik PM Rechenarten Rechenrten.1 Addition Ds Pluszeichen besgt, dss mn zur Zhl die Zhl b hinzuzählt oder ddiert. Aus diesem Grunde heisst diese Rechenrt uch Addition. + b = c Summnd plus Summnd gleich Summe Kommuttivgesetz

Mehr

In diesem Handbuch für den Schnellstart finden Sie allgemeine Anweisungen zum Einrichten der McAfee Web Gateway-Appliance.

In diesem Handbuch für den Schnellstart finden Sie allgemeine Anweisungen zum Einrichten der McAfee Web Gateway-Appliance. Schnellstrt-Hndbuch Revision B McAfee Web Gtewy Version 7.3.2.2 In diesem Hndbuch für den Schnellstrt finden Sie llgemeine Anweisungen zum Einrichten der McAfee Web Gtewy-Applince. Bevor Sie beginnen,

Mehr

XING Events. Kurzanleitung

XING Events. Kurzanleitung XING Events Kurznleitung 00 BASIC nd PLUS Events 2 Die Angebotspkete im Überblick Wählen Sie zwischen zwei Pketen und steigern Sie jetzt gezielt den Erfolg Ihres Events mit XING. Leistungen Event BASIS

Mehr

Boole'sche Algebra. Inhaltsübersicht. Binäre Funktionen, Boole'sche Algebren, Schaltalgebra. Verknüpfungen der mathematischen Logik

Boole'sche Algebra. Inhaltsübersicht. Binäre Funktionen, Boole'sche Algebren, Schaltalgebra. Verknüpfungen der mathematischen Logik Boole'sche Algebr Binäre Funktionen, Boole'sche Algebren, Schltlgebr Inhltsübersicht Verknüpfungen der mthemtischen Logik Boole sche Algebren Grundelemente der Schltlgebr Regeln der Schltlgebr Normlformen

Mehr

AVR Web Server. Version 1.1. erstellt von. Ulrich Radig

AVR Web Server. Version 1.1. erstellt von. Ulrich Radig AVR Web Server Version 1.1 erstellt von Ulrich Radig 1 Vorwort: Der von mir aufgebaute AVR Webserver dient zum Steuern Messen und Regeln von diversen Gerätschaften genannt seien Garagentor, Lampen, Heizung

Mehr

Tutorial. Microcontroller. Grundlagen µc. Kapitel 1

Tutorial. Microcontroller. Grundlagen µc. Kapitel 1 Microcontroller Kapitel 1 Grundlagen µc µc Inhaltsverzeichnis 1 - Vorwort Seite 2 2 - Prinzipieller Programmablauf Seite 4 3 - ISR Interrupt Service Routine Seite 5 4 - Compiler Seite 7 5 - ATMega8 Seite

Mehr

AVR-Mikrocontrollertechnik

AVR-Mikrocontrollertechnik 1/31 Ziele der Weiterbildung Vermitteln von Grundlagen zu den AVR Controllern Vermitteln von Assembler Grundlagen Vorstellen der benötigten Hard und Software Eigenständiges Programmieren der Controller

Mehr

11: Echtzeitbetriebssystem ucos-ii

11: Echtzeitbetriebssystem ucos-ii 11: Echtzeitbetriebssystem ucos-ii Sie lernen anhand aufeinander aufbauender Übungen, welche Möglichkeiten ein Echtzeitbetriebssystem wie das ucosii bietet und wie sich damit MC-Applikationen realisieren

Mehr

16.3 Unterrichtsmaterialien

16.3 Unterrichtsmaterialien 16.3 Unterrichtsmterilien Vness D.l. Pfeiffer, Christine Glöggler, Stephnie Hhn und Sven Gembll Mteril 1: Alignieren von Nukleotidsequenzen für die Verwndtschftsnlyse Für eine Verwndtschftsnlyse vergleicht

Mehr

Einführung in Mathcad 14.0 2011 H.

Einführung in Mathcad 14.0 2011 H. Einführung in Mthc. H. Glvnik Eitieren von Termen Tet schreiben mit Shift " + + Nvigtion mit Leertste un Cursor + Löschen mit Shift + Entf + + 5 sin( ) + Arten von Gleichheitszeichen Definition eines Terms

Mehr

Inhaltsverzeichnis. Modul Produktion + Steuerungstechnik Grundlagen. Zusammenfassung Wintersemester 05/06

Inhaltsverzeichnis. Modul Produktion + Steuerungstechnik Grundlagen. Zusammenfassung Wintersemester 05/06 Inhltsverzeichnis Modul Produktion + Steuerungstechnik Grundlgen Zusmmenfssung Wintersemester 05/06 Inhltsverzeichnis... 2 1. Einleitung... 3 1.1 Einordnung... 3 1.2.1 Steuern... 3 1.2.2 Regeln... 3 1.2.3

Mehr

B1 Stapelspeicher (stack)

B1 Stapelspeicher (stack) B1 Stapelspeicher (stack) Arbeitsweise des LIFO-Stapelspeichers Im Kapitel "Unterprogramme" wurde schon erwähnt, dass Unterprogramme einen so genannten Stapelspeicher (Kellerspeicher, Stapel, stack) benötigen

Mehr

2.2 Rechnerorganisation: Aufbau und Funktionsweise

2.2 Rechnerorganisation: Aufbau und Funktionsweise 2.2 Rechnerorganisation: Aufbau und Funktionsweise é Hardware, Software und Firmware é grober Aufbau eines von-neumann-rechners é Arbeitsspeicher, Speicherzelle, Bit, Byte é Prozessor é grobe Arbeitsweise

Mehr

Johann Wolfgang Goethe-Universität

Johann Wolfgang Goethe-Universität Flynn sche Klassifikation SISD (single instruction, single data stream): IS IS CU PU DS MM Mono (Mikro-)prozessoren CU: Control Unit SM: Shared Memory PU: Processor Unit IS: Instruction Stream MM: Memory

Mehr

REGSAM-Handbuch. für neue Facharbeitskreissprecherinnen und -sprecher

REGSAM-Handbuch. für neue Facharbeitskreissprecherinnen und -sprecher REGSAM-Hndbuch für neue Fchrbeitskreissprecherinnen und -sprecher Inhlte Vorwort. 2 Über REGSAM. o Wozu REGSAM? o REGSAM holt lle Hndelnden n einen Tisch o Wie wird gerbeitet? Oder: Die Gremien o Zentrler

Mehr

Technische Informatik - Hardware

Technische Informatik - Hardware Inhltsverzeichnis Hns-Georg Beckmnn 22 Technische Informtik - Hrdwre Teil : Grundlgen Vorbemerkungen 2 Dezimlzhlen, Dulzhlen, Hexzhlen 3 Umrechnen in Zhlensystemen 4 Addieren zweier Dulzhlen 6 Hlbddierer

Mehr

Unterrichts- und Prüfungsplanung M306 Modulverantwortlicher: Beat Kündig Modulpartner: R. Rubin

Unterrichts- und Prüfungsplanung M306 Modulverantwortlicher: Beat Kündig Modulpartner: R. Rubin Dokument Dtum (Version) Gültig für 200 / 0 Seite von 7 Unterrichts- und Prüfungsplnung M306 Modulverntwortlicher: Bet Kündig Modulprtner: R. Rubin Lernschritt-Nr. Hndlungsziele Zielsetzung unter Berücksichtigung

Mehr

13 Rekonfigurierende binäre Suchbäume

13 Rekonfigurierende binäre Suchbäume 13 Rekonfigurierende inäre Suchäume U.-P. Schroeder, Uni Pderorn inäräume, die zufällig erzeugt wurden, weisen für die wesentlichen Opertionen Suchen, Einfügen und Löschen einen logrithmischen ufwnd uf.

Mehr

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber Die Entwicklungsumgebung Labor Technische Informatik Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber 19.04.2011 Inhalt 1 Das Keil MCB1700 Board...2 2 Keil ARM MDK Toolchain...3 2.1 Projekterstellung...3

Mehr

Stand: 01/08 Version 1.1

Stand: 01/08 Version 1.1 Stnd: 01/08 Version 1.1 I. Die e-mrke I. e-mrke II. Schriften III. Frben IV. Bilder V. Gestltung VI. Geschäftsusstttung I.1 Wertedrstellung VII. Werbung VIII. Presse/Publiktionen IX. Multimedi X. Vernstltungen/Messen

Mehr

EasyMP Slide Converter Bedienungsanleitung

EasyMP Slide Converter Bedienungsanleitung EsyMP Slide Converter Bedienungsnleitung Inhltsverzeichnis 2 Übersicht über EsyMP Slide Converter EsyMP Slide Converter - Übersicht... 4 Unterstützte Dteitypen für EsyMP Slide Converter... 4 Instlltion

Mehr

Rechner Architektur. Martin Gülck

Rechner Architektur. Martin Gülck Rechner Architektur Martin Gülck Grundlage Jeder Rechner wird aus einzelnen Komponenten zusammengesetzt Sie werden auf dem Mainboard zusammengefügt (dt.: Hauptplatine) Mainboard wird auch als Motherboard

Mehr

L740. Hybrid-Lastschaltgerät. Technische Daten. Last Management 3. Generation

L740. Hybrid-Lastschaltgerät. Technische Daten. Last Management 3. Generation Lst Mngement 3. Genertion Hybrid-Lstshltgerät L740 Tehnishe Dten Ds Hybrid-Lstshltgerät L740 unterstützt lle gebräuhlihen Protokolle der Rundsteuerung und die 2-Weg Power Line Tehnologie PLAN unter DLMS.

Mehr

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Was ist ein Microcontroller Wikipedia: A microcontroller (sometimes abbreviated µc, uc or MCU) is a small computer on a single integrated

Mehr

Canon Nikon Sony. Deutschland 55 45 25. Österreich 40 35 35. Schweiz 30 30 20. Resteuropa 60 40 30 55 45 25 40 35 35 J 30 30 20 60 40 30

Canon Nikon Sony. Deutschland 55 45 25. Österreich 40 35 35. Schweiz 30 30 20. Resteuropa 60 40 30 55 45 25 40 35 35 J 30 30 20 60 40 30 15 Mtrizenrechnung 15 Mtrizenrechnung 15.1 Mtrix ls Zhlenschem Eine Internetfirm verkuft über einen eigenen Shop Digitlkmers. Es wird jeweils nur ds Topmodel der Firmen Cnon, Nikon und Sony ngeboten. Verkuft

Mehr

Addieren und Subtrahieren mit Mikrocontroller Atmega AT90162USB

Addieren und Subtrahieren mit Mikrocontroller Atmega AT90162USB Addieren und Subtrahieren mit Mikrocontroller Atmega AT90162USB Projekt: Markus Sellner Hardware: AT90USB162 auf Entwicklerplatine AVR-USB-162 von Olimex erweitert um zwei 7-Segment-Anzeigen Aufgabe: Mit

Mehr

Python macht Embedded Linux angenehmer

Python macht Embedded Linux angenehmer Python macht Embedded Linux angenehmer Hubert Högl Hubert.Hoegl@hs-augsburg.de http://www.hs-augsburg.de/~hhoegl Hochschule Augsburg 2. Juli 2010 H. Högl () FuE 2010 2. Juli 2010 1 / 14 Embedded Linux

Mehr

BLIT2008-Board. Uwe Berger

BLIT2008-Board. Uwe Berger 11/2008 (BLIT) 2 Inhalt Was sind Mikrocontroller AVR-Mikrocontroller Werkzeugkasten Prinzipielles zur Programmierung BLIT2008-Board 11/2008 (BLIT) 3 Was sind Mikrocontroller AVR-Mikrocontroller Werkzeugkasten

Mehr

Die kleine Box für den großen Erfolg. Fragen und Antworten zur. GUSbox 16, 90* So einfach wie telefonieren. mtl.ab. a Fernwartung Ihrer Praxis -

Die kleine Box für den großen Erfolg. Fragen und Antworten zur. GUSbox 16, 90* So einfach wie telefonieren. mtl.ab. a Fernwartung Ihrer Praxis - So einfch wie telefonieren Frgen und Antworten zur Fxe von jedem Arbeitspltz senden und empfngen. DMP Bögen elektronisch versenden. ** Dle-UV BG Formulre und Abrechnung elektronisch übertrgen. Arztbriefe

Mehr

McAfee Firewall Enterprise

McAfee Firewall Enterprise Hnduch für den Schnellstrt Revision B McAfee Firewll Enterprise Version 8.3.x In diesem Hnduch für den Schnellstrt finden Sie llgemeine Anweisungen zum Einrichten von McAfee Firewll Enterprise (im Folgenden

Mehr

Zahlendarstellung Logikfunktionen Register Eingänge Infrarot senden TSOP-Effekte Weiterführendes U23 2008. Abend 3:

Zahlendarstellung Logikfunktionen Register Eingänge Infrarot senden TSOP-Effekte Weiterführendes U23 2008. Abend 3: #2 Abend 3: Alexander Neumann e.v. http://koeln.ccc.de Köln, 3.11.2008 Gliederung 1 Zahlendarstellung n-adische Darstellung natürlicher Zahlen negative Zahlen 2 Logikfunktionen 3 Register

Mehr

AVR-Mikrocontroller mit dem GCC programmieren

AVR-Mikrocontroller mit dem GCC programmieren AVR-Mikrocontroller mit dem GCC programmieren Mario Haustein Chemnitzer Linux User Group 10. Februar 2012 Mario Haustein (CLUG) AVR-Mikrocontroller 10. Februar 2012 1 / 21 1. Die Architektur 2. AVR in

Mehr

Wo liegen die Unterschiede?

Wo liegen die Unterschiede? 0 VERGLEICH VON MSA UND VDA BAND 5 Wo liegen die Unterschiede? MSA steht für Mesurement System Anlysis. Dieses Dokument wurde erstmls 1990 von der Automotive Industry Action Group (AIAG) veröffentlicht.

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

EasyMP Slide Converter Bedienungsanleitung

EasyMP Slide Converter Bedienungsanleitung EsyMP Slide Converter Bedienungsnleitung Inhltsverzeichnis 2 Übersicht über EsyMP Slide Converter EsyMP Slide Converter - Übersicht... 4 Unterstützte Dteitypen für EsyMP Slide Converter... 4 Instlltion

Mehr

Programmierung verteilter eingebetteter Systeme Teamprojekt Einführung und Grundlagen Teil 1

Programmierung verteilter eingebetteter Systeme Teamprojekt Einführung und Grundlagen Teil 1 Platzhalter für Bild, Bild auf Titelfolie hinter das Logo einsetzen Programmierung verteilter eingebetteter Systeme Teamprojekt Einführung und Grundlagen Teil 1 Stephan Rottmann, Ulf Kulau, Felix Büsching

Mehr

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen Mikroprozessoren Grundlagen Aufbau, Blockschaltbild Grundlegende Datentypen AVR-Controller Anatomie Befehlssatz Assembler Speicherzugriff Adressierungsarten Kontrollstrukturen Stack Input / Output (I/O)

Mehr

Einführung in Mikrokontroller Benutzung mit dem Arduino Board. Ramon Hofer ICVR

Einführung in Mikrokontroller Benutzung mit dem Arduino Board. Ramon Hofer ICVR Einführung in Mikrokontroller Benutzung mit dem Arduino Board Ramon Hofer ICVR Ablauf Warum Mikrokontroller Das Arduino Board Anschliessen von Bauteilen Digitale Ein- und Ausgaben Analoge Eingaben Serielle

Mehr

SCRIPT PROGRAMMABLE LOGIC CONTROLS (PLC) VOLUME I

SCRIPT PROGRAMMABLE LOGIC CONTROLS (PLC) VOLUME I SCRIPT PROGRAMMABLE LOGIC CONTROLS (PLC) VOLUME I HÄGELE Inhlt 1. Einleitung... 2 2. Aufbu SPS... 3 2.1 Grundsätzlicher Aufbu... 3 2.2 Aufgben der Ein- und Ausgbebugruppen... 4 2.3 Modulre und Kompkt-ufgebute

Mehr

Ergänzungen zum Manual OS V 2.05/2.06

Ergänzungen zum Manual OS V 2.05/2.06 Ergänzungen zum Manual OS V 2.05/2.06 SYSTEMRESOURCEN - PROGRAMM DOWNLOAD - Ab der Betriebssystemversion 2.05 haben die C-Control Units M-2.0 und Station 2.0 die Möglichkeit das Anwenderprogramm von einem

Mehr

01.04.2004 Fachbereich Informatik Microcomputer-Labor TFH Berlin MCÜ 65 1. Laborübung -Beschreibung der Hardware -Beschreibung der Aufgabe Seite 2 -Frontplatte des Zielsystems Seiten 3 -Tabellen und Timingdiagramme

Mehr

U23 2008 Abend 3: Musterlösungen, Taster entprellen, Unterprozeduren, Interrupts, Timer

U23 2008 Abend 3: Musterlösungen, Taster entprellen, Unterprozeduren, Interrupts, Timer Abend 3: Musterlösungen, Taster entprellen, Unterprozeduren, Interrupts, Timer Alexander Neumann e.v. http://koeln.ccc.de Köln, 1.9.2008 1 Musterlösungen Aufgabe 1 & 2 2 Taster entprellen

Mehr

Versuchsumdruck. Schaltungsvarianten des Operationsverstärkers

Versuchsumdruck. Schaltungsvarianten des Operationsverstärkers Hchschule STDIENGANG Wirtschftsingenieurwesen Bltt n 6 Aschffenburg Prf. Dr.-Ing.. Bchtler, Armin Huth Versuch 2 Versin. m 23.3.2 Versuchsumdruck Schltungsrinten des Opertinserstärkers Inhlt Verwendete

Mehr

Programmierung von Mikrocontrollern am Beispiel des ATMEL ATmega32

Programmierung von Mikrocontrollern am Beispiel des ATMEL ATmega32 Fakultät Elektrotechnik und Informationstechnik, Professur für Prozessleittechnik Prozessinformationsverarbeitung (PIV) Programmierung von Mikrocontrollern am Beispiel des ATMEL ATmega32 Professur für

Mehr

HUMAN-CENTRIC WORKFLOW SOLUTION FOR SHAREPOINT

HUMAN-CENTRIC WORKFLOW SOLUTION FOR SHAREPOINT HUMAN-CENTRIC WORKFLOW SOLUTION FOR SHAREPOINT Tool zur grfischen Modellierung von Workflows in ShrePoint Einfches Gestlten von Prozessen und Chnge Mngement Gemeinsme Arbeitsplttform für kufmännische Abteilungen

Mehr

ITF Funktionsbeschreibung

ITF Funktionsbeschreibung ITF Funktionsbeschreibung Funktionsbeschreibung des CMFnet ITF Frmeworks (utomtisiertes Testen) Autor: CMFnet GmbH Version: 1.0 Dtum: 09.03.2010 CMFnet GmbH Bernstrsse 60 CH-8952 Schlieren Tel. +41 43

Mehr

1 Räumliche Darstellung in Adobe Illustrator

1 Räumliche Darstellung in Adobe Illustrator Räumliche Drstellung in Adobe Illustrtor 1 1 Räumliche Drstellung in Adobe Illustrtor Dieses Tutoril gibt Tips und Hinweise zur räumlichen Drstellung von einfchen Objekten, insbesondere Bewegungspfeilen.

Mehr

i2c-bus.de I2C-002 KURZBESCHREIBUNG I 2 C Modul mit PCA8574 8-Bit I/O Port-Expander Dokument NR.: I2C-002-D-01

i2c-bus.de I2C-002 KURZBESCHREIBUNG I 2 C Modul mit PCA8574 8-Bit I/O Port-Expander Dokument NR.: I2C-002-D-01 DA CL Dokument NR.: I2C-002-D-01 I2C-002 KURZBECHREIBUNG I 2 C Modul mit PCA8574 8-Bit I/O Port-Expander P Bitte denken ie an die Umwelt, bevor ie diese Datei ausdrucken DA CL Inhaltsverzeichnis 1. Modul

Mehr

Expertise. Kontrolle der abgestrahlten Leistung (ERP) von Mobilfunk-Basisstationen

Expertise. Kontrolle der abgestrahlten Leistung (ERP) von Mobilfunk-Basisstationen Expertise Kontrolle der bgestrhlten Leistung (ERP) von Mobilfunk-Bsissttionen Quelle Noki Lut Bundesgericht ht die Bevölkerung ein Anrecht druf, sicher zu sein, dss die bewilligten bgestrhlten Leistungen

Mehr

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang :

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang : Produktinformationen Basis Set Atmel Atmega8 & ISP Programmer Lieferumfang : 1 Steckboard 840 Pin 1 USB ISP Programmer mit Kabel 1 Kabelsatz 32-teilig 1 Atmega8L 5 LED 3mm Klar Rot/Gelb/Grün/Blau/Weiss

Mehr

Internationale Ökonomie I Vorlesung 3: Das Riccardo-Modell: Komparative Vorteile und Produktivität (Master)

Internationale Ökonomie I Vorlesung 3: Das Riccardo-Modell: Komparative Vorteile und Produktivität (Master) Interntionle Ökonomie I Vorlesung 3: Ds Riccrdo-Modell: Komprtive Vorteile und Produktivität (Mster) Dr. Dominik Mltritz Vorlesungsgliederung 1. Einführung 2. Der Welthndel: Ein Überblick 3. Ds Riccrdo-Modell:

Mehr

Dein Trainingsplan. sportmannschaft. ... und was sonst noch wichtig ist. Deine Zähne sind wie deine. und du bist der Trainer!

Dein Trainingsplan. sportmannschaft. ... und was sonst noch wichtig ist. Deine Zähne sind wie deine. und du bist der Trainer! hben Freunde Deine Zähne sind wie deine sportmnnschft und du bist der Triner! Und jeder Triner weiß, wie wichtig jeder einzelne Spieler ist eine wichtige und schöne Aufgbe! Drum sei nett zu deinen Zähnen

Mehr

Reinigung 146. Reinigen des Hindernissensors. Reinigung der Projektoroberfläche. Reinigen des Projektionsfensters. Warnung. Warnung.

Reinigung 146. Reinigen des Hindernissensors. Reinigung der Projektoroberfläche. Reinigen des Projektionsfensters. Warnung. Warnung. Reinigung 146 Bei Verschmutzung oder Bildverschlechterung muss der Projektor gereinigt werden. Schlten Sie den Projektor vor der Reinigung us. Reinigung der Projektoroberfläche Reinigen Sie die Projektoroberfläche

Mehr

Unterhaltung in voller Bandbreite! Produktübersicht und Entgelte für Fernsehen, Internet & Telefon UPC Cablecom (Auszug)

Unterhaltung in voller Bandbreite! Produktübersicht und Entgelte für Fernsehen, Internet & Telefon UPC Cablecom (Auszug) UPC Cblecom Austri GmbH Färbergsse 17, 6850 Dornbirn Eventuelle Stz- oder Druckfehler und Entgeltänderungen vorbehlten. Unterhltung in voller Bndbreite! Produktübersicht und Entgelte für Fernsehen, Internet

Mehr

RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2

RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2 RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2 Bernd Klein 23. Mai 2011 Inhaltsverzeichnis 1 ARDUINO - RN-Control Library 3 1.1 Bibliothek RNControl...................... 3 1.2 Einführung............................

Mehr

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen.

DTMF Sender. Es können 252 Zeichen maximal am Stück übertragen werden; die Länge des Strings wird mit einem Byte übertragen. DTMF Sender Author DK1RI, Version V02.1, 20160104 This project can be found in https://www.github.com/dk1ri Einleitung Dieses Interface ist eine Vorlage für ein Interface, das ein Gerät, das sich mit DTMF

Mehr

.. -. -..-. -.. - .. -...-. ---.-. --.- -.. --- -. -...-...- -.-. -.- .--. -... -... --. -. Kommt Ihnen hier etwas chinesisch vor?

.. -. -..-. -.. - .. -...-. ---.-. --.- -.. --- -. -...-...- -.-. -.- .--. -... -... --. -. Kommt Ihnen hier etwas chinesisch vor? Kommt Ihnen hier etws chinesisch vor? Internet.. -. -..-. -.. - Dnn hben Sie Recht! urbn 31 bringt chinesische Zeichen uf Bildschirm und Ppier Informtionstechnologie.. -...-. ---.-. --.- -.. --- -. Druckschen

Mehr

11 Perfekt organisiert: icloud, Erinnerungen, Termine und Adressen

11 Perfekt organisiert: icloud, Erinnerungen, Termine und Adressen 11 Perfekt orgnisiert: icloud, Erinnerungen, Termine und Adressen Ihr Mc ist ein whres Orgnistionstlent und wrtet gleich mit einer gnzen Hndvoll größerer und kleinerer Apps uf, um Ihr Leben zu vereinfchen.

Mehr

Nutzung der Abwärme aus Erneuerbare-Energie-Anlagen

Nutzung der Abwärme aus Erneuerbare-Energie-Anlagen 5 2014 Sonderdruck us BWK 5-2014 Wichtige Kennzhlen und effiziente Plnung für die dezentrle Wärmewende Nutzung der Abwärme us Erneuerbre-Energie-Anlgen Wichtige Kennzhlen und effiziente Plnung für die

Mehr