39
Friedrich-Alexander-Universität Erlangen-Nürnberg 1 SEMINAR SEMINAR Vernetzung Vernetzung und und Interaktion Interaktion verteilter verteilter eingebetteter eingebetteter Systeme Systeme Mateusz Majer ([email protected]) Hardware-Software-Co-Design

SEMINAR Vernetzung und Interaktion verteilter ... · Computer-Netzwerke Bluetooth-Headsetund Handy … Abhängig von der Anwendung müssen gemeinsame Kommunikationsmechanismen gefunden

  • Upload
    vannhu

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Friedrich-Alexander-Universität Erlangen-Nürnberg 1

SEMINARSEMINAR

VernetzungVernetzung und und InteraktionInteraktionverteilterverteilter eingebettetereingebetteter

SystemeSysteme

Mateusz Majer ([email protected])

Hardware-Software-Co-Design

Friedrich-Alexander-Universität Erlangen-Nürnberg 2

Vernetzte eingebettete SystemeBeispiele für vernetzte eingebettete Systeme:

Automotiv-ElektronikComputer-NetzwerkeBluetooth-Headset und Handy…

Abhängig von der Anwendung müssen gemeinsame Kommunikationsmechanismen gefunden werden.

Friedrich-Alexander-Universität Erlangen-Nürnberg 3

Aspekte der VernetzungAd-Hoc-Netzwerke

Wie registrieren Netzwerkknoten, ob sich andere Kommunikationspartner in der Nähe befinden?Wie werden Kommunikationsknoten in ein Netz integriert?

Uhrensynchronisation:Wie erhalten alle Knoten eine gemeinsame Zeitbasis?

Datenübertragung:Wie werden Fehler bei der Datenübertragung erkannt und korrigiert?

Knoten 1 Knoten 2 Knoten 3 Knoten 1 Knoten 2 Knoten 3

Zyklus n Zyklus n+1

ZeitneuerKnoten

Umsetzung am Beispiel: Lego-Mindstorms

Friedrich-Alexander-Universität Erlangen-Nürnberg 4

Mindstorms:

Ziel:Ein Mindstorm spielt eine einstimmige Midi-Musik-Datei ab.Gruppe von Mindstorms soll synchron eine mehrstimmige Melodie spielenImplementierung unter leJOS (Java für Lego)

Infrarot Senderund Empfänger

LCD-Display

Lautsprecher

Schnittstellenfür Sensoren

Schnittstellenfür Aktoren

Friedrich-Alexander-Universität Erlangen-Nürnberg 5

OrganisationDozenten:

Thilo StreichertMateusz Majer

Umfang/Stunden:S2 für Hardware-Software-Co-Design und BetriebsystemeScheinvergabe auf Ausarbeitung, Präsentation und regelmäßiger, aktiver Teilnahme.

Ort und Zeit des Seminars:1. Gruppe – Montags 14:30 – 16:002. Gruppe – Donnerstags 9:00 – 10:30

Friedrich-Alexander-Universität Erlangen-Nürnberg 6

Inhalt

EinführungMotivationGeschichtlicher HintergrundDas Mindstorm System

RCX HardwareSensoren Der Mikrocontroller

LejOS + VM

Java Threads

Friedrich-Alexander-Universität Erlangen-Nürnberg 7

LEGO MindstormsDie LEGO-Gruppe entwickelte 1998 in Zusammenarbeit mit dem MIT und der Firma SRI das LEGO-MindstormsSystem

Weltweitder beliebtesteRoboter-Baukasten

Friedrich-Alexander-Universität Erlangen-Nürnberg 8

Was man alles so machen kann…Videos

Friedrich-Alexander-Universität Erlangen-Nürnberg 9

Eine kurze GeschichteMIT 1996

programmable brícksErweiterungsset für LEGOIntelligentes Spielzeug für Kinderhttp://llk.media.mit.edu/projects/cricket/

Mitchel Resnick, Fred Martin, Randy Sargent, and Brian Silverman. (1996). Programmable Bricks: Toys to Think With. IBM Systems Journal, vol. 35, no. 3-4, pp. 443-452.

Friedrich-Alexander-Universität Erlangen-Nürnberg 10

Eine kurze Geschichte

Der Lego-RCX Urahn

Surface-mount 16F84 CPU @ 1 MHz Two 1A, 9v motor outputs Two resistive sensor inputs 600 baud IR communications 2048 bytes of user memory (1792 program, 256 data) Beeper, pushbutton, LEDs

Friedrich-Alexander-Universität Erlangen-Nürnberg 11

Eine kurze Geschichte

Friedrich-Alexander-Universität Erlangen-Nürnberg 12

Das Mindstorm System

StandardbausteineTechnikelementeMikrokontrollerSensoren und Motoren

Infrarotstation für den PC

Friedrich-Alexander-Universität Erlangen-Nürnberg 13

Sensoren

Rotationssensor

Lichtsensor

Temperatursensor

Berührungssensor

Friedrich-Alexander-Universität Erlangen-Nürnberg 14

Das RCX ModulLCDTastenIR3 Motoren3 Sensoren6 AA Batterien

Friedrich-Alexander-Universität Erlangen-Nürnberg 15

RCX von Innen

RCX-Platine von obenInfrarotsender und –EmpfängerDisplayLautsprecher

RCX-Platine von untenH8/3292 MikrokontrollerSpeicherbausteinDisplay und Motorsteuerbausteine

Friedrich-Alexander-Universität Erlangen-Nürnberg 16

Der H8/3292 MikrokontrollerHitachi H8/300 CPU16 MHz, 5V

16 KB ROM

512 Byte RAM intern32 KB RAM extern

16 Bit Timer8 Bit Timer 2 Kanäle10 Bit A/D Wandler 8 Kanäle1 Serielle Schnittstelle

Friedrich-Alexander-Universität Erlangen-Nürnberg 17

Die Infrarotschnittstelle

38 kHz Trägersignal2400 bps Übertragungsrate

RahmenformatHeaderDatenbytes plus KomplementePrüfsumme plus Komplement

Header

Befehls-Code

Prüfsumme

55 FF 00 65 11 769A EE 89

Datenbyte

Komplement

Komplement

Friedrich-Alexander-Universität Erlangen-Nürnberg 18

Betriebssysteme

LEGO FirmwareBytecode InterpreterNQC (Not Quite C)

PbForthInteraktiver Interpreter

LegOSC/C++Esterel

LeJOSJava Virtual Machine

Friedrich-Alexander-Universität Erlangen-Nürnberg 19

Java für Lego Mindstorms RCX

leJOS, ein Java SystemWinziges Java Betriebssystem (~ 16Kb)Portierungen für Mindstorms RCX und UNIX (nur Emulation)

leJOS BestandteileVirtual Machine für Java BytecodeHilfssoftware für den DownloadEmulationsumgebung

Java Development Kit (JDK) von SUN ist Vorraussetzung

Friedrich-Alexander-Universität Erlangen-Nürnberg 20

leJOS

leJOS unterstütztObjektorientierungPreemtive ThreadsArraysRekursionSynchronisationExceptions

Die von leJOS angebotenen Klassenbibliotheken sind gut dokumentiert.

Friedrich-Alexander-Universität Erlangen-Nürnberg 21

leJOS

leJOS bietet auchEine Windows VersionFließkomma OperationenString Konstantenjava.lang.Math Klasse mit sin, cos, tan, pow, …

Download von mehreren Programmen

Weitere APIs sind vorhanden: Internetzugriff vom RCX.

Friedrich-Alexander-Universität Erlangen-Nürnberg 22

Java kompilieren, linkenUm Java Dateien zu kompilieren wir das Kommando `javasc` statt `javac` verwendet

javasc ist kein Java KompilerSondern ein Skript welches die –bootclasspath Option setzt und den Java Kompiler aufruft

lejos ist ein LinkerLöst alle Klassenreferenzen aufErmöglicht das Packen mehrerer Programme in eine Datei

lejosc *.java

lejos MyMainClass

Friedrich-Alexander-Universität Erlangen-Nürnberg 23

und auf dem RCX startenFirmware herunterladen

Beim Start wird die Batteriespannung angezeigtMuss nur einmal heruntergeladen werden

Ein Beispiel:

export RCXTTY=usb

lejosfirmdl

lejosc RS.java

lejos –o RS.bin RS

Lejosrun RS.bin

Friedrich-Alexander-Universität Erlangen-Nürnberg 24

Das Beispielimport josx.platform.rcx.*;

class Receiveextends Thread{

public void run(){

while (true) {if(Serial.isPacketAvailable()) {

Sound.beep();LCD.showNumber(receiveByte());

}try {

Thread.sleep(100);} catch (InterruptedException e){//nichts}

}}

private byte[] buffer = new byte[10];

/*** Receive a single byte*/protected byte receiveByte() {

josx.platform.rcx.Serial.readPacket(buffer);return buffer[1];

}

}

Friedrich-Alexander-Universität Erlangen-Nürnberg 25

Das Beispielclass Sendextends Thread{

public void run(){

byte i = 0;while (true) {

try {Button.RUN.waitForPressAndRelease();sendByte(i);if (i<128) {

i++;} else {

i = 0;}Thread.sleep(100);

} catch (InterruptedException e){//nichts}

}}

private byte[] packet = {(byte)0xf7, (byte)0x00};

/*** Send a single byte*/protected void sendByte(byte b) {

packet[1] = b;josx.platform.rcx.Serial.sendPacket(packet, 0, 2);

} }

Friedrich-Alexander-Universität Erlangen-Nürnberg 26

Das Beispielpublic class RS {

// include a timer for checking the receive queue

// implemented in a separate thread!!!

public static void main(String [] args) {

Receive r = new Receive();

Send s = new Send();

r.start();

s.start();

}

}

Friedrich-Alexander-Universität Erlangen-Nürnberg 27

EmulationGelinkte Programme lassen sich auf dem Entwicklungsrechner auch testen.

Der Linker wird durch emu-lejos ersetzt.

emu-lejos –o MyProgram.bin MyProgram

emu-lejosrun MyProgram.bin

Die Option –v ermöglicht den Programmverlauf zu verfolgen.

emu-lejos –o MyProgram.bin MyProgram

emu-lejosrun –v MyProgram.bin

Friedrich-Alexander-Universität Erlangen-Nürnberg 28

Einschränkungen

Keine garbage collectionswitch Anweisungen werden nicht unterstütztArithmetische Operationen unterstützen Variablen des Typs long nichtMaximale Array Größe von 511Es existieren keine Objekte vom Typ java.lang.Class. Damit ergibt Class.Name() eine ClassNotFoundException.Die meisten JDK APIs sind nicht vorhanden.

Friedrich-Alexander-Universität Erlangen-Nürnberg 29

Referenzen

http://lejos.sourceforge.nethttp://lejos.sourceforge.net/tutorial

Guido KrügerHandbuch der Java-Programmierung3. AuflageAddison-Wesley, 2002ISBN 3-8273-1949-8http://www.javabuch.de

Friedrich-Alexander-Universität Erlangen-Nürnberg 30

Multithreading in Java

Mit Nebenläufigkeit bezeichnet man die Fähigkeit einesSystems, zwei oder mehr Vorgänge gleichzeitig oderquasi-gleichzeitig ausführen zu können.

Java integriert Threads direkt in die Sprache.

Ein Thread ist ein eigenständiges Programmfragment, dasparallel zu anderen Threads laufen kann. Ein Thread ähnelt damit einem Prozeß, arbeitet aber auf einer feineren Ebene. Alle Threads eines Programms teilen sich den Adressraum.

Friedrich-Alexander-Universität Erlangen-Nürnberg 31

Multithreading in Java

Threads werden in Java durch die Klasse Thread und dasInterface Runnable implementiert.

leJOS implementiert das Interface Runnable jedoch nicht!

Der Thread-Body, also der parallel auszuführende Code, wird in Form der überlagerten Methode run zur Verfügunggestellt.

Zur Synchronisation stellt Java das Konzept des Monitorszur Verfügung, mit dem kritische Abschnitte innerhalbkorrekt geklammerter Programmfragmente und Methodengekapselt werden.

Friedrich-Alexander-Universität Erlangen-Nürnberg 32

Die Thread Klasse

class MyThreadextends Thread{

public void run(){int i = 0;while (true) {System.out.println(i++);

}}

}

public class Listing{

public static void main(String[] args){MyThread t = new MyThread();t.start();

}}

1.) Thread wird mit der Methode start() gestartet.

2.) Die Methode run() implementiert das Verhalten eines Threads. Oft eine endlos Schleife.

Friedrich-Alexander-Universität Erlangen-Nürnberg 33

Threads unterbrechen

Durch Aufruf von interrupt wird ein Flag gesetzt, das eineUnterbrechungsanforderung signalisiert.

Durch Aufruf von isInterrupted kann der Thread feststellen, ob das Abbruchflag gesetzt wurde und der Thread beendetwerden soll.

Die statische Methode interrupted stellt den Status des Abbruchsflags beim aktuellen Thread fest.

public void interrupt() public boolean isInterrupted()public static boolean interrupted()

Friedrich-Alexander-Universität Erlangen-Nürnberg 34

Threads unterbrechenpublic class Listingextends Thread{

int cnt = 0;

public void run(){while (true) {if (isInterrupted()) {break;

}printLine(++cnt);

}}

private void printLine(int cnt){//Zeile ausgebenSystem.out.println(cnt);

//100 ms. wartentry {Thread.sleep(100);

} catch (InterruptedException e) {interrupt();

}}

public static void main(String[] args){Listing th = new Listing();{//Thread startenth.start();//2 Sekunden wartentry {Thread.sleep(2000);

} catch (InterruptedException e) {}//Thread unterbrechenth.interrupt();

}}

}

3.) Hier wird überprüft ob ein Interrupt vorliegt und gegebenenfalls der Programmthreadabgebrochen.

2.) Da die Pause länger dauert als die Ausgabe, ist es wahrscheinlich, dass der Interruptgenau während dieser Pause eintritt.

1.) Thread wird nach 2 Sekunden unterbrochen.

Friedrich-Alexander-Universität Erlangen-Nürnberg 35

Threads synchronisieren

Wenn man sich mit Nebenläufigkeit beschäftigt, muß man sich in aller Regel auch mit Fragen der Synchronisationnebenläufiger Prozesse beschäftigen.

In Java erfolgt die Kommunikation zweier Threads auf derBasis gemeinsamer Variablen, die von beiden Threads erreicht werden können.

Führen beide Prozesse Änderungen auf den gemeinsamenDaten durch, so müssen sie synchronisiert werden, dennandernfalls können undefinierte Ergebnisse entstehen.

Friedrich-Alexander-Universität Erlangen-Nürnberg 36

Threads synchronisieren

Zur Synchronisation nebenläufiger Prozesse hat Java dasKonzept des Monitors implementiert.

Ein Monitor ist die Kapselung eines kritischen Bereichs(also eines Programmteils, der nur von jeweils einemProzeß zur Zeit durchlaufen werden darf) mit Hilfe einerautomatisch verwalteten Sperre.

Das Monitor-Konzept wird mit Hilfe des in die Spracheintegrierten Schlüsselworts synchronized realisiert.

Friedrich-Alexander-Universität Erlangen-Nürnberg 37

Threads synchronisierenpublic class Listingextends Thread{static int cnt = 0;

public static void main(String[] args){Thread t1 = new Listing();Thread t2 = new Listing();t1.start();t2.start();

}

public void run(){while (true) {cnt = myPrint(cnt);

}}

public synchronized int myPrint(int n) {

// hier steht zeitaufwendiger Code //n++;System.out.println(n);

}}

Nur ein Thread hat jetzt Zugriff auf diese Methode.

Friedrich-Alexander-Universität Erlangen-Nürnberg 38

Threads synchronisieren

Neben dem Monitorkonzept stehen mit den Methoden waitund notify der Klasse Object noch weitereSynchronisationsprimitive zur Verfügung.

Zusätzlich zu der bereits erwähnten Sperre, die einemObjekt zugeordnet ist, besitzt ein Objekt nämlich auchnoch eine Warteliste.

Sowohl wait als auch notify dürfen nur aufgerufen werden, wenn das Objekt bereits gesperrt ist

Friedrich-Alexander-Universität Erlangen-Nürnberg 39

Threads synchronisieren