MIKROPROZESSOR PROGRAMMIERUNG LV

Werbung
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
MIKROPROZESSOR
PROGRAMMIERUNG
7. VORLESUNG
BIT
LV-Nr. 439.026
SS2007
1
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
SOFTWAREENTWICKLUNG FÜR µC
Übersicht - Prinzipdarstellung
Der Weg zu einem lauffähigen
Maschinenprogramm
Vergleich von
Programmiersprachen
Ein µC-Anwenderprogramm
generieren
Demonstration einer µC
Entwicklungsumgebung
Einführung in die „Embedded
Systems“ C - Programmierung
2
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Praktisches Problem für µC- Experten …
3
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
SOFTWAREENTWICKLUNG FÜR µC
PRINZIPDARSTELLUNG
ENTWICKLUNGSUMGEBUNG
Quelldateien
Versions-Verwaltung
freigegebene Quelldateien
integrierte
Entwicklungsumgebung
Editor
geänderte Quelldateien
Übersetzer
Compiler
Objekt-Dateien
Symbole
Binder
Test
Debugger
Anwendungsprogramm
Linker
Ausführbare Datei
Entwicklungssystem: PC
Download
PROGRAMMENTWICKLUNG
PersonalComputer
Zielsystem:
Mikrocontroller
µC-System
µC-Applikation
4
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
PROGRAMMIERSPRACHEN FÜR µC:
• (früher) Assembler
• heute meist C, nur zeitkritische Teile in Assembler
• bei leistungsfähigeren Mikrocontrollern auch C++
& erfordert aber mehr Ressourcen
& und erzeugt mehr Dynamik
• Java in der Regel zu ressourcen- intensiv
• es existieren jedoch einige Forschungsbemühungen
in diese Richtung
• weiche Echtzeit: Java, C#, VB u.a.
PROGRAMMGENERATOREN FÜR µC:
• UML (Unified Modeling Language)
• Blockschaltbild (Matlab/Simulink)
• DAVE (Digital Application virtual Engineer )
•…
UML
5
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
MASCHINENSPRACHE - ASSEMBLER
Ein Assembler in der Informatik ist ein spezieller
Compiler, das ein in einer maschinennahen
Assemblersprache geschriebenes Programm in
Maschinensprache übersetzt. Oft wird der
Ausdruck Assembler auch als Abkürzung oder
Synonym für Assemblersprache verwendet.
ASSEMBLER:
Für jeden Computertyp gibt es spezielle, auf den Befehlsvorrat des Computers zugeschnittene
Assemblersprache. Der Prozess der 1:1 Übersetzung dieser Assemblersprache in die
Maschinensprache heißt „Assemblieren“.
HINWEIS:
Assemblersprache wird immer seltener eingesetzt. Der Möglichkeit der Erstellung effizienter Programme steht die
erschwerte Wartbarkeit von Assemblerprogrammen gegenüber. Maschinennahe Programmierung – die Domäne
von Assembler – kann heute fast vollständig durch höhere Programmiersprachen abgedeckt werden. Auch ist die
Programmierung heutiger Prozessoren in Assemblersprache zur Geschwindigkeitsoptimierung schwierig, da
zahlreiche Nebenbedingungen eingehalten werden müssen, damit der Prozessor in optimaler Geschwindigkeit läuft,
während auf der anderen Seite optimierende Compiler für Hochsprachen immer besseren Code erzeugen und diese
Bedingungen automatisch erfüllen können
6
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
COMPILER
Allgemein:
Ein Compiler erzeugt aus einem Quellprogramm, das in einer Quellsprache
geschrieben ist, ein Zielprogramm in einer Zielsprache (z.B. C)
Aufgaben
• Hochsprache wird durch Übersetzer (Compiler) in Maschinensprache übersetzt
• Das erzeugte Programm wir dann auf die Zielmaschine geladen und ausgeführt
• Die Interpretation der Befehle erfolgt direkt durch die Hardware / Betriebssystem
der Zielmaschine (µC)
• Jede Zielsprache benötigt eigenen Übersetzer (Compiler)
• Weiterhin
Laufzeitsystem, Speicherverwaltung, Typprüfung …
• Betriebssystembibliotheken müssen dazu gebunden werden (Linker)
Laufzeitssystem:
Bereitstellung aller Routinen, die zur Ausführung eines Programms in einer
Programmiersprache erforderlich sind (Interaktionen mit dem
Betriebssystem, Speicheranforderungen, Prüfungen der dynamischen
Semantik, Fehlerroutinen usw.)
Hinweis: Semantik (Bedeutungslehre)
Linken:
.hex
Überführung des vorliegenden Maschinencodes in ein ausführbares
Programm
Binden aller Teile des Programms (getrennt übersetzte Dateien,
Bibliotheksfunktionen, Fehler- und Speicherverwaltungsroutinen des
Laufzeitsystems) zu einem lauffähigen Programm
7
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
VERGLEICH VON PROGRAMMIERSPRACHEN:
Sprache
Quelltext
C
#include <stdio.h>
main()
{ printf ( "hello, world\n"); }
C++
#include <iostream>
main()
{std::cout << "hello, world" << std::endl;}
Pascal
program hallop;
{$APPTYPE CONSOLE}
begin writeln ('hello, world') end.
Assembler
0100: mov dx, 010a
0103: mov ah, 09
0105: int 21
0107: jmp 0000
010a: db 'hello world' 0d 0a '$'
Ein Assembler-Programm kommt mit einem winzigen
Bruchteil der Bytes aus, die beim Übersetzen durch C++Entwicklungssysteme belegt werden, und C++-Compilate
machen sich auf der Festplatte und im Speicher
unverschämt breit. Obgleich sich solche Beobachtungen an
Miniprogrammen nur höchst eingeschränkt auf reale
Software-Produkte üblichen Umfangs übertragen lassen, so
sagen sie doch eines: Besonders wirtschaftlich geht C/C++
beim Linken nicht vor, die ausführbare Datei ist mit
hunderttausenden ungenutzter Bytes aufgeplustert.
Übersetzer
C-Programm
C++-Programm
Pascal-Programm
AssemblerProgramm
Pascal
—
—
29 116 byte
—
C
45 000 byte
12 006 byte
—
—
GCC 3.2
11 000 byte
562 928 byte
—
—
Debug
—
—
—
24 byte
8
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
SPEICHERBEDARF:
• hier liegt ein wesentlicher Unterschied zur
Programmentwicklung auf dem PC
• bei Mikrocontrollern ist Speicher eine
knappe Ressource
(z.B. 6KB RAM, 128KB FLASH)
• Übersetzer optimieren meist in Richtung
Speicherbedarf (selten Geschwindigkeit)
• Speichersparende Algorithmen sind gefragt
• Algorithmen, die vor 10-20 Jahren für den
PC entwickelt wurden, können hier
interessant werden (zu dieser Zeit hatten
PCs etwa den Speicherumfang heutiger
Mikrocontroller)
Überlegungen:
• wie viel Programm- und Datenspeicher
benötigt die Anwendung?
• Reicht die Größe des internen Daten- und
Programmspeichers?
• Ist ein externer Busanschluss vorhanden?
• max. externe Speichergröße?
9
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
ADRESSFESTLEGUNG BEIM BINDEN (LINKEN):
Memory Map: Fujitsu Mikrocontroller
• bei PCs: dynamische Adressfestlegung zur
Laufzeit - nur so können mehrere Programme
gleichzeitig bearbeitet werden
• bei Mikrocontrollern: statische Festlegung der
Adressen beim Binden (Locator)
• Die Adressen müssen an das Speicherabbild
(Memory Map) des Mikrocontrollers angepasst
werden
& Programm -> Festwertspeicher
& Daten -> Schreiblesespeicher
• erste Programm-Instruktion,
Interrupttabellen, ... , müssen an die richtige
Stelle gelegt werden
10
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Ein Mikrocontroller-Anwenderprogramm generieren:
COMPILER
Quellcode &
ProgrammBibliotheken
FLASH-Programmer-TOOL:
.hex
z.B. JTAG
RS232
Maschinensprache
µC-Anwendung
11
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
LADEN, SIMULIEREN UND TESTEN:
Simulator auf dem Entwicklungssystem
• grober Test, da Zeitverhalten anders und Zielperipherie nicht
vorhanden
Test auf dem Zielsystem mittels Download und Monitor
• näher am Zielsystem (Zeitverhalten, Peripherie)
• immer noch komfortables Testen
• Monitor verändert Systemverhalten (Initialisierungen, Speichertypen, ...)
Test auf dem Zielsystem ohne Monitor
• endgültige Zielumgebung
• Programm im Festwertspeicher
(ext. Programmieren oder Flash-Code-Loader)
• Ladezeiten lang
• Test schwierig
Entwicklungsumgebung
µVision3 IDE & Debugger
IDE … Integrated Development Environment
12
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
DEMONSTRATION EINER
µC- ENTWICKLUNGSUMGEBUNG
13
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
DEMONSTRATION EINER
µC- ENTWICKLUNGSUMGEBUNG
14
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Empfohlene Literatur
Softwareentwicklung in C für Mikroprozessoren und
Mikrocontroller
Softwareentwicklung, Programmiersprache C, Embedded Systems, Mikroprozessor/Mikroprozessor/-controller
Jörg Wiegelmann, 2. Auflage Hüthnig
ISBN 33-77857785-28242824-6
C für Mikrocontroller
ANSIANSI-C, CC-Compiler/Linker, Echtzeitbetriebssysteme, CC-Programmierbeispiele, Tools für die
Programmierung, Tipps und Tricks
Burkhard Mann, 2. Auflage Franzis
ISBN 33-77237723-41564156-X
C166 Compiler - µVision 3 Manual
LV Homepage
http://www.keil.com
http://www.keil.com
15
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
µC-Programm Gliederung :
• Compiler – Steueranweisungen
• Datendefinitionen
• Funktionen (Functions)
• Interrupt – Functions
• Main - Programm
16
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Compiler - Steueranweisung
Der Aufruf von Compiler-Steueranweisungen ist natürlich nicht ausschließlich auf den
Programmbeginn beschränkt. Normalerweise befinden sich am Programmanfang aber eine
Reihe von diesen Befehlen. Sie werden auch durch die Programmieroberfläche eingefügt.
Der Präprozessor ist ein wichtiges Werkzeug zur Vorverarbeitung von C-Texten vor ihrer
Übersetzung durch den Compiler. Er erledigt folgende Aufgaben:
• Ersetzen von Makros
• Einfügen von Dateien
• bedingtes Übersetzen
Der Präprozessor wird durch folgende Anweisungen gesteuert, die alle mit
dem #Zeichen beginnen:
#define, #undef, #if, #endif, #ifdef, #ifndef, #else, #include, #pragma, #line, #error , …
17
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Compiler - Steueranweisung
#define
Mit define-Anweisungen können häufig verwendete Konstanten durch Namen ersetzt werden.
Beispiel: #define DIGIT 0x34
#undef
Mit der undef-Anweisung kann ein Makro wieder gelöscht werden
#ifdef
#ifndef
Hiermit kann abgetestet werden, ob ein Makro überhaupt definiert ist. #ifdef ist wahr, wenn ein Makro vorhanden
ist, #ifndef ist wahr, wenn ein Makro nicht vorhanden ist.
#include
Diese Anweisung ist besonders wichtig. Mit ihr können ganze Dateien in einen C-Text eingefügt werden.
#pragma
Mit #pragma werden compilerspezifische Ausnahmen definiert
#error
Diese Anweisung löst einen schweren Compilerfehler aus und gibt den nachgestellten Text an
;
Bei allen Präprozessoranweisungen gilt es zu beachten, dass sie nicht mit Semikolon ;
abgeschlossen werden dürfen !
18
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Datendefinitionen
In diesem Abschnitt des Programms werden Variable definiert und dafür Speicherstellen reserviert.
Unterteilung nach:
1. Verfügbarkeit
2. Speicherort
3. Type
Nicht vergessen Variablen zu initialisieren!
a.) Unterteilung nach der Verfügbarkeit:
• Globale Variablen (extern)
Diese müssen außerhalb aller Funktionen definiert werden und
gelten ab diesem Zeitpunkt im ganzen Programm. Falls sie
zusätzlich static definiert werden, gelten sie nur in diesem Modul.
• Lokale Variablen (static, automatic)
Diese werden in der jeweiligen Funktion definiert und stehen nur
innerhalb der jeweiligen Funktion zur Verfügung. Der Linker
überlagert, nachdem er überprüft hat, ob sich zwei Funktionen
gegenseitig nicht aufrufen, diese Variablen, um Platz speziell im
kleinen internen RAM des Controllers zu sparen. Mit der
zusätzlichen Deklaration "static" kann dies verhindert werden,
sodass die jeweilige Variable ihren Wert behält. Wichtig für
Interrupts, hier kann keine Überprüfung zur Linkzeit erfolgen!!!
19
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Datendefinitionen
b) Unterteilung nach dem Speicherort:
Der Compiler unterstützt mehrere Speichermodelle, die den Speicherort automatisch bestimmen.
Man kann aber auch den Speicherort definieren, um eine für die Applikation optimale
Speicherverteilung zu erreichen.
near
idata
bdata
sdata
far
huge
xhuge
16 bit pointer; 16 bit Adressenberechnung
16 KB für Variable in der NDATA Gruppe,
16 KB für constants in der NCONST Gruppe,
16 KB für die system area in der SDATA Gruppe.
On-chip RAM ; schnellster Zugriff.
bit-adressierbares On-chip RAM.
SYSTEM area ( Adressenbereich 0C000h-0FFFFh); PEC adressierbar.
32 bit pointer; gesamter Adressenbereich
Das einzelne Objekt (array oder structure) ist auf 16 KB limitiert.
32 bit pointer; gesamter Adressenbereich
Das einzelne Objekt (array oder structure) ist auf 64 KB limitiert.
32 bit pointer; 32 bit Adressen für Objekte, die innerhalb des Speichers unlimitiert
sind.
20
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Datendefinitionen
b) Unterteilung nach Typen: (Teil 1)
21
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Datendefinitionen
b) Unterteilung nach Typen: (Teil 2)
• void … leer
• Pointer 2/4 Bytes Adresse von Objekten
• Arrays
bei allen Datentypen außer bit möglich
Dimension (n) in eckiger Klammer [n]
• Strukturen
mehrere Variablen werden zusammengefasst im Gegensatz
zu Arrays können diese verschiedene Datentypen beinhalten
• Unions
Es können verschiedene Datentypen in einer union Platz
finden. Sie werden dann ab der gleichen Speicheradresse
abgelegt. Der größte Datentyp bestimmt die Größe der union.
22
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
Herunterladen