Upload
others
View
13
Download
0
Embed Size (px)
Citation preview
Übungen zu Systemnahe Programmierung in C(SPiC) – Sommersemester 2019
Übung 1
Benedict HerzogBernhard Heinloth
Lehrstuhl für Informatik 4Friedrich-Alexander-Universität Erlangen-Nürnberg
Lehrstuhl für Verteilte Systeme und Betriebssysteme
Organisatorisches
Tafelübungen
Ablauf der Tafelübungen:1. Besprechung der alten Aufgabe2. Praxisnahe Vertiefung des Vorlesungsstoffes3. Vorstellung der neuen Aufgabe4. ggf. Entwicklung einer Lösungsskizze der neuen Aufgabe5. Hands-on: gemeinsames Programmieren
Folien nicht unbedingt zum Selbststudium geeignet→ Anwesenheit, MitschriftÜbersicht aller SPiC-Termine:https://www4.cs.fau.de/Lehre/SS19/V_SPIC/#wochSemesterplan:https://www4.cs.fau.de/Lehre/SS19/V_SPIC/#sem
1
Aufgaben
Kalenderwoche
17 18 19 20 21 22 23 24 25 26 27 28 29 30
Vorlesungszeit
blinksnake
led-modulspiel
ampelconcat
p.-dirmish
2
GSPiC
Studierende die GSPiC belegen müssen nur dieMikrocontroller-Aufgaben abgebenÐ→ blink, snake, led-modul, spiel, ampel
Freiwillige Teilnahme an den Linux-Aufgaben istselbstverständlich möglichEmpfehlung: Letzte bzw. letzten Übungen zurKlausurvorbereitung
3
Lösungen
Abgabe unter Linuxautomatische Plagiatsprüfung
Vergleich mit allen anderen (auch älteren) Lösungenabgeschriebene Lösungen bekommen 0 Punkte
⇒ Im Zweifelsfall beim Übungsleiter melden
Punktabzug-1 Punkt je Compilerwarnung-50% der möglichen Punkte falls nicht übersetzbar
(hilfreiche) Kommentare im Code helfen euch und demKorrektor
4
Bonuspunkte
abgegebene Aufgaben werden mit Übungspunkten bewertetab 50% der erreichbaren Übungspunkte gibt es Bonuspunktefür die KlausurUmrechnung der Übungspunkte in Bonuspunkte für die Klausur(bis zu 10% der Punkte)Ð→ Beispiel: 100% der Übungspunkte führen bei 90 möglichen
Klausurpunkten zu 9 Bonuspunkten
Bestehen der Klausur durch Bonuspunkte nicht möglichBonuspunkte nicht in nächste Semester übertragbar
5
Rechnerübungen
Räume der Rechnerübungen: 01.153-113 und 00.153-113Unterstützung durch Übungsleiter bei der AufgabenbearbeitungFreie Plätze nach dem „First come, first served“-PrinzipFalls 30 Minuten nach Beginn der Rechnerübung niemandanwesend ist, kann der Übungsleiter gehenTermine auf der Webseite:https://www4.cs.fau.de/Lehre/SS19/V_SPIC/#woch
6
CipMap
7
Anfragen via CipMap stellen
1. Besuche die Seite cipmap.cs.fau.de2. Wähle den Raum der Rechnerübung aus (z.B. 01.153-113)3. Klicke auf Lecture Mode.
farbiger Rechner: Hat einen Request gestelltgrauer Rechner: Kein Request gestellt
4. Durch einen Klick auf Request Tutor wird deine Anfrage in dieWarteschlange eingereiht
5. Nachdem deine Frage beantwortet wurde: Schaltfläche erneutklicken, um die Anfrage zurückzuziehen
Bitte beachte:
Anfragen können nur während einer Übung gestellt werdenLoggst du dich aus, werden deine Requests gelöscht
8
Bei Problemen
Folien konsultierenHäufig gestellte Fragen (FAQ) und Antworten:https://www4.cs.fau.de/Lehre/SS19/V_SPIC/SPiCboard/faq.shtml
Fragen zu Übungsaufgaben im EEI-Forum posten (darf auch vonanderen Studienrichtungen verwendet werden)https://eei.fsi.uni-erlangen.de/forum/forum/16bei speziellen Fragen Mail an Mailingliste, die alle Übungsleitererreicht: [email protected]⇒ zum Beispiel auch, wenn kein Übungsleiter auftauchen sollte
9
Entwicklungsumgebung
Hardware: SPiCboard
ATmega328PB Xplained Mini:Mikrocontroller-Board mit integriertem Programmer/DebuggerSpeziell für SPiC angefertigte SPiCboards alsErweiterungsplatine
10
Aufgabenbearbeitung
Betreute Bearbeitung der Aufgaben während derRechnerübungen⇒ Hardware wird während der Übung zur Verfügung gestellt
Selbständige Bearbeitung teilweise nötigeigenes SPiCboard: Anfertigung am Lötabend (nur imSommersemester)SPiCboard Simulator: SPiCsim
11
Funktionsbibliothek
libspicboard: Funktionsbibliothek zur Ansteuerung derHardwareBeispiel: sb_led_on(GREEN0); schaltet 1. grüne LED andirekte Konfiguration der Hardware durch Anwendungs-programmierer nicht nötigVerwendung vor allem bei den ersten Aufgaben, später musslibspicboard teils selbst implementiert werdenDokumentation online:https://www4.cs.fau.de/Lehre/SS19/V_SPIC/SPiCboard/libapi.shtml
12
Wichtige Verzeichnisse
Vorgabeverzeichnis /proj/i4spic/pub/Hilfsmaterial zu jeder Übungsaufgabe unter aufgabeX/die Vorlesungsfolien in vorlesung/die Übungsfolien in uebung/libspicboard mit Dokumentation sowie minimalen BeispielHilfestellung zur Programmiersprache C
Projektverzeichnis/proj/i4spic/LOGINNAME/Lösungen hier in Unterordnern aufgabeX speichern⇒ das Abgabeprogramm sucht (nur) dort
für andere nicht lesbarwird automatisch erstelltenthält symbolische Verknüpfung zum Vorgabeverzeichnis
13
Wichtige Verzeichnisse
Vorgabeverzeichnis /proj/i4spic/pub/Hilfsmaterial zu jeder Übungsaufgabe unter aufgabeX/die Vorlesungsfolien in vorlesung/die Übungsfolien in uebung/libspicboard mit Dokumentation sowie minimalen BeispielHilfestellung zur Programmiersprache C
Projektverzeichnis/proj/i4spic/LOGINNAME/Lösungen hier in Unterordnern aufgabeX speichern⇒ das Abgabeprogramm sucht (nur) dort
für andere nicht lesbarwird automatisch erstelltenthält symbolische Verknüpfung zum Vorgabeverzeichnis
13
Der Editor
14
Der Editor
im Startmenü unter FAU Courses Eintrag SPiC-IDEspeziell für SPiC entwickelt, basierend auf Atomvereint Editor, Compiler und Debugger in einer UmgebungCross-Compiler zur Erzeugung von Programmen fürunterschiedliche Architekturen
Wirtssystem (engl. host): Intel-PCZielsystem (engl. target): AVR-Mikrocontroller
detaillierte Anleitung auf https://www4.cs.fau.de/Lehre/SS19/V_SPIC/SPiCboard/cip.shtml
14
Anleitung
CIP-Login
Für die Benutzung der CIP Infrastruktur (und damit desAbgabesystems) ist ein CIP Login nötig
Bei Problemen bitte an die CIP Admins wenden
Kriterien für sicheres Passwort:Mindestens 8 Zeichen, besser 10Mindestens 3 Zeichensorten, besser 4 (Groß-, Kleinbuchstaben,Zahlen, Sonderzeichen)Keine Wörterbuchwörter, Namen, Login, etc.
15
Abgabe 1/2
Spätestens nach erfolgreichem Testen des Programms müssenÜbungslösungen zur Bewertung abgegeben werdenBei Zweiergruppen darf nur ein Partner abgeben!
Der Partner muss aus der selben Gruppe seinBei der Abgabe wird der Partner-Login hinterlegt
Abgabe entweder per SPiC IDE Button oderTerminal-Fenster öffnen und folgendes Kommando ausführen(aufgabeX entsprechend ersetzen):/proj/i4spic/bin/submit aufgabeX
Wichtig: Grüner Text signalisiert erfolgreiche Abgabe,roter Text einen Fehler!
16
Abgabe 2/2
FehlerursachenNotwendige Dateien liegen nicht im richtigen OrdneraufgabeX muss klein geschrieben sein.c-Datei falsch benanntAbgabetermin verpasst
Nützliche ToolsQuelltext der abgegebenen Aufgabe anzeigen:/proj/i4spic/bin/show-submission aufgabeXUnterschiede zwischen abgegebener Version und Version imProjektverzeichnis /proj/i4spic/<login> anzeigen:/proj/i4spic/bin/show-submission aufgabeX -dEigenen Abgabetermin anzeigen:/proj/i4spic/bin/get-deadline aufgabeX
17
Compileroptimierung
Compileroptimierung: Hintergrund
AVR-Mikrocontroller, sowie die allermeisten CPUs, können ihreRechenoperationen nicht direkt auf Variablen ausführen, die imSpeicher liegenAblauf von Operationen:1. Laden der Operanden aus dem Speicher in Prozessorregister2. Ausführen der Operationen in den Registern3. Zurückschreiben des Ergebnisses in den Speicher
⇒ Detaillierte Behandlung in der Vorlesung
Der Compiler darf den Code nach Belieben ändern, solange der“globale” Zustand beim Verlassen der Funktion gleich bleibtOptimierungen können zu drastisch schnellerem Code führen
18
Compileroptimierung: Beispiele
Typische Optimierungen:Beim Betreten der Funktion wird die Variable in ein Registergeladen und beim Verlassen in den Speicher zurückgeschriebenRedundanter und “toter” Code wird weggelassenDie Reihenfolge des Codes wird umgestelltFür automatic Variablen wird kein Speicher reserviert; es werdenstattdessen Prozessorregister verwendetWenn möglich, übernimmt der Compiler dieBerechnung (Konstantenfaltung):a = 3 + 5; wird zu a = 8;Der Wertebereich von automatic Variablen wird geändert:Statt von 0 bis 10 wird von 246 bis 256 ( = 0 für uint8_t )gezählt und dann geprüft, ob ein Überlauf stattgefunden hat
19
Compileroptimierung: Beispiel (1)
01 void wait(void) {02 uint8_t u8 = 0;03 while(u8 < 200) {04 u8++;05 }06 }
Inkrementieren der Variable u8 bis 200Verwendung z.B. für aktive Warteschleifen
20
Compileroptimierung: Beispiel (2)
Assembler ohne Optimierung
01 ; void wait(void){02 ; uint8_t u8;03 ; [Prolog (Register sichern, Y initialisieren, etc)]04 rjmp while ; Springe zu while05 ; u8++;06 addone:07 ldd r24, Y+1 ; Lade Daten aus Y+1 in Register 2408 subi r24, 0xFF ; Ziehe 255 ab (addiere 1)09 std Y+1, r24 ; Schreibe Daten aus Register 24 in Y+110 ; while(u8 < 200)11 while:12 ldd r24, Y+1 ; Lade Daten aus Y+1 in Register 2413 cpi r24, 0xC8 ; Vergleiche Register 24 mit 20014 brcs addone ; Wenn kleiner, dann springe zu addone15 ;[Epilog (Register wiederherstellen)]16 ret ; Kehre aus der Funktion zurück17 ;}
21
Compileroptimierung: Beispiel (3)
Assembler mit Optimierung
01 ; void wait(void){02 ret ; Kehre aus der Funktion zurück03 ; }
Die Schleife hat keine Auswirkung auf den Zustand↝ Die Schleife wird komplett wegoptimiert
22
Schlüsselwort volatile
Variable können als volatile (engl. unbeständig, flüchtig)deklariert werden
↝ Der Compiler darf die Variable nicht optimieren:Für die Variable muss Speicher reserviert werdenDie Lebensdauer darf nicht verkürzt werdenDie Variable muss vor jeder Operation aus dem Speicher geladenund danach ggf. wieder in diesen zurückgeschrieben werdenDer Wertebereich der Variable darf nicht geändert werden
Einsatzmöglichkeiten von volatile:Warteschleifen: Verhinderung der Optimierung der Schleifenebenläufigen Ausführungen (später in der Vorlesung)
Variable wird im Interrupthandler und der Hauptschleife verwendetÄnderungen an der Variable müssen “bekannt gegeben werden”
Zugriff auf Hardware (z.B. Pins) ↝ wichtig für das LED Modul(Debuggen: der Wert wird nicht wegoptimiert)
23
Aufgabe: blink
Aufgabenbeschreibung: blink
Lernziel:Umgang mit Programmierwerkzeugen und dem AbgabesystemAktives Warten
Blinkende LEDs YELLOW0 und YELLOW1Abwechselnd an- bzw. ausschalten (Warnlicht)Frequenz ca. 1 mal pro halbe SekundeNutzung der Bibliotheksfunktionen für LEDsImplementierung durch aktives Warten (Schleife mit Zähler)
Dokumentation der Bibliothek:https://www4.cs.fau.de/Lehre/SS19/V_SPIC/SPiCboard/libapi.shtml
Abzugebende Datei: blink.c
24
Hands-on: Licht
Demo
Hands-on: Licht
In der SPiC-IDE:Neuen Ordner erstellen (z.B. hands-on/licht)Neue Quellcodedatei erstellen (z.B. licht.c)
Programm erstellen:Schalte eine LED ein (z.B. GREEN0)Warte in einer Endlosschleife
In der SPiC-IDE:Programm übersetzenProgramm im Simulator oder auf dem SPiCboard testen.
26