05.03.2014 Aufrufe

Von Rhapsody in MicroC zum C167

Von Rhapsody in MicroC zum C167

Von Rhapsody in MicroC zum C167

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Codegenerierung für <strong>C167</strong><br />

Laborversuch Automatische Codegenerierung aus Statemate mit Hilfe<br />

von <strong>Rhapsody</strong> <strong>in</strong> <strong>MicroC</strong>.<br />

Dozent: Jochen L<strong>in</strong>kohr, Hochschule Essl<strong>in</strong>gen, l<strong>in</strong>kohr@hs­essl<strong>in</strong>gen.de<br />

Stand: 7.1.2011<br />

Der Laborversuch wurde auf Basis der beiden Praxissemester von Ruwen Kammerer und Maryam Kharazmi<br />

entwickelt.<br />

Labor Codegenerierung für <strong>C167</strong> Seite 1/15


Inhaltsverzeichnis<br />

Ziel................................................................................................................................. ..................3<br />

Anwendung................................................................................................................................. .....3<br />

Grundlagen des Entwicklungsboards..................................................................................... ........4<br />

Ausgaben auf LEDs........................................................................................ ...........................4<br />

E<strong>in</strong>gaben von den Tastern................................................................................................ ..........4<br />

Vorgehen..................................................................................................................... ................4<br />

Erstellung der Applikation mit Statemate.............................................................................. ........5<br />

Allgeme<strong>in</strong>es............................................................................................................... .................5<br />

Zeitbasis des modellierten Codes....................................................................... ..................5<br />

Modellierung der Applikationslogik................................................................................ .........6<br />

Statechart erstellen............................................................................................................... ..8<br />

Programmieren der Boardspezifischen E<strong>in</strong>­ und Ausgabe.....................................................9<br />

Generierung des Codes für <strong>C167</strong>...................................................................................... .......10<br />

Anpassung der generierten Dateien............................................................... .........................12<br />

Übertragung auf den <strong>C167</strong>................................................................................................... .........13<br />

Board programmierbereit schalten....................................................................... ...................13<br />

Flashtool starten............................................................................................ ...........................13<br />

Serielle Kommunikation e<strong>in</strong>stellen....................................................................... ..................14<br />

Sektoren im Flash löschen................................................................................... ....................14<br />

B<strong>in</strong>ärdatei downloaden.................................................................................. ..........................15<br />

Abschließender Reset................................................................................................ ...............15<br />

Labor Codegenerierung für <strong>C167</strong> Seite 2/15


Ziel<br />

Ziel dieses Laborversuchs ist es, mit Hilfe diverser Tools e<strong>in</strong>e Anwendung mit vollständig<br />

automatisch erzeugtem Code auf e<strong>in</strong> Embedded System zur Ausführung zu br<strong>in</strong>gen.<br />

Anwendung<br />

Die Anwendung soll auf e<strong>in</strong>em Entwicklungsboard mit e<strong>in</strong>em <strong>C167</strong> Prozessor ausgeführt<br />

werden. Dabei stehen zur E<strong>in</strong>gabe e<strong>in</strong>e Reihe von Tastern zur Verfügung.<br />

Die Ausgabe erfolgt mit Hilfe von LEDs.<br />

Die zu entwickelnde Anwendung soll beim Drücken e<strong>in</strong>es Tasters auf dem<br />

Entwicklungsboard e<strong>in</strong> Lauflicht anstoßen, so dass zunächst nur e<strong>in</strong>e LED e<strong>in</strong>geschaltet ist,<br />

dann zwei, dann drei, dann vier. Daraufh<strong>in</strong> soll die Anwendung e<strong>in</strong>en anderen Taster<br />

abfragen und die LEDs der Reihe nach wieder ausschalten.<br />

Der Programmablauf soll folgendermaßen aussehen:<br />

• Zunächst s<strong>in</strong>d alle LEDS s<strong>in</strong>d aus.<br />

• Taster A wird gedrückt<br />

• LED 1 geht an<br />

• 0,5s Wartezeit<br />

• LED 2 geht zusätzlich an<br />

• 0,5s Wartezeit<br />

• LED 3 geht zusätzlich an<br />

• 0,5s Wartezeit<br />

• LED 4 geht zusätzlich an.<br />

• Taster B wird gedrückt<br />

• LED 4 geht aus<br />

• 0,5s Wartezeit<br />

• LED 3 geht aus<br />

• 0,5s Wartezeit<br />

• LED 2 geht aus<br />

• 0,5s Wartezeit<br />

• LED 1 geht aus.<br />

Danach kann der Ablauf durch Drücken von Taster A wieder gestartet werden.<br />

Labor Codegenerierung für <strong>C167</strong> Seite 3/15


Grundlagen des Entwicklungsboards<br />

Das Herzstück des Entwicklungsboards ist e<strong>in</strong> <strong>C167</strong> Prozessor. Als Betriebssystem kommt<br />

OSEK <strong>zum</strong> E<strong>in</strong>satz, welches beim Erstellen der Anwendung auf dem Hostsystem generiert<br />

wird.<br />

Ausgaben auf LEDs<br />

Um auf den LEDs des Entwicklungsboards e<strong>in</strong>e Ausgabe zu machen, muss das entsprechende<br />

Bit <strong>in</strong> e<strong>in</strong>em vordef<strong>in</strong>ierten Feld gelöscht werden. Hierbei gilt es zu beachten, dass der<br />

Zustand „LED e<strong>in</strong>“ e<strong>in</strong>em nicht gesetzten Bit entspricht.<br />

Ist das Bit gesetzt, ist die LED aus, es handelt sich also um e<strong>in</strong>e negative Logik.<br />

Das Feld der LEDs kann <strong>in</strong>nerhalb e<strong>in</strong>er Subrout<strong>in</strong>e mit Hilfe der Variablen P8 angesprochen<br />

werden. Ist P8 auf 0xFF gesetzt, so s<strong>in</strong>d alle 16 LEDs ausgeschaltet. Um e<strong>in</strong>e LED<br />

e<strong>in</strong>zuschalten, empfiehlt es sich, das Feld P8 mit (P8 & (~(1


6) Laden der ausführbaren Anwendung auf das Zielsystem.<br />

7) Starten und Validierung auf dem Zielsystem.<br />

Erstellung der Applikation mit Statemate<br />

Allgeme<strong>in</strong>es<br />

In Statemate werden h<strong>in</strong>ter die Zustände, bei denen e<strong>in</strong>en Interaktion mit der Außenwelt<br />

stattf<strong>in</strong>den soll, e<strong>in</strong>e Subrout<strong>in</strong>e h<strong>in</strong>terlegt. In dieser Subrout<strong>in</strong>e können dann die<br />

entsprechenden C­Aufrufe für die Ansteuerung bzw. das Auslesen der Hardware erfolgen.<br />

Zeitbasis des modellierten Codes<br />

Bei der Modellierung <strong>in</strong> Statemate liegt die Zeitbasis 0.1s zugrunde. E<strong>in</strong> timeout von 100<br />

bedeutet also e<strong>in</strong>e Wartezeit von 10s aus dem Zielsystem.<br />

Labor Codegenerierung für <strong>C167</strong> Seite 5/15


Modellierung der Applikationslogik<br />

Nach dem Starten von Statemate wird e<strong>in</strong> bereits vordef<strong>in</strong>iertes Projekt mit dem Namen<br />

LAB_xx_V3 geöffnet (xx ist die Nummer des Laborbenutzers unter dem gearbeitet wird, also<br />

z.B. 10 bei labor10.<br />

Danach kann mit der Erstellung der e<strong>in</strong>zelnen Activity­ und Statecharts begonnen werden.<br />

Es können jetzt auch weitere Charts aus anderen Projekten importiert werden.<br />

Statemate benötigt auf jeden Fall e<strong>in</strong> Activitychart, welches als Task def<strong>in</strong>iert werden muss.<br />

Dazu wird zunächst das Activitychart erstellt.<br />

Bitte beachten Sie, dass das Chart als „Regular“ angelegt wird.<br />

Abbildung 1: Activity mit Control Chart<br />

Im Data Dictionary des Activitycharts unter den Design Attributes der Type Task ausgewählt.<br />

Die Task muss Automatisch gestartet werden (autostart)<br />

Labor Codegenerierung für <strong>C167</strong> Seite 6/15


Abbildung 2: E<strong>in</strong>tragungen zur Activity im Data Dictonary<br />

Abbildung 3: E<strong>in</strong>tragungen zu Design Attributes „Task“<br />

Labor Codegenerierung für <strong>C167</strong> Seite 7/15


Statechart erstellen<br />

Jetzt kann das zugehörige Statechart erstellt werden. Das im Folgenden abgebildete Chart ist<br />

nur e<strong>in</strong> Beispiel. Die hier verlangte Applikation kann deutlich e<strong>in</strong>facher modelliert werden!<br />

Abbildung 4: Beispiel e<strong>in</strong>es Statecharts<br />

Labor Codegenerierung für <strong>C167</strong> Seite 8/15


Programmieren der Boardspezifischen E<strong>in</strong>­ und Ausgabe<br />

In den e<strong>in</strong>zelnen Zuständen, wird nun e<strong>in</strong>e Subrout<strong>in</strong>e erstellt, <strong>in</strong> welcher der C­Code<br />

geschrieben wird.<br />

Die Subrout<strong>in</strong>e wird, ähnlich wie e<strong>in</strong>e C­Funktion im Feld „reaction“ im Data Dictonary­<br />

E<strong>in</strong>trag des jeweiligen Zustandes aufgerufen.<br />

Beispiele:<br />

enter<strong>in</strong>g/TASTER=taster_abfrage_sr();<br />

oder<br />

enter<strong>in</strong>g/led1_e<strong>in</strong>_sr();<br />

Die Wahl der Namen der e<strong>in</strong>zelnen Subrout<strong>in</strong>en ist frei.<br />

Anschließen müssen die Subrout<strong>in</strong>en implementiert werden, <strong>in</strong>dem sie im data Repository<br />

bearbeitet werden.<br />

Dort soll zunächst der Typ (mit oder ohne Rückgabewert) def<strong>in</strong>iert werden, danach folgt die<br />

Implementierung. Diese ist unter dem Menüpunkt „Implementation“ zu f<strong>in</strong>den. Bei der<br />

Zielsprache „ANSI­C“ wird e<strong>in</strong> entsprechender Rumpf erzeugt, der dann mit dem<br />

entsprechenden Verhalten im Editor gefüllt werden kann.<br />

Der hier abgebildete C­Code ist nur e<strong>in</strong> Beispiel, im Labor verwenden Sie bitte den<br />

eigenen, richtigen Code!<br />

Abbildung 5: Beispielcode e<strong>in</strong>er Subrout<strong>in</strong>e, der e<strong>in</strong>e Taste e<strong>in</strong>liest und die LEDs ausschaltet<br />

Labor Codegenerierung für <strong>C167</strong> Seite 9/15


Generierung des Codes für <strong>C167</strong><br />

Nachdem dies geschehen ist, wird nun alles gespeichert und es kann mit der Codegenerierung<br />

fortgefahren werden. Die Codegenerierung bef<strong>in</strong>det sich unter Tools­> <strong>MicroC</strong> Code<br />

Generator<br />

Dann muss e<strong>in</strong> neues Profil und e<strong>in</strong> Modul angelegt werden.<br />

Abbildung 6: Profile mit Modul zur Codegenerierung<br />

Unter Options muss nun die Option Set Target Configuration ausgewählt und das Ziel<br />

<strong>C167</strong>_OSEK e<strong>in</strong>gestellt werden.<br />

Abbildung 7: Auswahl des Zielsystems<br />

Labor Codegenerierung für <strong>C167</strong> Seite 10/15


Als nächstes muss der Name des erzeugten Moduls als Additional Object e<strong>in</strong>getragen werden.<br />

Dies geschieht unter dem Menüpunkt „Options­>Sett<strong>in</strong>gs“ im Tab „Application<br />

Configuration“ und dort mit dem Button Application Files (siehe Abbildung 8).<br />

Abbildung 8: E<strong>in</strong>stellung der zusätzlichen Module (Teil 1)<br />

Tragen Sie bei „Additional Objects“ den Namen des Moduls e<strong>in</strong>, den Sie im<br />

Codegenerierungungsprofil gewählt haben (siehe Abbildung 9).<br />

Labor Codegenerierung für <strong>C167</strong> Seite 11/15


Abbildung 9: E<strong>in</strong>stellung der zusätzlichen Module (Teil 2: Modulname bei „Additional Objects“)<br />

Jetzt kann der Code erzeugt werden (mit „generate Code“).<br />

Dann kann <strong>Rhapsody</strong> <strong>in</strong> <strong>MicroC</strong> geschlossen und <strong>in</strong> den W<strong>in</strong>dows­Explorer gewechselt<br />

werden.<br />

Anpassung der generierten Dateien<br />

Mit Hilfe des Tools „<strong>Rhapsody</strong>patcher“ kann der generierte Code an das Zielsystem angepasst<br />

werden (e<strong>in</strong>ige E<strong>in</strong>träge im C­Code und dem OIL­File werden geändert). Danach kann aus<br />

dem Tool mit „make“ die Übersetzung (Crosscompilierung) auf das Zielsystem durchgeführt<br />

werden.<br />

Labor Codegenerierung für <strong>C167</strong> Seite 12/15


Übertragung auf den <strong>C167</strong><br />

Dieses Kapitel basiert auf dem 1. Praxissemesterbericht von Maryam Kharazmi.<br />

Board programmierbereit schalten<br />

Der DIP­Schalter 1 auf dem Controller­Brett muß auf on gestellt se<strong>in</strong>. Dann muß die Reset­<br />

Taste betätigt werden, damit die alten Dateien auf dem Chip gelöscht und das neue Programm<br />

geladen werden kann.<br />

Flashtool starten<br />

Das mit <strong>Rhapsody</strong> <strong>in</strong> <strong>MicroC</strong> erstellte B<strong>in</strong>ärfile wird mit Hilfe des phytec­>Flashtool auf den<br />

Microcontroller übertragen. Beim Start öffnet sich e<strong>in</strong> Fenster, <strong>in</strong> dem bei Supported Target<br />

Hardware KITKON­>KITKON­167­>Connect ausgewählt wird.<br />

Abbildung 10: Auswahl des Zielboards im Flashtool<br />

Labor Codegenerierung für <strong>C167</strong> Seite 13/15


Serielle Kommunikation e<strong>in</strong>stellen<br />

Anschließend muß im Fenster von Properties for serial communication die Schnittstelle<br />

(COM 1 oder 2) und die Baudrate (57600 Bit/s) festgelegt werden.<br />

Abbildung 11: Schnittstellenparameter für die Verb<strong>in</strong>dung zwischen PC und <strong>C167</strong>­Karte<br />

Sektoren im Flash löschen<br />

Bei Sector Status Information müssen nun alles Speichersektoren gelöscht werden, d.h alle<br />

Sektoren auswählen und dann auf Erase sector(s) clicken.<br />

Abbildung 12: Übersicht über die Sektoren der Karte im Flashtool<br />

Labor Codegenerierung für <strong>C167</strong> Seite 14/15


B<strong>in</strong>ärdatei downloaden<br />

Dann muß der Tab „Filedownload“ ausgewählt werden und mit „Fileopen“ die Datei mit der<br />

Endung .hex ausgewählt werden. Der download wird durchgeführt durch öffnen und<br />

download. Die Datei t.hex bef<strong>in</strong>det sich im Verzeichnis H:\rmc\wa\V3\prt\.<br />

Abbildung 13: File download Dialog<br />

Abschließender Reset<br />

Auf dem Brett den DIP­Schalter 1 auf aus stellen und Reset­Taste betätigen damit das<br />

Programm ausgeführt werden kann. Das Programm startet automatisch!<br />

Labor Codegenerierung für <strong>C167</strong> Seite 15/15

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!