Transcript
U1 Organisatorisches
U1 Organisatorisches ■ Tafelübungen: Windows-Umgebung ◆ Räume 01.155-N und 01.153 ◆ Integrierte Entwicklungsumgebung AVR-Studio
■ Rechnerübungen (SPiC) ◆ Raum 01.155 ◆ Verwendung eine Windows-VM unter Linux
■ Ziele der heutigen Tafelübung (1) wie schreibe ich ein Programm unter Windows (2) wie lade ich dieses Programm auf das Entwicklungsboard SPiC - Ü
(3) wie arbeite ich das Programm schrittweise ab (Fehlersuche/Debugging) (4) wie gebe ich eine Übungsaufgabe ab (unter Linux)
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.1
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-1 Login in die Windows-Umgebung
U1-1 Login in die Windows-Umgebung ■ Zur Nutzung der Windows-PCs zunächst mit dem Kommando /local/ciptools/bin/setsambapw
ein Windows-Passwort setzen. ➤ Achtung: Passwörter werden erst nach etwa 10 Minuten aktiv!
■ Setzen Sie jetzt soweit noch nicht geschehen im Raum 01.155 Ihr Windows-Passwort
SPiC - Ü
■ Melden Sie sich dann an der Windows-Domäne ICIP an
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.2
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-2 Tafelübung
U1-2 Tafelübung ■ Keine Anwesenheitspflicht ■ Es wird jedoch eine zufällig ausgewählte Lösung besprochen; Bei abwesenheit gibt es gegebenenfalls 0 Punkte.
SPiC - Ü
◆ Gegebenenfalls vorher beim Übungsleiter abmelden
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.3
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-3 Rechnerübungen (SPiC)
U1-3 Rechnerübungen (SPiC) ■ Termine: ◆ Mo 12:00 - 14:00 ◆ Mi
8:00 - 10:00
◆ Mi 14:00 - 16:00 ◆ Do 10:00 - 12:00 ◆ Do 16:00 - 18:00
■ Sonstiges:
SPiC - Ü
◆ wenn bis 30 Minuten nach Übungsbeginn (hh:30 Uhr) keine Teilnehmer anwesend sind, können die Übungsleiter die Rechnerübung vorzeitig beenden ◆ In 01.155 sind Linux-Rechner. Es gibt daher die Möglichkeit in einer Virtuellen Maschine unter Windows zu arbeiten. Alternativ ist auch das Arbeiten unter Linux möglich. Siehe Anhang. ◆ Genaue Anleitung zur KVM auf der Webseite Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.4
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-4 Entwicklungsboards
U1-4 Entwicklungsboards ■ 30 SPiC-Boards ◆ ATmega32-Mikrokontroller (MCU)
■ 22 Hardware-Debugger (groß mit 10-pol. Stecker) ◆ Entwicklung direkt auf den Boards ◆ Überwachung des Programms während der Ausführung (Debugging) ◆ Nutzung des Simulators entfällt ◆ Anschluss an den JTAG-Port des Boards
■ 10 ISP-Programmer (klein mit 6-pol. Stecker) ◆ kein Debugging möglich SPiC - Ü
◆ Anschluss an den ISP-Port des Boards
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.5
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-4 Entwicklungsboards
U1-4 Entwicklungsboards
LED Reihe (active low) LED 0 (Red 0, PD7)
T (e ast nt er pr 0 el lt, PD 2)
T (p ast re er llt 1 ,P D 3)
JTAG Anschluss
LED 1 (Yellow 0, PC0) Stromversorgung
LED 2 (Green 0, PC1) LED 3 (Blue 0, PC6) LED 4 (Red 1, PC7) LED 5 (Yellow 1, PA7)
7−Segment Anzeigen LED 6 (Green 1, PA6) Einer (Connector PD1) LED 7 (Blue 1, PA5) Zehner (Connector PD0)
PB3
PB5
ISP Anschluss
PB2 PB1
Fotowiderstand an ADC0
(active low)
PB6
SPiC - Ü
PB4
Potentiometer (POTI) an ADC1
PB0
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.6
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-5 SPiCboard-Bibliothek
U1-5 SPiCboard-Bibliothek ■ Funktionsbibliothek zur einfachen Verwendung der Hardware ◆ Konfiguration des Mikrokontrollers durch den Anwender entfällt
■ V erwendung v.a. in der Anfangsphase ■ Dokumentation zu den einzelnen Funktionen online verfügbar
SPiC - Ü
http://www4.cs.fau.de/Lehre/SS10/V_SPIC/Uebung/doc http://www4.cs.fau.de/Lehre/SS10/V_GSPIC/Uebung/doc
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.7
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-5 SPiCboard-Bibliothek
1 Projektverzeichnisse ■ Spezielle Projektverzeichnisse zur Bearbeitung der Übungsaufgaben ➤ Unter Linux: /proj/i4gspic/login-Name ➤ Unter Windows: Laufwerk P:
■ Aufgaben sollten ausschließlich im Projektverzeichnis bearbeitet werden ➤ Nur vom eigenen Benutzer lesbar ➤ Suchverzeichnis des Abgabeprogramms
■ Werden nach Waffel-Anmeldung binnen eines Tages erzeugt
2 UNIX-Heimverzeichnisse SPiC - Ü
■ Unter Windows: Laufwerk H: ■ Zugriff auf Ihre Dateien aus der Linux-Umgebung
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.8
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-5 SPiCboard-Bibliothek
3 Vorgabeverzeichnis ■ Unter Linux: /proj/i4gspic/pub ■ Unter Windows: Laufwerk Q: ■ Hilfsmaterial zu einzelnen Übungsaufgaben ➤
z.B. /proj/i4gspic/pub/aufgabe0
■ Testprogramm für die Entwicklungsboards ➤
/proj/i4gspic/pub/boardtest
■ Hilfsbibliothek (Board-Support-Package) und Dokumentation ➤
/proj/i4gspic/pub/i4
SPiC - Ü
■ Werkzeuge zur Entwicklung unter Linux ➤
/proj/i4gspic/pub/tools
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.9
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
U1-6 Windows-Umgebung ■ Verwendung der Entwicklungsumgebung AVR-Studio ◆ vereint Editor, Compiler und Debugger in einer Umgebung ◆ komfortable Nutzung der JTAGICE-Debugger
1 Compiler ■ Um auf einem PC Programme für den AVR-Mikrokontroller zu erstellen, wird ein Cross-Compiler benötigt ◆ Ein Cross-Compiler ist ein Compiler, der Code für eine Architektur generiert, die von der Architektur des Rechners, auf dem der Compiler ausgeführt wird, verschieden ist. SPiC - Ü
◆ Hier: Compiler läuft auf Intel x86 und generiert Code für AVR. ◆ AVR-Studio + WinAVR (Windows) ◆ GNU Compiler Collection (GCC) unter Linux
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.10
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
2 AVR Studio ■ Entwicklungsumgebung von Atmel ■ Simulator und Debugger für alle AVR-Mikrokontroller ■ Start über das Startmenü Start - Alle Programme - Atmel AVR Tools - AVR Studio 4 ■ Anlegen eines neuen Projekts ◆ Projekttyp: AVR GCC ◆ Projektname: aufgabe0 ◆ Create Initial File und Create Folder aktivieren ◆ Initial File: blink.c
SPiC - Ü
◆ Location: P:\
■ Auswahl der Plattform JTAGICE mkII mit dem Gerät ATMega32 ◆ bei Verwendung der (kleinen) Programmer AVRISP mkII
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.11
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
3 AVR Studio-Projekteinstellungen ■ Setzen der Projekteinstellungen (Project - Configuration Options) ◆ Frequency: 1000000 Hz (1 MHz = 1.000.000) ◆ Optimization: -O0 ◆ Wichtig: Die vier Haken rechts daneben deaktivieren
■ Bereich Include Directories: Q:\i4\ aufnehmen ■ Bereich Libraries (bei Verwendung der SPiCboard-Bibliothek) ◆ Q:\i4\ in Library Search Path aufnehmen ◆ libspicboard.a bei Available Link Objects anwählen, Add Library klicken
■ Compileroptionen im Bereich Custom Options SPiC - Ü
◆ -std=gnu99 entfernen ◆ -ansi hinzufügen ◆ -pedantic hinzufügen ◆ -ffreestanding hinzufügen Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.12
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
4 Erstellen einer main()-Funktion ■ Auf dem Mikrokontroller ist die main()-Funktion vom Typ void main(void); ➤ Sollte niemals zurückkehren (wohin?) ➤ Rückgabetyp daher nicht sinnvoll ➤ Freistehende Umgebung (-ffreestanding)
■ Beispiel: Grüne LED einschalten
SPiC - Ü
#include void main(void) { int i=0; sb_led_on(GREEN0); while(1) { /* Endlosschleife*/ i++; } }
■ Kompilieren des Programmes mit F7 oder Build - Build Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.13
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
5 Flashen des Programms auf die MCU ■ Mit dem Debugger/Programmer verbinden Tools - Program AVR - Auto Connect ◆ ggf. aktuell angeschlossenen Debugger/Programmer auswählen
■ Reiter Main ◆ Device: ATmega32 ◆ wenn Debugger angeschlossen: Programming Mode: JTAG mode ◆ wenn Programmer angeschlossen: ISP Frequency max. 250 kHz
■ Reiter Program, Bereich Flash ◆ Input HEX File: aktuell übersetztes Programm auswählen SPiC - Ü
◆ normalerweise im Unterverzeichnis default des Projektverzeichnisses ◆ z.B. blink.hex
■ Program klicken, Programm wird auf die MCU geflasht
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.14
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
6 Starten des Simulators/Debuggers ■ Start des Debugging-Modus über Debug - Start Debugging ◆ Programm muss vorher nicht geflasht werden
■ Das Programm wird zunächst beim Betreten von main() angehalten ◆ Normal laufen lassen mit F5 oder Debug - Run ◆ Schrittweise abarbeiten mit ➤ F10 (step over): Funktionsaufrufe werden in einem Schritt bearbeitet ➤ F11 (step into): Bei Funktionsaufrufen wird die Funktion betreten
■ Die I/O-Ansicht (rechts) gibt Einblick in die Zustände der I/O-Register ◆ Die Register können auch direkt geändert werden. Funktion beenden
SPiC - Ü
■ Breakpoints unterbrechen das Programm einer bestimmen Stelle ◆ Codezeile anklicken, dann F9 oder Debug - Toggle Breakpoint ◆ Programm laufen lassen (F5), stoppt wenn ein Breakpoint erreicht wird
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.15
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
7 Starten des Simulators/Debuggers 2
Debugger starten
Breakpoint setzen
Kompilieren, flashen und starten
SPiC - Ü
Kompilieren
Debuggen beenden Autom. schrittweise Ausführung Programm ausführen Reset Nächste Anw. (Funk. überspingen) Nächste Anweisung ausführen Aktueller Befehl
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.16
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
8 Programm abgeben ■ Abgabeskript funktioniert nur in Linux-Umgebung ■ Remote-Login auf den Linux-Rechnern über (1) SSH (nur Terminalfenster) ◆ im Startmenü Secure Shell Client starten ◆ verbinden mit einem beliebigen Linux-Rechner, z.B. faui01 ◆ Login mit den UNIX-Zugangsdaten (2) Remote X (volle grafische Desktop-Umgebung) ◆ im Startmenü im Menü Linux-Terminal einen beliebigen Rechner wählen ◆ Login-Fenster erscheint, dort anmelden
SPiC - Ü
◆ danach ein Terminal-Fenster öffnen, z.B. Konsole unter KDE
■ Im Terminal-Fenster folgendes Kommando ausführen: /proj/i4gspic/pub/abgabe aufgabe0 ◆ hierbei die aktuelle Aufgabe einsetzen Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.17
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-6 Windows-Umgebung
UNIX/Linux ■ In der Übung arbeiten wir mit der AVRStudio Umgebung unter Windows ◆ Grundsätzlich gibt es auch die Möglichkeit, unter Linux zu arbeiten ◆ In der Übung nicht behandelt
SPiC - Ü
◆ Bei persönlichem Interesse mögen die folgenden Informationen hilfreich sein
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.18
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
U1-7 UNIX/Linux Benutzerumgebung ■ Kommandointerpreter (Shell) ➤ Programm, das Kommandos entgegennimmt und ausführt ➤ verschiedene Varianten, am häufigsten unter Linux: bash oder tcsh
■ Sonderzeichen ◆ einige Zeichen haben unter UNIX besondere Bedeutung ◆ Funktionen: ➤ Korrektur von Tippfehlern ➤ Einwirkung auf den Ablauf von Programmen
■ Übersicht: ( = ) SPiC - Ü
letztes Zeichen löschen (manchmal auch ) - C
Interrupt - Programm wird abgebrochen
- Z
Stop - Programm wird gestoppt (Fortsetzen mit fg)
- D
End-of-File
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.19
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
1 Toolchain: Vom Quellcode zum geflashten Binärabbild (1) Erstellen des Programmquellcodes mit einem Texteditor (z.B. vim oder kate) ◆ das Programm besteht ggf. aus mehreren Modulen ( = .c-Dateien ) ◆ und ggf. einer Schnittstellenbeschreibung/Header pro Modul ( = .h-Dateien ) ◆ modulare Programmierung ist Gegenstand einer späteren Übung (2) Übersetzen der C-Module zu Objektdateien mit einem C-Compiler (GCC) ◆ jedes C-Modul wird zu einer Objektdatei ( = .o-Datei ) kompiliert ◆ da wir Binärcode für den AVR erzeugen wollen, verwenden wir einen AVRCrosscompiler (avr-gcc) avr-gcc -c -o modul2.o modul2.c
SPiC - Ü
(3) Linken/Binden der Objektdateien zu einem ladbaren ELF-Binärabbild (.elf-Datei) ◆ mit GCC oder LD avr-gcc -o program.elf modul1.o modul2.o
(4) Flashen des Binärabbilds auf den Mikrokontroller ◆ z.B. mit avarice oder avrdude Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.20
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
2 Toolchain-Überblick
modul1.c
modul2.c
C-Quelltext
Kompilieren
modul1.o
modul2.o
AVR-Objektcode
Binden
program.elf
AVR-ELF Binärabbild
(program.hex) SPiC - Ü
Flashen
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.21
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
3 Texteditoren ■ verschiedene Editoren unter UNIX verfügbar ◆ vim ◆ emacs
■ für Einsteiger zu empfehlen: kate ◆ Starten ➤ durch Eingabe von kate in einer Shell ➤ oder über Auswahlmenü von KDE
■ Abspeichern der Quelltexte in Dateien mit der Endung .c im Projektverzeichnis
SPiC - Ü
◆ die zu entwickelnden Module und Dateinamen sind in der Aufgabenstellung vorgegeben
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.22
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
4 Kompilieren der C-Module ■ C-Quellcode wird mit einem C-Compiler (z.B. GCC) zu Binärcode für die Zielarchitektur (hier: 8-bit AVR) übersetzt: avr-gcc ■ Jede .c-Datei wird in eine Objektdatei übersetzt: Compileroption -c ■ Referenzen auf externe Symbole werden hierbei noch nicht aufgelöst ■ Weitere Compiler-Flags ◆ -mmcu=atmega32: teilt dem Compiler den Typ der Ziel-CPU mit ◆ -ansi: wählt den C-Standard ISO C90 ◆ -Wall: aktiviert viele Warnungen, die auf evtl. Programmierfehler hinweisen
SPiC - Ü
◆ -pedantic: aktiviert weitere Warnungen in Bezug auf ISO-C-Konformität ◆ -O0 bzw. -Os: Optimierungen deaktivieren bzw. nach Größe optimieren ☞ Debuggen mit -O0 -g, Testen mit -Os
■ Übersetzung eines C-Moduls modul.c dann zu modul.o mit Aufruf: avr-gcc -Os -c -mmcu=atmega32 -ansi -pedantic -Wall modul.c Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.23
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
5 Binden der Objektdateien ■ Im Bindeschritt werden offene Symbolreferenzen aufgelöst ■ Binden z.B. mit avr-gcc ■ Beispiel: Programm aus den Modulen modul1.o und modul2.o ◆ mit avr-gcc (-o bestimmt den Namen der Zieldatei, hier program.elf): avr-gcc -mmcu=atmega32 -o program.elf modul1.o modul2.o
■ GCC kann auch in einem Schritt kompilieren und binden: avr-gcc -mmcu=atmega32 ... -o program.elf modul1.c modul2.c
◆ Vorteil: Übersetzer sieht komplettes Programm ➡ globale Optimierungen
SPiC - Ü
• in aktuellen GCC Versionen: Compiler-Flags -combine -fwhole-program ◆ Nachteil: Alle Module müssen komplett übersetzt werden, auch wenn man nur ein Modul verändert hat ◆ Für kleine Programme ist diese Variante aber oft die bessere Wahl
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.24
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
6 Flashen des ELF-Images ■ Ablegen des Binärabbilds im Flash-ROM des Mikrokontrollers ◆ z.B. mit unserem Debugger und dem Programm avarice ◆ wir haben das entsprechende Kommando in einem Makefile abgelegt ◆ Beispiel: Flashen des Binärabbilds program.hex: make -f /proj/i4gspic/pub/i4/debug.mk program.hex.flash
■ Nach jedem Reset lädt der Bootloader des Mikrokontrollers die relevanten Sektionen in den RAM und startet die Ausführung
SPiC - Ü
■ Für einfache Programme (nur eine C-Datei program.c) übernimmt obiger Aufruf zum Flashen auch die Übersetzung
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.25
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
7 Debugging unter Linux (Hintergrundinfo) ■ Der Debugger vereinfacht die Fehlersuche im Programm ◆ schrittweises Abarbeiten des Programms ◆ Beobachten der Werte von Variablen ◆ Haltepunkte (Breakpoints), auch abhängig von Bedingungen
■ Die JTAG-Debugger erlauben das Debugging der Ausführung direkt auf dem Mikrokontroller ■ Unter Linux ist das Debugging leider mit Schmerzen verbunden ◆ Stepping durch den Code sehr langsam
SPiC - Ü
◆ GDB-Stub stürzt gelegentlich ab
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.26
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
7 Anschluss des Debuggers ■ Verbinden des Debuggers mit dem JTAG-Anschluss auf dem SPiCboard ■ Board und Debugger an zwei USB-Ports des Rechners anschließen ◆ Achtung: der Debugger funktioniert nicht zuverlässig an den SunRays, daher "richtige" Rechner verwenden
■ Das Programm avarice öffnet einen GDB-Stub und fungiert so als Mittler zwischen JTAG-Debugger und Software-Debugger (avr-gdb) ■ GDB-Stub-Rechner und Debug-Rechner sind normalerweise identisch
SPiC - Ü
JTAG
USB
TCP/IP avarice
SPiCboard
JTAG ICE
GDB-Stub
avr-gdb GDB Debugger
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.27
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
7 Verwendung des Debuggers ■ Flashen des Binärabbilds program.elf in den Mikrokontroller ◆ das Binärabbild sollte mit Debug-Symbolen erzeugt werden: ☞ zusätzliches Compiler-Flag -g bei der Übersetzung verwenden ◆ Compiler-Optimierungen sollten deaktiviert werden: -O0
■ Starten des GDB-Stubs avarice make -f /proj/i4gspic/pub/i4/debug.mk dbgstub
■ Starten des Debuggers avr-gdb auf dem gleichen Rechner avr-gdb program.elf
SPiC - Ü
◆ das hier verwendete Binärimage muss mit dem in den Mikrokontroller geflashten Abbild übereinstimmen!
■ Verbinden des Debuggers mit dem GDB-Stub target remote localhost:4242
■ Das Programm ist gestoppt an der ersten Instruktion Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.28
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
7 Wichtige GDB-Kommandos ■ Schrittweises Abarbeiten des Programms ◆ n: führt nächste Zeile C-Code aus, übergeht Funktionen ◆ s: wie n, steigt aber in Funktionen ab
■ Setzen von Breakpoints (Haltepunkten) ◆ Anzahl durch die Hardware auf 3 beschränkt ◆ b [Dateiname:]Funktionsname [condition] ◆ b Dateiname:Zeilennr. [condition] ◆ Die Ausführung stoppt bei Erreichen der angegebenen Stelle ◆ wenn condition angeben (C-Ausdruck) nur dann, wenn Bedingung erfüllt ist
SPiC - Ü
◆ Breakpoints anzeigen: info breakpoints ◆ Breakpoint löschen (Nr. des Breakpoints aus Anzeige): d BreakpointNr
■ Fortsetzen der Programmausführung bis zu Haltepunkt: c
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.29
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
U1-7 UNIX/Linux Benutzerumgebung
7 Wichtige GDB-Kommandos ■ Watchpoints: Stop der Ausführung bei Zugriff auf eine bestimmte Variable ◆ watch expr: Stoppt, wenn sich Wert des C-Ausdrucks expr ändert ◆ rwatch expr: Stoppt, wenn expr gelesen wird ◆ awatch expr: Stoppt bei jedem Zugriff (kombiniert rwatch und watch) ◆ expr ist ein C-Ausdruck, im einfachsten Fall der Name einer Variable ◆ Achtung: für jedes Byte des Ausdruks wird ein Hardware-Breakpoints verbraucht, watch auf einen int belegt also zwei Hardware-Breakpoints!
SPiC - Ü
■ Weitere im Reference-Sheet (☞ Doku-Bereich der Webseite)
Systemnahe Programmierung in C — Übungen
Moritz Strübe, Michael Stilkerich • Universität Erlangen-Nürnberg • Informatik 4, 2010
U1.fm 2010-05-03 11.04
U1.30
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.