Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • pgerwinski/hp
  • bwildenhain/hp
  • Daniel.Eisi/hp
  • aahrens/hp
4 results
Select Git revision
Show changes
Showing
with 0 additions and 401 deletions
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
ISR (INT0_vect) /* PD2 */
{
PORTD ^= 0x40;
}
int main (void)
{
cli ();
EICRA = 1 << ISC00 | 1 << ISC01; /* INT0: steigende Flanke */
EIMSK = 1 << INT0; /* INT0 einschalten */
sei ();
DDRD = 0xff; /* binär: 1111 1111 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
extern int pruzzel (const char *__restrict __format, ...);
int main (void)
{
pruzzel ("Hello, world!\n");
return 0;
}
int pruzzel (const char *bla)
{
printf ("%s", bla);
return 42;
}
int main (void)
{
pruzzel ("Hello, world!\n");
return 0;
}
extern int pruzzel (const char *bla);
int main (void)
{
pruzzel ("Hello, world!\n");
return 0;
}
#include "pruzzel.h"
int main (void)
{
pruzzel ("Hello, world!\n");
return 0;
}
File deleted
% 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: Zahlensysteme, Mikrocontroller
\documentclass[a4paper]{article}
\usepackage{pgscript}
\begin{document}
\thispagestyle{empty}
\section*{Hardwarenahe Programmierung\\
Übungsaufgaben -- 21.\ November 2019}
Diese Übung enthält Punkteangaben wie in einer Klausur.
Um zu "`bestehen"', müssen Sie innerhalb von 70 Minuten
unter Verwendung ausschließlich zugelassener Hilfsmittel
14 Punkte (von insgesamt \totalpoints) erreichen.
\exercise{Zahlensysteme}
Wandeln Sie ohne Hilfsmittel
\begin{minipage}[t]{0.3\textwidth}
\begin{itemize}
\item
nach Dezimal:
\begin{itemize}
\item[(a)]
0010\,0000$_2$
\item[(b)]
42$_{16}$
\item[(c)]
17$_8$
\end{itemize}
\end{itemize}
\end{minipage}\hfill
\begin{minipage}[t]{0.3\textwidth}
\begin{itemize}
\item
nach Hexadezimal:
\begin{itemize}
\item[(d)]
0010\,0000$_2$
\item[(e)]
42$_{10}$
\item[(f)]
192.168.20.254$_{256}$
\end{itemize}
\end{itemize}
\end{minipage}\hfill
\begin{minipage}[t]{0.3\textwidth}
\begin{itemize}
\item
nach Binär:
\begin{itemize}
\item[(g)]
750$_8$
\item[(h)]
42$_{10}$
\item[(i)]
AFFE$_{16}$
\end{itemize}
\end{itemize}
\end{minipage}
\medskip
Berechnen Sie ohne Hilfsmittel:
\begin{itemize}
\item[(j)]
750$_8$ \& 666$_8$
\item[(k)]
A380$_{16}$ + B747$_{16}$
\item[(l)]
AFFE$_{16} >> 1$
\end{itemize}
Die tiefgestellte Zahl steht für die Basis des Zahlensystems.
Jede Teilaufgabe zählt 1 Punkt. \addtocounter{points}{12}
(In der Klausur sind Hilfsmittel zugelassen,
daher ist dies \emph{keine\/} typische Klausuraufgabe.)
\exercise{Mikrocontroller}
\begin{minipage}[t]{10cm}
An die vier Ports eines ATmega16-Mikrocontrollers sind Leuchtdioden angeschlossen:
\begin{itemize}
\item
von links nach rechts an die Ports A, B, C und D,
\item
von oben nach unten an die Bits Nr.\ 0 bis 7.
\end{itemize}
Wir betrachten das folgende Programm (\gitfile{hp}{20191121}{aufgabe-2.c}):
\begin{lstlisting}[gobble=6]
#include <avr/io.h>
int main (void)
{
DDRA = 0xff;
DDRB = 0xff;
DDRC = 0xff;
DDRD = 0xff;
PORTA = 0x1f;
PORTB = 0x10;
PORTD = 0x10;
PORTC = 0xfc;
while (1);
return 0;
}
\end{lstlisting}
\end{minipage}\hfill
\begin{minipage}[t]{3cm}
\strut\\[-\baselineskip]
\includegraphics[width=3cm]{leds.jpg}
\end{minipage}
\vspace*{-3cm}
\strut\hfill
\begin{minipage}{11.8cm}
\begin{itemize}
\item[(a)]
Was bewirkt dieses Programm? \points{4}
\item[(b)]
Wozu dienen die ersten vier Zeilen des Hauptprogramms? \points{2}
\item[(c)]
Was würde stattdessen die Zeile \lstinline{DDRA, DDRB, DDRC, DDRD = 0xff;} bewirken?
\points{2}
\item[(d)]
Schreiben Sie das Programm so um,
daß die durch das Programm dargestellte Figur spiegelverkehrt erscheint. \points{3}
\item[(e)]
Wozu dient das \lstinline{while (1)}? \points{2}
\item
Alle Antworten bitte mit Begründung.
\end{itemize}
\end{minipage}
\begin{flushright}
\textit{Viel Erfolg!}
\end{flushright}
\makeatletter
\immediate\write\@mainaux{\string\gdef\string\totalpoints{\arabic{points}}}
\makeatother
\end{document}
20191121/photo-20191121-171959.jpg

116 KiB

cassini/home/peter/bo/2019ws/hp/20191121> cat hello-5.c
extern int pruzzel (const char *bla);
int main (void)
{
pruzzel ("Hello, world!\n");
return 0;
}
cassini/home/peter/bo/2019ws/hp/20191121> cat pruzzel.c
#include <stdio.h>
int pruzzel (const char *bla)
{
printf ("%s", bla);
return 42;
}
cassini/home/peter/bo/2019ws/hp/20191121> gcc -Wall -O pruzzel.c -o pruzzel
/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
cassini/home/peter/bo/2019ws/hp/20191121> gcc -Wall -O hello-5.c -o hello-5
/tmp/ccfdwwB5.o: In function `main':
hello-5.c:(.text+0xc): undefined reference to `pruzzel'
collect2: error: ld returned 1 exit status
cassini/home/peter/bo/2019ws/hp/20191121> gcc -Wall -O hello-5.c pruzzel.c -o hello-5
cassini/home/peter/bo/2019ws/hp/20191121> ./hello-5
Hello, world!
cassini/home/peter/bo/2019ws/hp/20191121>
cassini/home/peter/bo/2019ws/hp/20191121> cat hello-6.c
#include "pruzzel.h"
int main (void)
{
pruzzel ("Hello, world!\n");
return 0;
}
cassini/home/peter/bo/2019ws/hp/20191121> gcc -Wall -O hello-6.c pruzzel.c -o hello-6cassini/home/peter/bo/2019ws/hp/20191121> ./hello-
cassini/home/peter/bo/2019ws/hp/20191121> ./hello-6
Hello, world!
cassini/home/peter/bo/2019ws/hp/20191121> cat pruzzel.c
#include <stdio.h>
int pruzzel (const char *bla)
{
printf ("%s", bla);
return 42;
}
cassini/home/peter/bo/2019ws/hp/20191121> cat pruzzel.h
extern int pruzzel (const char *bla);
cassini/home/peter/bo/2019ws/hp/20191121>
#include <stdio.h>
int pruzzel (const char *bla)
{
printf ("%s", bla);
return 42;
}
extern int pruzzel (const char *bla);
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
gtk_widget_show (window);
gtk_main ();
return 0;
}
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *button = gtk_button_new_with_label ("Quit");
g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_widget_show (button);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add (GTK_CONTAINER (window), vbox);
GtkWidget *button = gtk_button_new_with_label ("Quit");
g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
gtk_container_add (GTK_CONTAINER (vbox), button);
GtkWidget *drawing_area = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
gtk_widget_show (drawing_area);
gtk_widget_show (button);
gtk_widget_show (vbox);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add (GTK_CONTAINER (window), vbox);
GtkWidget *button = gtk_button_new_with_label ("Quit");
g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
gtk_container_add (GTK_CONTAINER (vbox), button);
GtkWidget *drawing_area = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
gtk_widget_set_size_request (drawing_area, 100, 100);
gtk_widget_show (drawing_area);
gtk_widget_show (button);
gtk_widget_show (vbox);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#include <stdio.h>
#define VIER vier
int main (void)
{
printf ("Drei mal vier = %d.\n", 3 * VIER);
return 0;
}
#include <stdio.h>
#define VIER 4);
int main (void)
{
printf ("Drei mal vier = %d.\n", 3 * VIER
return 0;
}
#include <stdio.h>
#define VIER 4;
int main (void)
{
printf ("Drei mal vier = %d.\n", 3 * VIER);
return 0;
}