Skip to content
Snippets Groups Projects
Commit 68e201a8 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Vorbereitung 28.11.2019

parent 8977486c
Branches
No related tags found
No related merge requests found
No preview for this file type
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
% Attribution-ShareAlike 3.0 Unported License along with this % Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>. % document. If not, see <http://creativecommons.org/licenses/>.
% README: Interrupts, volatile-Variable % README: Interrupts, volatile-Variable, Bibliotheken: Einführung
\documentclass[10pt,t]{beamer} \documentclass[10pt,t]{beamer}
...@@ -536,16 +536,17 @@ ...@@ -536,16 +536,17 @@
\item[2.15] String-Operationen \item[2.15] String-Operationen
\end{itemize} \end{itemize}
\item[\textbf{3}] \textbf{Bibliotheken} \item[\textbf{3}] \textbf{Bibliotheken}
% \begin{itemize} \begin{itemize}
% \color{red} \color{red}
% \item[3.1] Der Präprozessor \item[3.1] Der Präprozessor
% \item[3.2] Bibliotheken einbinden \item[3.2] Bibliotheken einbinden
% \item[3.3] Bibliotheken verwenden \color{black}
% \vspace*{-\smallskipamount} \item[3.3] Bibliotheken verwenden
% \item[\dots] \vspace*{-\smallskipamount}
%% \item[3.4] Projekt organisieren: make \item[\dots]
% \end{itemize} % \item[3.4] Projekt organisieren: make
% \vspace*{-\smallskipamount} \end{itemize}
\vspace*{-\smallskipamount}
\item[\textbf{4}] \textbf{Hardwarenahe Programmierung} \item[\textbf{4}] \textbf{Hardwarenahe Programmierung}
\begin{itemize} \begin{itemize}
\item[4.1] Bit-Operationen \item[4.1] Bit-Operationen
...@@ -579,25 +580,25 @@ ...@@ -579,25 +580,25 @@
\lstinline{#include <stdio.h>}: Standard-Verzeichnisse -- Standard-Header \lstinline{#include <stdio.h>}: Standard-Verzeichnisse -- Standard-Header
\pause \pause
\item \item
\lstinline{#include "answer.h"}: auch aktuelles Verzeichnis -- eigene Header \lstinline{#include "pruzzel.h"}: auch aktuelles Verzeichnis -- eigene Header
\end{itemize} \end{itemize}
\pause % \pause
\bigskip % \bigskip
%
\lstinline{#define VIER 4}: Text ersetzen lassen -- Konstante definieren % \lstinline{#define VIER 4}: Text ersetzen lassen -- Konstante definieren
\begin{itemize} % \begin{itemize}
\pause % \pause
\item % \item
Kein Semikolon! % Kein Semikolon!
\pause % \pause
\item % \item
Berechnungen in Klammern setzen:\\ % Berechnungen in Klammern setzen:\\
\lstinline{#define VIER (2 + 2)} % \lstinline{#define VIER (2 + 2)}
\pause % \pause
\item % \item
Konvention: Großbuchstaben % Konvention: Großbuchstaben
\end{itemize} % \end{itemize}
\end{frame} \end{frame}
...@@ -612,7 +613,7 @@ ...@@ -612,7 +613,7 @@
% \pause % \pause
\smallskip \smallskip
\lstinline{extern int answer (void);} \lstinline{extern int pruzzel (const char *bla);}
% \pause % \pause
\smallskip \smallskip
...@@ -629,14 +630,16 @@ ...@@ -629,14 +630,16 @@
\item \item
Zusammenfügen zu ausführbarem Programm durch den \newterm{Linker} Zusammenfügen zu ausführbarem Programm durch den \newterm{Linker}
% \pause % \pause
\item % \item
vorcompilierte Bibliothek: \lstinline[style=terminal]{-lfoo}\\ % vorcompilierte Bibliothek: \lstinline[style=terminal]{-lfoo}\\
% \pause %% \pause
= Datei \file{libfoo.a} in Standard-Verzeichnis % = Datei \file{libfoo.a} in Standard-Verzeichnis
\end{itemize} \end{itemize}
\end{frame} \end{frame}
\iffalse
\subsection{Bibliothek verwenden (Beispiel: GTK+)} \subsection{Bibliothek verwenden (Beispiel: GTK+)}
\begin{frame}[fragile] \begin{frame}[fragile]
...@@ -811,4 +814,6 @@ ...@@ -811,4 +814,6 @@
\end{frame} \end{frame}
\fi
\end{document} \end{document}
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
uint8_t counter = 1;
uint8_t leds = 0;
ISR (TIMER0_COMP_vect)
{
if (counter == 0)
{
leds = (leds + 1) % 8;
PORTC = leds << 4;
}
counter++;
}
void init (void)
{
cli ();
TCCR0 = (1 << CS01) | (1 << CS00);
TIMSK = 1 << OCIE0;
sei ();
DDRC = 0x70;
}
int main (void)
{
init ();
while (1)
; /* do nothing */
return 0;
}
File added
This diff is collapsed.
File added
% hp-uebung-20191121.pdf - Exercises on Low-Level Programming
% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: Datum-Bibliothek, Text-Grafik-Bibliothek, LED-Blinkmuster
\documentclass[a4paper]{article}
\usepackage{pgscript}
\begin{document}
% \thispagestyle{empty}
\section*{Hardwarenahe Programmierung\\
Übungsaufgaben -- 28.\ November 2019}
Diese Übung enthält Punkteangaben wie in einer Klausur.
Um zu "`bestehen"', müssen Sie innerhalb von 60 Minuten
unter Verwendung ausschließlich zugelassener Hilfsmittel
10 Punkte (von insgesamt \totalpoints) erreichen.
\exercise{Datum-Bibliothek}
Zerlegen Sie die Datum-Bibliothek aus der Übungsaufgabe 2 vom 7.\,11.\,2019
in eine \file{.c}- und eine \file{.h}-Datei. \points{4}
Hinweis: Schreiben Sie zusätzlich ein Test-Programm.
\exercise{Text-Grafik-Bibliothek}
Schreiben Sie eine Bibliothek für "`Text-Grafik"' mit folgenden Funktionen:\vspace*{-\medskipamount}
\begin{itemize}
\item
\lstinline|void clear (char c)|\\
Bildschirm auf Zeichen \lstinline|c| löschen,\\
also komplett mit diesem Zeichen (z.\,B.: Leerzeichen) füllen
\item
\lstinline|void put_point (int x, int y, char c)|\\
Punkt setzen (z.\,B.\ einen Stern (\lstinline{*}) an die Stelle $(x,y)$ "`malen"')
\item
\lstinline|char get_point (int x, int y)|\\
Punkt lesen
% \item
% \lstinline|void fill (int x, int y, char c, char o)|\\
% Fläche in der "`Farbe"' \lstinline|o|,
% die den Punkt \lstinline|(x, y)| enthält,
% mit der "`Farbe"' \lstinline|c| ausmalen
\item
\lstinline|void display (void)|\\
das Gezeichnete auf dem Bildschirm ausgeben
\end{itemize}
Hinweise:\vspace*{-\medskipamount}
\begin{itemize}
\item
Eine C-Bibliothek besteht aus (mindestens)
einer \file{.h}-Datei und einer \file{.c}-Datei.
\item
Verwenden Sie ein Array als "`Bildschirm"'.
Vor dem Aufruf der Funktion \lstinline|display()| ist nichts zu sehen;\\
alle Grafikoperationen erfolgen auf dem Array.
\item
Verwenden Sie Präprozessor-Konstante,
z.\,B.\ \lstinline{WIDTH} und \lstinline{HEIGHT},\\
um Höhe und Breite des "`Bildschirms"' festzulegen:
\begin{lstlisting}[gobble=8]
#define WIDTH 72
#define HEIGHT 24
\end{lstlisting}
\item
Schreiben Sie zusätzlich ein Test-Programm,
das alle Funktionen der Bibliothek benutzt,\\
um ein hübsches Bild (z.\,B.\ ein stilisiertes Gesicht -- "`Smiley"')
auszugeben.
\end{itemize}
\points{8}
\clearpage
\exercise{LED-Blinkmuster}
Wir betrachten das folgende Programm für einen ATmega32-Mikro-Controller
(Datei: \gitfile{hp}{20191128}{aufgabe-3.c}).
\begin{minipage}[t]{7cm}
\begin{lstlisting}[gobble=6]
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
uint8_t counter = 1;
uint8_t leds = 0;
ISR (TIMER0_COMP_vect)
{
if (counter == 0)
{
leds = (leds + 1) % 8;
PORTC = leds << 4;
}
counter++;
}
\end{lstlisting}
\end{minipage}\hfill\begin{minipage}[t]{8.5cm}
\begin{lstlisting}[gobble=6]
void init (void)
{
cli ();
TCCR0 = (1 << CS01) | (1 << CS00);
TIMSK = 1 << OCIE0;
sei ();
DDRC = 0x70;
}
int main (void)
{
init ();
while (1)
; /* do nothing */
return 0;
}
\end{lstlisting}
\end{minipage}
An die Bits Nr.\ 4, 5 und 6 des Output-Ports C des Mikro-Controllers sind LEDs angeschlossen.\\
Sobald das Programm läuft, blinken diese in charakteristischer Weise:
\begin{quote}
\newcommand{\tdn}[1]{\raisebox{-2pt}{#1}}
\begin{tabular}{|c|c|c|c|}\hline
\tdn{Phase} & \tdn{LED oben (rot)} & \tdn{LED Mitte (gelb)} & \tdn{LED unten (grün)} \\[2pt]\hline
1 & aus & aus & an \\\hline
2 & aus & an & aus \\\hline
3 & aus & an & an \\\hline
4 & an & aus & aus \\\hline
5 & an & aus & an \\\hline
6 & an & an & aus \\\hline
7 & an & an & an \\\hline
8 & aus & aus & aus \\\hline
\end{tabular}
\end{quote}
Jede Phase dauert etwas länger als eine halbe Sekunde.
Nach 8 Phasen wiederholt sich das Schema.
Erklären Sie das Verhalten des Programms anhand des Quelltextes:
\vspace{-\medskipamount}
\begin{itemize}\itemsep0pt
\item[(a)]
Wieso macht das Programm überhaupt etwas,
wenn doch das Hauptprogramm nach dem Initialisieren lediglich eine Endlosschleife ausführt,
in der \emph{nichts} passiert?
\points{1}
\item[(b)]
Wieso wird die Zeile \lstinline|PORTC = leds << 4;| überhaupt aufgerufen,
wenn dies doch nur unter der Bedingung \lstinline|counter == 0| passiert,
wobei die Variable \lstinline|counter| auf 1 initialisiert,
fortwährend erhöht und nirgendwo zurückgesetzt wird?
\points{2}
\item[(c)]
Wie kommt das oben beschriebene Blinkmuster zustande?
\points{2}
\item[(d)]
Wieso dauert eine Phase ungefähr eine halbe Sekunde?
\points{2}
\item[(e)]
Was bedeutet "`\lstinline|ISR (TIMER0_COMP_vect)|"'?
\points{1}
\end{itemize}
Hinweis:
\vspace{-\medskipamount}
\begin{itemize}\itemsep0pt
\item
Die Funktion \lstinline|init()| sorgt dafür, daß der Timer-Interrupt Nr.\ 0 des Mikro-Controllers
etwa 488mal pro Sekunde aufgerufen wird.
Außerdem initialisiert sie die benötigten Bits an Port C als Output-Ports.
Sie selbst brauchen die Funktion \lstinline|init()| nicht weiter zu erklären.
\end{itemize}
\begin{flushright}
\textit{Viel Erfolg!}
\end{flushright}
\makeatletter
\immediate\write\@mainaux{\string\gdef\string\totalpoints{\arabic{points}}}
\makeatother
\end{document}
../common/leds.jpg
\ No newline at end of file
../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../common/pgscript.sty
\ No newline at end of file
../common/pgslides.sty
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment