f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"?

Ähnliche Dokumente
f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"?

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

b) Was bewirken folgende Programmanweisungen? uint8_t x = 42; x ^= x;

d) Welche Aussage zu Zeigern ist richtig? Beim Rechnen mit Zeigern wird immer der Typ des Zeigers beachtet.

d) Was passiert, wenn das folgende Programmstück übersetzt und ausgeführt

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 25. Juli 2008

a) Welche Aussage zu Zeigern ist richtig? Die Übergabesemantik für Zeiger als Funktionsparameter ist callby-value.

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

d) Welche Aussage zum Thema virtueller Adressraum ist richtig?

d) Welche Aussage zu volatile ist richtig?

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

d) Welche Aussage zum Thema Adressräume ist richtig?

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

U2 Fortgeschrittene AVR-Programmierung. U2-1 Externe Interrupts des AVR-μC. 1 Flanken-/Pegel-Steuerung. 1 Flanken-/Pegel-Steuerung (2) 2 Maskieren

U5 Fortgeschrittene AVR-Programmierung U5 Fortgeschrittene AVR-Programmierung. Synchronisation mit Unterbrechungsbehandlungen

U5 Fortgeschrittene AVR-Programmierung

e) Welche Aussage zu Speicherzuteilungsverfahren ist falsch?

U5-2 Register beim AVR-µC

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 9. April 2008

myavr Programmierung in C

A B C D E C 5 7 D 3 E. 2. [6-Bit, positiv] Welche Dezimalzahl wird durch die gegebene Bit-Sequenz kodiert?

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

Übungen zu Systemnahe Programmierung in C (SPiC)

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

Probeklausur Name: (c)

Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Moritz Strübe, Rainer Müller (Lehrstuhl Informatik 4) Sommersemester 2014

K Ergänzungen zur Einführung in C

Felder (1) Allgemeines

e) Welchen Wert hat die Variable i nach Ausführung der folgenden Zeilen Code: x25 0x84 b) Welche Aussage zu folgender Funktion ist richtig?

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

C.1 Serielle Schnittstelle, erstes Testprogramm (a)

PIC16 Programmierung in HITECH-C

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös

Programmierung mit C Zeiger

Welche Informatik-Kenntnisse bringen Sie mit?

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Serielle Schnittstelle, erstes Testprogramm (a)

2 Punkte. 2 Punkte. 2 Punkte. 2 Punkte. 2 Punkte. - 4 von von 15 -

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

2. Programmierung in C

Felder, Zeiger und Adreßrechnung

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Interrupts. Inhalt. Interrupts. Synchronisation

Aufgaben zur Attiny-Platine

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss.

U4 Grundlagen der C-Programmierung

Inhalt. 4.9 Typen, Variable und Konstante

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

6. Zeiger Allgemeines Definition eines Zeigers

Vorbereitung. Teil D Analog-Digital-Wandler 1

Übung zu Grundlagen der Betriebssysteme. 10. Übung

9. Vektoren. (auch Felder/array)

Dem Vater-Prozess wird die Prozess-ID des Kind-Prozesses zurückgeliefert.

Übungen zu Systemnahe Programmierung in C (SPiC)

Klassen mit Instanzmethoden

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

d) Welche Aussage über exec() ist richtig?

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

GI Vektoren

Kapitel 8. Adressen und Zeiger

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Speicherklassen (1) Lokale Variablen

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Klausur Betriebssysteme I

U3-1 Register beim AVR-μC. U3 3. Übung. U3-2 I/O-Ports des AVR-μC. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

Wiederholung: Zugriff auf AVR-Prozessor-Register

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Wintersemester 2017/18

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Einstieg in die Informatik mit Java

y x x y ( 2x 3y + z x + z

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

7. Übung Informatik II - Objektorientierte Programmierung

Einstieg in die Informatik mit Java

Klausur Betriebssysteme

Einführung in die Programmierung von Mikrocontrollern mit C/C++

Mussten wir eine ganze Reihe solcher Zahlen speichern, haben wir das eindimensionale Array verwendet.

Elementare Datentypen in C++

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

C/C++-Programmierung

U5 Verzeichnisse und Sortieren

Systemnahe Programmierung in C (SPiC)

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

Übungen zu Systemnahe Programmierung in C (SPiC)

Softwareentwicklung I

Übungspaket 23 Mehrdimensionale Arrays

2A Basistechniken: Weitere Aufgaben

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Transkript:

Aufgabe 1: (16 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort korrigieren, streichen Sie bitte die falsche Antwort mit drei waagrechten Strichen durch ( )und kreuzen die richtige an. Lesen Sie die Frage genau, bevor Sie antworten. a) Welche Aussage zum Thema Polling und Interrupts ist richtig? Beim Pollen eines Gerätes muss man selektiv dessen Interrupts sperren, um explizit Daten zu synchronisieren. Interrupts haben den Nachteil, dass sie nicht mit Präprozessormakros funktionieren. Geräte, die flankengesteuerte Interrupts auslösen können, lassen sich grundsätzlich nicht pollen. Bei hochfrequenten Geräteereignissen erzeugt Polling eine hohe CPU-Last. b) Gegeben sei folgender Ausschnitt eines C-Programms, welches eine 2 Punkte Variable foo vom Typ uint8_t verwendet: foo &= ~0xaa; foo ^= 0xaa; Welche Aussage über foo ist nach der Ausführung der Anweisungen richtig? Das höchstwertige Bit in foo ist 1. Die ersten beiden Zeichen in der Zeichenkette foo sind aa. Das niederwertigste Bit in foo ist 1. Über den Zustand des höchstwertigen Bits von foo kann keine Aussage getroffen werden. c) Wozu dient das #ifdef-konstrukt in C? Es kann alternativ zu if-abfragen eingesetzt werden. Man kann damit Programmteile bei der Übersetzung ausblenden. Es kann eingesetzt werden, um sicherzustellen, dass ein Programmteil ein definiertes Ergebnis liefert. Es überprüft, ob die danach angegebenen Variablen definiert wurden. 2 Punkte 2 Punkte d) Was versteht man unter den formalen und tatsächlichen Parametern einer Funktion? Der tatsächliche Parameter enthält eine Kopie des Aufrufparameters, der formale Parameter ist ein Zeiger auf den Aufrufparameter. Die formalen Parameter sind die Namen, unter denen auf die Aufrufparameter innerhalb der Funktion zugegegriffen werden kann. Die tatsächlichen Parameter sind die Rückgabewerte eines Funktionsaufrufs. Die tatsächlichen Parameter sind die Namen, unter denen innerhalb einer Funktion auf die Aufrufparameter zugegriffen wird. e) Was versteht man unter Nebenläufigkeit? Wenn ein Programm abwechselnd auf zwei verschiedene Speicherbereiche zugreift. Wenn ein Programmabschnitt in einer Schleife mehrfach durchlaufen wird. Die Programmabschnitte im if- und else-teil einer bedingten Anweisung. Wenn für zwei Befehle aus zwei Programmabläufen nicht feststeht, welcher von beiden tatsächlich zuerst ausgeführt werden wird. f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"? 2 Punkte Der Zugriff auf die Register erfolgt mit speziellen mmap-instruktionen des Prozessors. Die Register sind in den normalen Adressraum des Prozessors eingeblendet und der Zugriff erfolgt mit den normalen Speicherzugriffsinstruktionen. Beim Zugriff auf spezielle Speicherbereiche des Hauptspeichers werden die Inhalte der Hauptspeicherzellen automatisch in Geräteregister umkopiert. Die Register sind nicht real, sondern nur virtuell im Hauptspeicher vorhanden (sog. "virtual devices"). - 3 von 17 - - 4 von 17 -

g) Was passiert, wenn man das folgende Programmstück übersetzen und ausführen möchte? int d[5]; d[5] = 42; In das fünfte Element des Feldes wird der Wert 42 geschrieben. Der Compiler liefert einen Fehler weil d[5] nicht mehr Teil des Feldes ist. Ein Betriebssystem erkennt, dass über die Grenzen des Feldes hinaus geschrieben wurde. Die 42 wird in den Speicher hinter dem Feld geschrieben. Befinden sich hier Daten, so werden diese überschrieben. h) Welche Aussage zu Semaphoren ist richtig? Semaphore werden benutzt um in kritischen Abschnitten Interrupts zu sperren und so den gleichzeitigen Zugriff auf gemeinsame Datenstrukturen zu verhindern. 2 Punkte Eine P-Operation überprüft, ob der Semaphor den Wert 0 hat und erhöht ihn anschließend. Semaphore können genutzt werden, um gegenseitiges Warten zwischen Threads zu implementieren. Die V-Operation dekrementiert den Semaphor um 1 und deblockiert andere in einer V-Operation blockierte Prozesse. Aufgabe 2a: dimmer (30 Punkte) Sie dürfen diese Seite zur besseren Übersicht bei der Programmierung heraustrennen! Schreiben Sie eine Steuerung für dimmbare LEDs für ein AVR-Mikrocontroller- Board. Zu jedem Zeitpunkt ist genau eine von acht LEDs aktiv und leuchtet mit einer Helligkeitsstufe zwischen 0 und 10. Die Stufe wird vom Benutzer mit einem Plus- Taster (Taster 0) und einem Minus-Taster (Taster 1) reguliert. Wenn die Stufe 0 erreicht wird, wird die LED ausgeschaltet. Beim nächsten Druck auf den Plus-Taster wird dann gleichzeitig auf die nächste der acht LEDs umgeschaltet und diese mit Stufe 1 eingeschaltet. Nach der achten LED wird wieder auf die erste gewechselt. Im Detail soll Ihr Programm wie folgt funktionieren: Initialisieren Sie die Hardware in der Funktion void init(void). Das Programm startet mit LED 1 in Stufe 0 (ausgeschaltet); bei Stufe 0 soll der Mikrocontroller jeweils in den Schlafmodus gehen. In den Stufen 1 bis 10 leuchtet die gerade aktive LED und ist auf die entsprechende Stufe gedimmt. Das Dimmen wird durch schnellen Wechsel des Anund Aus-Zustands der aktiven LED implementiert. Dazu soll in einer Periode von 512 Mikrosekunden die LED einen zur Stufe proportionalen Teil eingeschaltet sein. Beispiel Stufe 7: 70% von 512 Mikrosekunden eingeschaltet, 30% ausgeschaltet. Implementieren Sie das Warten zwischen den Ein-/Aus-Anteilen einer Periode in einer aktiven Wartefunktion void wait(uint16_t us), die us Mikrosekunden wartet. Ihnen steht eine Präprozessorkonstante LOOPS_PER_US zur Verfügung, die angibt, wieviele Schleifendurchläufe gewartet werden muss, um eine Mikrosekunde verstreichen zu lassen. Information über die Hardware LEDs: Taster: PORTA, Pins 0-7, Start bei LED 1 an Pin 0, eingeschaltet bei low-pegel - Pin als Ausgang konfigurieren: entspr. Bit in DDRA-Reg. auf 1 PORTD, Plus-Taster (Taster 0) = Pin 2, Minus-Taster (Taster 1) = Pin3 - Pins als Eingang konfigurieren: entspr. Bit in DDRD-Reg. auf 0 - externe Interruptquellen INT0 und INT1, ISR-Vektor-Makros INT0_vect und INT1_vect - Aktivierung der Interruptquellen erfolgt durch Setzen des INT0- bzw. INT1-Bits im Register GICR. - die Taster verbinden den Pin mit Masse, es müssen die internen Pullup-Widerstände verwendet werden (entspr. Bits in PORTD-Reg. auf 1 setzen). - Konfiguration der externen Interruptquellen 0 und 1 (Bits in Register MCUCR) Interrupt 0 Interrupt 1 Beschreibung ISC01 ISC00 ISC11 ISC10 0 0 Interrupt bei low-pegel 0 0 0 1 Interrupt bei beliebiger Flanke 0 1 1 0 Interrupt bei fallender Flanke 1 0 1 1 Interrupt bei steigender Flanke 1 1-5 von 17 - - 6 von 17 -

Ergänzen Sie das folgende Codegerüst so, dass ein vollständig übersetzbares Programm entsteht. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include <stdint.h> /* Hauptschleife */ /* Schlafen */ #define LOOPS_PER_US 42 /* Funktionsdeklarationen, globale Variablen, etc. */ /* LED ansteuern */ /* Funktion main */ /* Initialisierung und lokale Variablen */ A: } /* Ende Funktion main */ L: - 7 von 17 - - 8 von 17 -

/* Initialisierungsfunktion */ /* Unterbrechungsbehandlung */ /* Wartefunktion */ IW: U: - 9 von 17 - - 10 von 17 -

Aufgabe 2b: dirstat (18 Punkte) Sie dürfen diese Seite zur besseren Übersicht bei der Programmierung heraustrennen! Schreiben Sie ein Programm dirstat, welches die Nutzung des aktuellen Verzeichnisses nach Besitzern aufschlüsselt. Hierzu soll für jeden Benutzer angegeben werden wie viele reguläre Dateien er im aktuellen Verzeichnis besitzt und wie viele Bytes diese belegen. Allgemeine Hinweise: Alle Fehlermeldungen sollen auf den Standardfehlerkanal stderr ausgegeben werden, nicht auf die Standardausgabe. Die Statistiken werden in einem Feld mit 100 Elementen der vorgegebenen Struktur dst verwaltet. Sollten mehr als 100 Benutzer Dateien in dem Verzeichnis besitzen, können diese ignoriert werden. (Hinweis: Die Anzahl der bereits genutzten Feldelemente wird am besten in einer eigenen Zählervariable gespeichert.) Sie können davon ausgehen, dass die in der Struktur gewählten Wertebereiche ausreichend sind. Das Programm soll wie folgt funktionieren. Das aktuelle Verzeichnis. soll geöffnet werden und die Liste der darin enthaltenen Dateien wird durchlaufen. Handelt es sich um eine reguläre Datei, wird die Benutzer-Id des Eigentümers (st_uid) sowie die Größe der Datei (st_size) an die Funktion addfile() übergeben. Die Funktion addfile() überprüft, ob der Benutzer bereits einen Statistik- Eintrag hat, und fügt in diesem Fall die übergebenen Daten der Statistik hinzu. Andernfalls wird ein neuer Eintrag angelegt. Nach Durchlauf des Verzeichnisses werden jeweils in einer Zeile Benutzer-Id, Anzahl der Dateien und die Gesamtgröße, durch Tabulator getrennt, ausgegeben. Die Benutzer-Id muss nicht zu einem Benutzernamen aufgelöst werden. Ergänzen Sie das folgende Codegerüst so, dass ein vollständig übersetzbares Programm entsteht. #include <dirent.h> #include <stdio.h> #include <stddef.h> #include <sys/stat.h> #include <stdlib.h> #include <errno.h> #define ENTRIES 100 struct dst { off_t size; int num; uid_t uid; }; /* Funktionsdeklarationen, globale Variablen, etc. */ /* Funktion main */ -> - 11 von 17 - - 12 von 17 -

/* Verzeichnis oeffnen und durchsuchen */ /* Funktion addfile */ /* Statistik ausgeben */ } /* Ende Funktion main */ D: a: - 13 von 17 - - 14 von 17 -

Aufgabe 3: (18 Punkte) Die folgenden Beschreibungen sollen kurz und prägnant erfolgen (Stichworte, kurze Sätze). a) Was versteht man in der Informatik unter einem Modul und wozu dient es? (4 Punkte) c) Ein Mikrocontroller-Programm "main.c" verwende die Funktionen void send(char); char receive(void); eines Netzwerk-Treibers. Der Treiber implementiert diese Funktionen und verwaltet zudem einen Puffer für eingehende Zeichen und eine Unterbrechungsbehandlungsfunktion, die diesen befüllt: char buf[32]; void receive_irq(void){... } Skizzieren Sie, welche Dateien (netzwerk.*) erforderlich sind, um den Treiber in Form eines C-Moduls bereit zu stellen und im Hauptprogramm verwenden zu können. Was ist zu beachten (d.h. "was muss in welcher Datei wie stehen"), um eine korrekte Kapselung der Modulinterna sowie die korrekte Sichtbarkeit und Verwendung der Modulschnittstellen zu gewährleisten? (7 Punkte) b) Wie werden Module in C realisiert? (4 Punkte) d) Aus Java kennen Sie zum Zwecke der Informationsverbergung (information hiding) die Sichtbarkeitsattribute "public", "protected" und "private". Nennen Sie - sofern vorhanden - die Entsprechungen in C! (3 Punkte) - 15 von 17 - - 16 von 17 -

Aufgabe 4: (8 Punkte) Die folgenden Beschreibungen sollen kurz und prägnant erfolgen (Stichworte, kurze Sätze). Beschreiben Sie den Ablauf der Verarbeitung eines Taster-Interrupts, wie sie z. B. auf einem AVR-Mikrocontroller erfolgt. (8 Punkte) - 17 von 17 -