Eingebettete Systeme

Ähnliche Dokumente
Eingebettete Systeme

Eingebettete Systeme

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

Einführung: Zustandsdiagramme Stand:

Informatik II Übung 04

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

6. Grundlagen der Programmierung

Die Programmiersprache C Eine Einführung

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Softwaretechnik. Kapitel 11 : Zustandsdiagramme. Statecharts / State Machines Historisches. State Machines in UML Verwendung in OO

Programmierung und Angewandte Mathematik

Definition von LR(k)-Grammatiken

Labor Modellgestütztes Software Engineering. Versuch 3

Einen elektronischen Würfel programmieren

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

Klausur. Softwareentwurf. 22. März 2011 Bearbeitungszeit: 120 Minuten

Angewandte Mathematik und Programmierung

Softwaretechnik 1 Übung 6

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Programmiersprachen Einführung in C

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Wir hätten nie gedacht das drei Computer und Elektronik-Fans soweit kommen!! Mit diesem Video sagen wir vielen Dank!

Systemnahe Programmierung in C (SPiC)

Sommersemester Analyse II: Verhalten (Zustandsautomaten)

Sprungbefehle und Kontroll-Strukturen

Technische Informatik I Übung 3: Assembler

Programmieren in Java

Automaten und das State Pattern

Programmierung mit C Zeiger

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Eine Mini-Shell als Literate Program

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

C-Propädeutikum Anweisungen

U4 Grundlagen der C-Programmierung

Statecharts in UML Grundlagen und Übersetzung in Colored Petri Nets

Bisher hatten immer nur als Ausgänge geschaltet und hierfür folgende Befehle benutzt:

Programmierung und Angewandte Mathematik

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

Welche Informatik-Kenntnisse bringen Sie mit?

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Einführung zum MS Visual Studio

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Programmieren in C++

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

C- Kurs 04 Anweisungen

Lösung Übungszettel 6 Aufgabe 1-4

Grundlagen der Programmierung

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

Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben!

Konzepte der Programmiersprachen

Propädeutikum. Dipl.-Inf. Frank Güttler M. Sc. Stephan Fischer

Intensivübung zu Algorithmen und Datenstrukturen

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Vorkurs Informatik WiSe 17/18

Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Reihentyp (Array)

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

RO-Tutorien 17 und 18

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Einführung in die Programmierung Wintersemester 2008/09

Assembler-Unterprogramme

Repetitorium Programmieren I + II

Tag 8 Repetitorium Informatik (Java)

Ein kleiner Blick auf die generische Programmierung

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Grundlagen der Programmierung

Algorithmen und Datenstrukturen

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Girls Day 2017 Programmierung

2. Programmierung in C

Teil II. Literatur zur C-Programmierung:

Übersetzung von Statecharts nach AspectJ

1. Aufgabe (6 Punkte)

RO-Tutorien 15 und 16

Theorie zu Übung 8 Implementierung in Java

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

4.4 Imperative Algorithmen Prozeduren

Prinzipien der objektorientierten Programmierung (OOP)

Programmierung in C. Grundlagen. Stefan Kallerhoff

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Javakurs für Anfänger

Informatik II Übung 5 Gruppe 4

Bei jedem Arduino-Projekt muss man ein Grundgerüst "bauen". Das sieht dann so aus:

Einführung in die Programmierung Wintersemester 2011/12

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Syntax und Kontrollstrukturen

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Probeklausur: Programmierung WS04/05

Übungen zu Systemnahe Programmierung in C (SPiC) Wintersemester 2018/19

Transkript:

Einführung in Eingebettete Systeme Vorlesung 3 Bernd Finkbeiner 05/11/2014 finkbeiner@cs.uni-saarland.de Prof. Bernd Finkbeiner, Ph.D. finkbeiner@cs.uni-saarland.de 1

Programmierung 2

manuell/ Codegenerator Modell C Programm #include <stdio.h> int main(void) { char a = 3, b = 4, c; while(1) { a++, b++; c = a + b; Compiler } } printf( "%d ", c ); Assembler Programm Linker Binärcode 0000012a <main>: 12a: cf 93 push r28 12c: df 93 push r29 12e: 00 d0 rcall.+0 ; 0x130 <main+0x6> 130: cd b7 in r28, ; 61, SP low 0x3d 132: de b7 in r29, 0x3e ; 62, SP high (r28/r29 == Y) 134: 83 e0 ldi r24, 0x03 ; 3 (Wert für a) 136: 89 83 std Y+1, r24 ; Variable a, auf Stack 138: 84 e0 ldi r24, 0x04 ; 4 (Wert für b) 13a: 8a 83 std Y+2, r24 ; Variable b, auf Stack 13c: 99 81 ldd r25, Y+1 ; a 13e: 8a 81 ldd r24, Y+2 ; b 140: 89 0f add r24, r25 ; a + b 142: 8b 83 std Y+3, r24 ; Ergebnis in c, auf Stack 144: 8b 81 ldd r24, Y+3 ; c 146: 28 2f mov r18, r24 ; c in r18 148: 30 e0 ldi r19, 0x00 ; 0 in r19 14a: 00 d0 rcall.+0 ; 0x14c <main+0x22> 14c: 0f 92 push r0 14e: 8d b7 in r24, ; 61, SP low 0x3d 150: 9e b7 in r25, 0x3e ; 62, SP high 152: 01 96 adiw r24, 0x01 ; SP-Kopie + 1 154: 40 e0 ldi r20, 0x00 ; 0 156: 52 e0 ldi r21, 0x02 ; 2 158: fc 01 movw r30, r24 ; r24/25 in r30/31 (Z) 15a: 51 83 std Z+1, r21 ; Parameter auf Stack 15c: 40 83 st Z, r20 ; 15e: fc 01 movw r30, r24 ; 160: 33 83 std Z+3, r19 ; Kopie von c auf Stack 162: 22 83 std Z+2, r18 ; 164: 0e 94 b9 00 call 0x172 ; <printf> aufrufen 168: 0f 90 pop r0 ; Stack bereinigen 16a: 0f 90 pop r0 16c: 0f 90 pop r0 16e: 0f 90 pop r0 170: e5 cf rjmp.-54 ; 0x13c <main+0x12> :100100000BBF02C007900D92A430B107D9F712E0DF :10011000A4E0B2E001C01D92AA30B107E1F70E944D :1001200095000C9472030C940000CF93DF9300D0E1 :10013000CDB7DEB783E0898384E08A8399818A81A1 :10014000890F8B838B81282F30E000D00F928DB7E1 :100150009EB7019640E052E0FC0151834083FC01D0 :10016000338322830E94B9000F900F900F900F905D :10017000E5CFCF93DF93CDB7DEB7FE013696619121 :1001800071918091060290910702AF010E94CB000D :10019000DF91CF9108952F923F924F925F926F928D :1001A0007F928F929F92AF92BF92CF92DF92EF9207 :1001B000FF920F931F93CF93DF93CDB7DEB72D97A9 :1001C0000FB6F894DEBF0FBECDBF3C017D876C87B4 :1001D0005A01FC0117821682838181FFC8C12E015A :1001E0000894411C511CF3019381EC85FD8593FD1E :1001F000859193FF8191FD87EC87882309F4B3C132 :10020000853241F493FD859193FF8191FD87EC87C1 :10021000853229F490E0B3010E94E802E4CFFF2484 :10022000EE2410E01032B0F48B3269F08C3228F4F6 :10023000803251F0833271F40BC08D3239F080334B :1002400049F411602CC01260146029C0186027C0E6 :10025000106125C017FD2EC0282F20532A3098F496 :1002600016FF08C08F2D880FF82EFF0CFF0CF80E1C :10027000F20E15C08E2D880FE82EEE0CEE0CE80E57 :10028000E20E10620CC08E3221F416FD6CC11064B7 :1002900006C08C3611F4106802C0883659F4EC851B :1002A000FD8593FD859193FF8191FD87EC878823E0 :1002B00009F0B8CF982F9554933018F0905293309E 3

Arduino Programme! C Programme (mit Bibliotheken)! Arduino nennt Programme Sketches! Programmstruktur:! Header Deklarationen, Einbinden von Bibliotheken, etc.! setup() wird einmal ausgeführt bei Programmstart! loop() wird immer wieder ausgeführt sobald das Ende erreicht wurde 4

Implementierung eines Mealy-Automaten 1/P k0 0/P 0 1 k0 k1 / P f1 / P f1 k1 k1 f2 / P k2 / P 0/P, 1/P 0/P 1/P k2 k3 / P f3 / P 0/P, 1/P f2 1/P k2 0/P 1/Ö k3 k0 / S k0 / Ö f1 f2 / P f2 / P 0/S 0/S,1/S f3 k3 f2 f3 / P f3 / P f3 k0 / S k0 / S 5

Schritt 1: Repräsentation von Zuständen und Eingabesymbolen! Zustände und Symbole können aufgezählt werden, wir können sie deshalb durch ganze Zahlen (integers) darstellen: #define STATE_k0 0 #define STATE_k1 1 #define STATE_k2 2... #define STATE_f3 6 int current_state; #define INPUT_0 0 #define INPUT_1 1 int current_input; 0 1 k0 k1 / P f1 / P k1 f2 / P k2 / P k2 k3 / P f3 / P k3 k0 / S k0 / Ö f1 f2 / P f2 / P f2 f3 / P f3 / P f3 k0 / S k0 / S 6

Schritt 2: Funktionen für Ausgaben! Ausgaben entsprechen bestimmten Aktionen (z.b. an einer Schnittstelle). Wir implementieren diese Aktionen als Funktionen. void action_p() { digitalwrite(led, HIGH); delay(1000); digitalwrite(led, LOW); delay(1000); } void action_s() {...} void action_oe() {...} 0 1 k0 k1 / P f1 / P k1 f2 / P k2 / P k2 k3 / P f3 / P k3 k0 / S k0 / Ö f1 f2 / P f2 / P f2 f3 / P f3 / P f3 k0 / S k0 / S 7

Schritt 3: Initialzustand! Der Initialzustand wird in setup() gesetzt. 1/P k0 0/P void setup() { current_state = STATE_k0; } 0/P, 1/P f1 0/P k1 1/P 0/P, 1/P f2 1/P k2 0/P 1/Ö 0/S 0/S,1/S f3 k3 8

Schritt 4: Transitionen! Für jede Eingabe wird, in Abhängigkeit vom Zustand, die entsprechende Ausgabeaktion durchgeführt und der neue Zustand gesetzt. void loop() { current_input = get_new_input(); switch(current_state) { case STATE_k0 : if (current_input==input_0) { action_p(); current_state = STATE_k1; } else if (current_input==input_1) { action_p(); current_state = STATE_f1; } case STATE_k1 :...... } } 0 1 k0 k1 / P f1 / P k1 f2 / P k2 / P k2 k3 / P f3 / P k3 k0 / S k0 / Ö f1 f2 / P f2 / P f2 f3 / P f3 / P f3 k0 / S k0 / S 9

4. StateCharts Ziele:! Erstellen von kompakten, lesbaren Modellen für diskrete Steuerungen mit Hilfe von Hierarchie und Variablen! Bewusstsein für semantische Schwierigkeiten (insbesondere Superstep Semantik)

StateCharts Automaten mit zusätzlichen Konstrukten! Hierarchie! Variablen mit komplexen Datentypen! Timer Achtung: Bedeutung (Semantik) von StateCharts nicht einheitlich (mehr dazu später).! Referenzsemantik: Statemate! StateFlow Semantik! UML!... 11

Beispiel: Anrufbeantworter 12

Hierarchie Wenn Zustand S aktiv ist, dann ist auch einer der Unterzustände aktiv (A oder B oder..) Superzustand (superstate) Unterzustände (substates) 13

Zustände! Zustände, die nicht aus weiteren Zuständen bestehen, heissen Basiszustände.! Zustände die aus weiteren Zuständen bestehen heissen Superzustände.! Die Superzustände eines Zustands sind seine Ahnen.! Superzustände können OR-Superzustände oder AND- Superzustände sein. Wann immer ein OR-Superzustand aktiv ist, ist auch genau einer seiner Unterzustände aktiv. Ahne von E 14

Hierarchie Statechart SC! Die Hierarchie kann durch einen Baum repräsentiert werden, in dem die Basiszustände als Blätter auftreten. S SC Z Transitionen sind zwischen allen Hierarchie-Ebenen möglich A B C D E Wenn ein Basiszustand aktiv ist, dann sind alle seine Ahnen aktiv. 15

Transitionen zu Superstates! Durch die Transition von Z nach S wird der Superzustand S aktiv.! Zusätzlich muss ein Basiszustand aktiv werden. Default State Mechanismus History Mechanismus 16

Beispiel: Digitalcamera [http://www.boost.org/doc/libs/1_41_0/libs/statechart/doc/tutorial.htm] 17

Default Konnektoren! Der gefüllte Kreis heißt default Konnektor und kennzeichnet den default state, der aktiv wird, wenn der Superzustand aktiv wird.! Der Konnektor ist selbst kein Zustand.! Die interne Struktur von S wird gegenüber der Außenwelt verborgen. 18

History Konnektoren! Durch die Transition von Z nach S wird der Zustand aktiv, der aktiv war als S zuletzt verlassen wurde.! Falls S zum ersten Mal besucht wird, wird der default state aktiv. 19

History und Default Konnektoren! Die History und Default State Konnektoren können in verschiedenen Hierarchieebenen unterschiedlich eingesetzt werden. 20

History und Deep History Default states Active states DC S CO ID OP SL FA H History connectors speichern Zustände die auf der gleichen Hierarchiestufe wie der History Konnektor angesiedelt sind. 21

History und Deep History Default states Active states DC S ID CO SL speichert OP OP FA H Welcher Zustand wird aktiv nach SENSOR_DISCONNECTED, SENSOR_CONNECTED? 22

History und Deep History * S Default states Active states DC ID CO OP H* Deep History Konnektor H* speichert den aktuellen Basiszustand SL FA 23

History und Deep History * Default states Active states DC S ID CO SL OP speichert OP, FA Welcher Zustand wird aktiv H* nach SENSOR_DISCONNECTED, SENSOR_CONNECTED? FA 24

AND Superzustände! Alle (direkten) Unterzustände eines aktiven AND- Superzustands sind aktiv! Beispiel: 25

AND-Superzustände! Beispiel für aktive Zustände: answ. Default states off on AND-super-state Active states l-m. k-m. L.w. L.p. K.w. K.p.! AND-Zustände können in normalen Automaten nur durch Produktzustände nachgebildet werden Strukturelle Information geht verloren Produktautomat ist viel größer 26

Eintritt und Austritt aus AND-Superzuständen incl.! Sowohl Line-monitoring als auch key-monitoring werden durch key-on and key-off betreten bzw. verlassen. 27

Variablen mit komplexen Datentypen Problem der klassischen Automaten:! Sowohl Kontrolle als auch Daten werden durch explizite Zustände dargestellt. Hier:! Getypte Variablen (z.b. integers, reals, strings, records) speichern Daten! Der Zustand setzt sich zusammen aus den explizit dargestellten Kontrollzuständen und den Variablenbelegungen! Terminologie: graphisch dargestellter Kontrollzustand = Zustand graphisch dargestellter Kontrollzustand + Variablenbelegung = Status 28

Beispiel: Alarmuhr P1 = alarm1_enabled (alarm2_disabled T1 T2) P2 = alarm2_enabled (alarm1_disabled T1 T2) P = alarm1_enabled alarm2_enabled T1=T2 [Harel: StateCharts: A visual formalism for complex systems. Science of Computer Programming, 1987] 29

Allgemeine Form der Kantenmarkierungen Ereignis [Bedingung] / Aktion Bedeutung:! Transition kann genommen werden, wenn Ereignis stattgefunden hat und Bedingung wahr ist.! Wenn Transition genommen wird, dann wird die Aktion ausgeführt. Bedingung:! Bedingung bezieht sich auf die Variablen Aktion:! Zuweisung und Generierung von Ereignis Beispiel:! a & [x = 1023] / overflow; x:=0 30

Timer! Timer können direkt in StateCharts modelliert werden.! Spezielle Kanten beschreiben Timeouts. Falls Ereignis a nicht innerhalb von 20 ms eintritt während das System im linken Zustand ist, dann tritt das Timeout-Ereignis ein. 31

Beispiel 32

Aufgabe! Modellieren Sie einen Aufzug für ein Haus mit zwei Stockwerken (EG und OG).! Vorschlag: Benutzen Sie einen AND-Superzuständen mit drei OR-Superzuständen, jeweils einen für die Anforderungstaster in den beiden Stockwerken, und einen für die Steuerung der Kabine 33

34