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"?

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

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

U5-2 Register beim AVR-µC

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

U5 Fortgeschrittene AVR-Programmierung

Übungen zu Systemnahe Programmierung in C (SPiC)

C.1 Serielle Schnittstelle, erstes Testprogramm (a)

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

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen.

Welche Informatik-Kenntnisse bringen Sie mit?

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

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

Parallel-IO. Ports am ATmega128

Interruptsystem AVR. Interrupt-Quellen: Extern, Timer, ADC, USART usw. (siehe IVT im Anhang) Rücksprungadresse automatisch am Stack.

Wer möchte, kann sein Programm auch auf echter Hardware testen

Inhalt. Aufgabe 4: LED-Modul Hinweise Testen des Moduls Sommersemester 2015

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang :

8.3 Taster am µcontroller

Deklarationen in C. Prof. Dr. Margarita Esponda

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm

Studiengang Maschinenbau, Schwerpunkt Mechatronik (früher: Automatisierungstechnik) Seite 1 von 8

C++ mit dem Arduino (Uno und Mega2560)

FACHHOCHSCHULE MANNHEIM

Arduino für FunkAmateure

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Erste Schritte der Programmierung in C

Aufgaben zur Attiny-Platine

Dr. Monika Meiler. Inhalt

Propädeutikum. Dipl.-Inf. Frank Güttler

Einstieg in die Informatik mit Java

Dokumentation Metronom

Systemnahe Programmierung in C Übungen Moritz Strübe, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2010 U2.fm

D.1 Vorbereitung. Teil D Analog-Digital-Wandler 1

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Präzedenz von Operatoren

Für den Anschluss dieses und anderer Module dieser Serie an das myavr Board steht ein Adapter zur Verfügung.

Elementare Konzepte von

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Tag 2 Eingabe und Interrupts

CCS Compiler Tutorial mit Beispielen

J Mikrocontroller-Programmierung

8.1 Grundsätzlicher Aufbau der Beispiele

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Lotto. eine Projektarbeit in DVT. von Sven Schwab

Einstieg in die Informatik mit Java

Musterlösung Stand: 5. Februar 2009

C für Java-Programmierer

Laborübung 4. Zustandsautomaten (Finite State Machines)

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Zahlendarstellung Logikfunktionen Register Eingänge Infrarot senden TSOP-Effekte Weiterführendes U Abend 3:

Übungspaket 14 Eindimensionale Arrays

Probeklausur: Programmierung WS04/05

Einstieg in die Informatik mit Java

Arten von Klassen-Beziehungen

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

Assembler - Einleitung

i2c-bus.de I2C-001 KURZBESCHREIBUNG I 2 C Modul mit PCF Bit I/O Port-Expander Dokument NR.: I2C-001-D-01

2A Basistechniken: Weitere Aufgaben

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Übersicht. 4.1 Ausdrücke. 4.2 Funktionale Algorithmen. 4.3 Anweisungen. 4.4 Imperative Algorithmen Variablen und Konstanten. 4.4.

Was unterscheidet Microcontroller von einem PC ( Laptop ) oder einem Handy

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

Technische Informatik 1 Übung 5: Eingabe/Ausgabe (Computerübung) Georgia Giannopoulou, ETZ G & 18.

i2c-bus.de I2C-002 KURZBESCHREIBUNG I 2 C Modul mit PCA Bit I/O Port-Expander Dokument NR.: I2C-002-D-01

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

Speicherklassen (1) Lokale Variablen

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Speicheraufbau des AT89C5131

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

3. Anweisungen und Kontrollstrukturen

Repetitorium Informatik (Java)

RO-Tutorien 3 / 6 / 12

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Programmieren in C / C++ Grundlagen C 4

Grundlagen der Rechnerarchitektur. Ein und Ausgabe

d) Welche Aussage zum Thema Adressraumschutz ist richtig?

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Übung 1 - Betriebssysteme I

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

Felder und Schleifen. Themen heute. Felder Schleifen Heartbleed. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Kurze Einführung in die Programmiersprache C++ und in Root

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Java Einführung Methoden in Klassen

Einführung in das Programmieren in der Sekundarstufe 1. mit einem Arduino und der Physical-Computing-Plattform

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

RN-Control ARDUINO Bibliothek ATMEL 32 Version 0.2

Name: Klausur Informatik III WS 2003/04

Übungspaket 23 Mehrdimensionale Arrays

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

Grundlagen Rechnerarchitektur und Betriebssysteme

Transkript:

Aufgabe 1: (1) 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 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. 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"? 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 11 - - 4 von 11 -

Aufgabe 2: 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. IErgä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> #define LOOPS_PER_US 42 /* Funktionsdeklarationen, globale Variablen, etc. */ /* Funktion main */ 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 /* Initialisierung und lokale Variablen */ A: - 5 von 11 - - 6 von 11 -

/* Hauptschleife */ /* Initialisierungsfunktion */ /* Schlafen */ /* LED ansteuern */ /* Wartefunktion */ } /* Ende Funktion main */ L: IW: - 7 von 11 - - 8 von 11 -

/* Unterbrechungsbehandlung */ 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) b) Wie werden Module in C realisiert? (4 Punkte) U: - 9 von 11 - - 10 von 11 -

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) 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) - 11 von 11 -