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

Vorbereitung 16.11.2023

parent 8c5e3ad5
Branches
No related tags found
No related merge requests found
Showing
with 1673 additions and 0 deletions
#include <stdio.h>
#include <stdint.h>
int main (void)
{
uint64_t x = 4262939000843297096;
char *s = &x;
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <stdint.h>
typedef struct
{
uint32_t a;
uint64_t b;
uint8_t c;
} three_numbers;
int main (void)
{
three_numbers xyz = { 1819042120, 2410670883059281007, 0 };
printf ("%s\n", &xyz);
return 0;
}
File added
This diff is collapsed.
File added
This diff is collapsed.
File added
% hp-uebung-20231116.pdf - Exercises on Low-Level Programming / Applied Computer Sciences
% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 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: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, Speicherformate von Zahlen
\documentclass[a4paper]{article}
\usepackage{pgscript}
\usepackage{gensymb}
\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
\newcommand{\ITWOC}{I\raisebox{0.5ex}{\normalsize 2}C}
\begin{document}
\thispagestyle{empty}
\section*{Hardwarenahe Programmierung\\
Übungsaufgaben -- 16.\ November 2023}
Diese Übung enthält Punkteangaben wie in einer Klausur.
Um zu "`bestehen"', müssen Sie innerhalb von 90 Minuten
unter Verwendung ausschließlich zugelassener Hilfsmittel
15 Punkte (von insgesamt \totalpoints) erreichen.
\exercise{Trickprogrammierung}
Wir betrachten das folgende Programm (Datei: \gitfile{hp}{2023ws/20231116}{aufgabe-1.c}):
\begin{lstlisting}
#include <stdio.h>
#include <stdint.h>
int main (void)
{
uint64_t x = 4262939000843297096;
char *s = &x;
printf ("%s\n", s);
return 0;
}
\end{lstlisting}
Das Programm wird compiliert und auf einem 64-Bit-Little-Endian-Computer ausgeführt:
\begin{lstlisting}[style=terminal]
$ ¡gcc -Wall -O aufgabe-1.c -o aufgabe-1¿
aufgabe-1.c: In function `main':
aufgabe-1.c:7:13: warning: initialization from incompatible pointer type [...]
$ ¡./aufgabe-1¿
Hallo
\end{lstlisting}
\begin{itemize}
\item[(a)]
Erklären Sie die Warnung beim Compilieren. \points{2}
\item[(b)]
Erklären Sie die Ausgabe des Programms. \points{5}
\item[(c)]
Wie würde die Ausgabe des Programms auf einem 64-Bit-Big-Endian-Computer lauten? \points{3}
\end{itemize}
Hinweis: Modifizieren Sie das Programm
und lassen Sie sich Speicherinhalte ausgeben.
\exercise{Thermometer-Baustein an \ITWOC-Bus}
Eine Firma stellt einen elektronischen Thermometer-Baustein her,
den man über die serielle Schnittstelle (RS-232) an einen PC anschließen kann,
um die Temperatur auszulesen.
Nun wird eine Variante des Thermo"-meter-Bausteins entwickelt,
die die Temperatur zusätzlich über einen \ItwoC-Bus bereitstellt.
Um das neue Thermometer zu testen, wird es in ein Gefäß mit heißem Wasser gelegt,
das langsam auf Zimmertemperatur abkühlt.
Alle 10 Minuten liest ein Programm, das auf dem PC läuft,
die gemessene Temperatur über beide Schnittstellen aus
und erzeugt daraus die folgende Tabelle:
\begin{center}
\renewcommand{\arraystretch}{1.2}
\begin{tabular}{|c|c|c|}\hline
Zeit /\,min. & Temperatur per RS-232 /\,\degree C & Temperatur per \ItwoC\ /\,\degree C \\\hline\hline
\phantom{0}0 & 94 & 122 \\\hline
10 & 47 & 244 \\\hline
20 & 30 & 120 \\\hline
30 & 24 & \phantom{0}24 \\\hline
40 & 21 & 168 \\\hline
\end{tabular}
\end{center}
\begin{itemize}
\item[(a)]
Aus dem Vergleich der Meßdaten läßt sich
auf einen Fehler bei der \ItwoC-Übertragung schließen.\\
Um welchen Fehler handelt es sich,
und wie ergibt sich dies aus den Meßdaten?
\points{5}
\item[(b)]
Schreiben Sie eine C-Funktion \lstinline{uint8_t repair (uint8_t data)},
die eine über den \ItwoC-Bus empfangene fehlerhafte Temperatur \lstinline{data} korrigiert.
\points{5}
\end{itemize}
\exercise{Speicherformate von Zahlen}
Wir betrachten das folgende Programm (\gitfile{hp}{2023ws/20231116}{aufgabe-3.c}):
\begin{lstlisting}
#include <stdio.h>
#include <stdint.h>
typedef struct
{
uint32_t a;
uint64_t b;
uint8_t c;
} three_numbers;
int main (void)
{
three_numbers xyz = { 1819042120, 2410670883059281007, 0 };
printf ("%s\n", &xyz);
return 0;
}
\end{lstlisting}
Das Programm wird für einen 32-Bit-Rechner compiliert und ausgeführt.\\
(Die \lstinline[style=cmd]{gcc}-Option \lstinline[style=cmd]{-m32} sorgt dafür,
daß \lstinline[style=cmd]{gcc} Code für einen 32-Bit-Prozessor erzeugt.)
\begin{lstlisting}[style=terminal]
$ ¡gcc -Wall -m32 aufgabe-2.c -o aufgabe-2¿
aufgabe-2.c: In function "main":
aufgabe-2.c:14:13: warning: format "%s" expects argument of type "char *", but
argument 2 has type "three_numbers * {aka struct <anonymous> *}" [-Wformat=]
printf ("%s\n", &xyz);
^
$ ¡./aufgabe-2¿
Hallo, Welt!
\end{lstlisting}
\begin{enumerate}[\quad(a)]
\item
Erklären Sie die beim Compilieren auftretende Warnung.
\points{2}
\item
Erklären Sie die Ausgabe des Programms.
\points{4}
\item
Welche Endianness hat der verwendete Rechner?
Wie sähe die Ausgabe auf einem Rechner mit entgegengesetzter Endianness aus?
\points{2}
\item
Dasselbe Programm wird nun für einen 64-Bit-Rechner compiliert und ausgeführt.\\
(Die \lstinline[style=cmd]{gcc}-Option \lstinline[style=cmd]{-m64} sorgt dafür,
daß \lstinline[style=cmd]{gcc} Code für einen 64-Bit-Prozessor erzeugt.)
\begin{lstlisting}[style=terminal,gobble=8]
$ ¡gcc -Wall -m64 aufgabe-2.c -o aufgabe-2¿
aufgabe-2.c: In function "main":
aufgabe-2.c:14:13: warning: format "%s" expects argument of type "char *",
but argument 2 has type "three_numbers * {aka struct <anonymous> *}"
[-Wformat=]
printf ("%s\n", &xyz);
^
$ ¡./aufgabe-2¿
Hall5V
\end{lstlisting}
(Es ist möglich, daß die konkrete Ausgabe auf Ihrem Rechner anders aussieht.)\par
Erklären Sie die geänderte Ausgabe des Programms.
\points{3}
\end{enumerate}
\begin{flushright}
\textit{Viel Erfolg!}
\end{flushright}
\makeatletter
\immediate\write\@mainaux{\string\gdef\string\totalpoints{\arabic{points}}}
\makeatother
\end{document}
../common/io-ports-and-interrupts.pdf
\ No newline at end of file
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main (void)
{
uint64_t x = 4262939000843297096;
char *s = &x;
printf ("%lx\n", x);
printf ("%" PRIx64 "\n", x);
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main (void)
{
uint64_t x = 4262939000843297096;
char *s = &x;
printf ("%lx\n", x);
printf ("%" PRIx64 "\n", x);
printf ("%c %c %c %c %c %c %c %c\n",
0x48, 0x61, 0x6c, 0x6c, 0x6f, 0x00, 0x29, 0x3b);
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main (void)
{
uint64_t x = 0x48616c6c6f00293b;
char *s = &x;
printf ("%s\n", s);
return 0;
}
#include <stdio.h>
#include <stdint.h>
uint8_t repair (uint8_t data)
{
uint8_t result = 0;
uint8_t mask_data = 0x01;
uint8_t mask_result = 0x80;
while (mask_data)
{
if (data & mask_data)
result |= mask_result;
mask_data <<= 1;
mask_result >>= 1;
}
return result;
}
int main (void)
{
int data[] = { 122, 244, 120, 24, 168, -1 };
int i = 0;
while (data[i] >= 0)
printf ("%d\n", repair (data[i++]));
return 0;
}
../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
......@@ -23,6 +23,7 @@ Vortragsfolien und Beispiele:
* [26.10.2023: Einführung in C: String-Operationen; Bibliotheken](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231026/hp-20231026.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231026/)
* [02.11.2023: Bibliotheken](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231102/hp-20231102.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231102/)
* [09.11.2023: Hardwarenahe Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231109/hp-20231109.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231109/)
* [16.11.2023: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen, Speicherausrichtung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-20231116.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2023ws/20231116/)
* [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/hp-slides-2023ws.pdf)
Übungsaufgaben:
......@@ -33,6 +34,7 @@ Vortragsfolien und Beispiele:
* [26.10.2023: Arrays mit Zahlen, Datum-Bibliothek, fehlerhaftes Primzahl-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231026/hp-uebung-20231026.pdf)
* [02.11.2023: Zahlensysteme, Ausgabe von Hexadezimalzahlen, Einfügen in Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231102/hp-uebung-20231102.pdf)
* [09.11.2023: Text-Grafik-Bibliothek, Mikrocontroller, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231109/hp-uebung-20231109.pdf)
* [16.11.2023: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, Speicherformate von Zahlen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-uebung-20231116.pdf)
Musterlösungen:
---------------
......@@ -41,6 +43,7 @@ Musterlösungen:
* [26.10.2023: Arrays mit Zahlen, Datum-Bibliothek, fehlerhaftes Primzahl-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231026/hp-musterloesung-20231026.pdf)
* [02.11.2023: Zahlensysteme, Ausgabe von Hexadezimalzahlen, Einfügen in Strings](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231102/hp-musterloesung-20231102.pdf)
* [09.11.2023: Text-Grafik-Bibliothek, Mikrocontroller, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231109/hp-musterloesung-20231109.pdf)
* [16.11.2023: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, Speicherformate von Zahlen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2023ws/20231116/hp-musterloesung-20231116.pdf)
Praktikumsunterlagen:
---------------------
......
No preview for this file type
......@@ -23,4 +23,6 @@
\includepdf[pages=-]{20231102/hp-20231102.pdf}
\pdfbookmark[1]{09.11.2023: Hardwarenahe Programmierung}{20231109}
\includepdf[pages=-]{20231109/hp-20231109.pdf}
\pdfbookmark[1]{16.11.2023: Byte-Reihenfolge, Darstellung negativer Zahlen, Darstellung von Gleitkommazahlen, Speicherausrichtung}{20231116}
\includepdf[pages=-]{20231116/hp-20231116.pdf}
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment