Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
bs
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Peter Gerwinski
bs
Commits
68bc4bfd
Commit
68bc4bfd
authored
Jun 13, 2022
by
Peter Gerwinski
Browse files
Options
Downloads
Patches
Plain Diff
Beispiele und Notizen 13.6.2022
parent
26930b1e
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
20220613/bs-20220613.pdf
+0
-0
0 additions, 0 deletions
20220613/bs-20220613.pdf
20220613/bs-20220613.tex
+3
-3
3 additions, 3 deletions
20220613/bs-20220613.tex
20220613/bs-20220613.txt
+164
-0
164 additions, 0 deletions
20220613/bs-20220613.txt
20220613/unions-03.c
+23
-0
23 additions, 0 deletions
20220613/unions-03.c
with
190 additions
and
3 deletions
20220613/bs-20220613.pdf
+
0
−
0
View file @
68bc4bfd
No preview for this file type
This diff is collapsed.
Click to expand it.
20220613/bs-20220613.tex
+
3
−
3
View file @
68bc4bfd
...
@@ -237,11 +237,11 @@
...
@@ -237,11 +237,11 @@
Wertvolle Ressourcen
Wertvolle Ressourcen
\begin{itemize}
\begin{itemize}
\item
\item
Fähigkeiten einer Raumsonde optimieren
Fähigkeiten einer Raumsonde optimieren
\\
%
(Marsumlaufbahn:
ab ca.~127\,000 Euro pro kg)
(Marsumlaufbahn:
\\
ab ca.~127
\,
000 Euro pro kg)
% 70000000 / 550000 = 127._27
% 70000000 / 550000 = 127._27
% http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
% http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
\only
<.(1)>
{
\\
[\bigskipamount]
\strut\hfill\makebox
(0,0)[r]
{
\includegraphics
[height=3.5cm]
{
curiosity.jpg
}}
\vspace*
{
-1cm
}}
\only
<.(1)>
{
\\
[\bigskipamount]
\strut\hfill\makebox
(0,0)[r]
{
\
vspace*
{
1cm
}
\
includegraphics
[height=3.5cm]
{
curiosity.jpg
}}
\vspace*
{
-1cm
}}
\pause
\pause
\item
\item
Implantat: Platz- und Stromverbrauch minimieren
Implantat: Platz- und Stromverbrauch minimieren
...
...
This diff is collapsed.
Click to expand it.
20220613/bs-20220613.txt
0 → 100644
+
164
−
0
View file @
68bc4bfd
Wertebereiche von Bitfeldern, 13.06.2022, 11:58:01
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Syntax:
struct {
unsigned LEDsR:3;
unsigned LEDsL:3;
unsigned reserved:2;
};
LEDsR ist ein vorzeichenloses Bit-Feld, bestehend aus 3 Bits.
Wertebereich: 0 bis 7
Dasselbe als vorzeichenbehaftetes Bit-Feld:
struct {
int LEDsR:3;
int LEDsL:3;
int reserved:2;
};
Wertebereich bei 3 Bit: -4 bis 3
Warum?
* 3 Bits --> Wir haben 8 Werte zur Verfügung.
* Welche wir als positiv und welche als negativ interpretieren,
ist Sache der Konvention.
Damit die Hardware mit den Zahlen effizient rechnen kann,
verwenden wir kein Offset, sondern behalten das Bitmuster
000 für den Wert 0, 001 für 1 usw.
000 001 010 011 100 101 110 111
- alle positiv --> vorzeichenlose Zahl 0 1 2 3 4 5 6 7
- -1 bis 6 0 1 2 3 4 5 6 -1
- -2 bis 5 0 1 2 3 4 5 -2 -1
- ...
- -7 bis 0 0 -7 -6 -5 -4 -3 -2 -1
In Hardware implementierte Konvention: MSB = Vorzeichen-Bit
Vorteil: Die Hardware erkennt anhand des MSB das Vorzeichen.
000 001 010 011 100 101 110 111
0 1 2 3 -4 -3 -2 -1
Aufgabe: Welchen Wertebereich hat eine vorzeichenbehaftete 1-Bit-Zahl?
Lösung (per Mehrheitsbeschluß;-): 0 und -1
Überprüfung (unions-03.c): Stimmt. :-)
Begründung: Das einzige Bit ist gleichzeitig das MSB.
Wenn es gesetzt ist, muß der Wert negativ interpretiert werden.
Dann sind alle Bits = 1, was der Zahl -1 entspricht.
Was ist ein Callback? 13.06.2022, 13:15:47
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ziel: Reaktion auf ein Ereignis
Beispiel: Ereignis: Bumper hat Hindernis erkannt. Reaktion: Anhalten.
Weg dorthin: Bibliothek stellt einen "Callback"-Mechanismus zur Verfügung.
Wir schreiben für die Reaktion eine Funktion. Hier z.B.: anhalten und blinken
void bumpersStateChanged(void)
{
if(bumper_left || bumper_right)
{
moveAtSpeed(0,0);
setLEDs(0b010000);
startStopwatch1();
}
}
Vor dem Losfahren teilen wir der Bibliothek mit, daß sie diese Funktion
aufrufen soll, wenn das Ereignis (hier: Bumper löst aus) eintritt.
BUMPERS_setStateChangedHandler(bumpersStateChanged);
"Wenn sich der Zustand der Bumper ändert,
bitte die Funktion bumpersStateChanged() aufrufen."
Später läuft dann die Hauptschleife der Bibliothek.
Diese ruft dann bei Bedarf die übergebene Funktion
("Callback-Funktion") auf.
Variante dieses Konzepts: virtuelle Methode überschreiben
Beispiel: GUI-Bibliothek
Ein GUI-Element hat eine virtuelle Methode, um seinen Inhalt darzustellen.
Wenn ich ein neues GUI-Element definiere, muß ich diese Methode überschreiben,
damit es seinen spezifischen Inhalt darstellen kann.
Die GUI ruft dann bei Bedarf die virtuelle Methode auf ("Callback").
Beispiel: GUI-Bibliothek
- GTK in C: Callback-Funktion installieren
- GTK in C++: virtuelle Methode überschreiben
Wie funktionieren Callbacks? 13.06.2022, 13:14:34
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Bumpers State changed handler:
void BUMPERS_stateChanged_DUMMY(void){}
static void (*BUMPERS_stateChangedHandler)(void) = BUMPERS_stateChanged_DUMMY;
/**
* Use this function to set the Bumpers state change handler.
*
*/
void BUMPERS_setStateChangedHandler(void (*bumperHandler)(void))
{
BUMPERS_stateChangedHandler = bumperHandler;
}
Callback installieren: Funktion BUMPERS_setStateChangedHandler()
Parameter der Funktion: void (*bumperHandler)(void)
"Funktion mit dem Namen '(*bumperHandler)'"
--> *bumerHandler ist eine Funktion.
--> Das, worauf bumerHandler zeigt, ist eine Funktion.
--> bumerHandler ist ein Zeiger auf eine Funktion.
Aufruf von BUMPERS_setStateChangedHandler:
BUMPERS_setStateChangedHandler(bumpersStateChanged);
Wir übergeben die Adresse der Funktion bumpersStateChanged().
Insbesondere rufen wir die Funktion bumpersStateChanged() nicht auf.
(Um sie aufzurufen, bräuchte man das Klammerpaar.)
BUMPERS_setStateChangedHandler() merkt sich den Funktionszeiger
auf einer globalen Variablen BUMPERS_stateChangedHandler gleichen Typs.
Diese Variable, ein Zeiger auf eine Funktion, zeigte vorher auf eine
Funktion BUMPERS_stateChanged_DUMMY, die nichts macht.
Aber wer ruft nun tatsächlich die Callback-Funktion auf?
Dies geschieht in der Funktion task_Bumpers().
Diese Funktion
- schaut auf die Uhr: Sie wird höchstens alle 50 Millisekunden aktiv (weiche Echtzeit).
- fragt den Zustand der Bumper ab.
- ruft, sofern sich der Zustand der Bumper geändert hat, die Callback-Funktion auf.
Verbleibende Fragen:
- Wie funktioniert die Abfrage des Zustands der Bumper?
- Wer ruft task_Bumpers() auf?
Wie funktioniert die Abfrage des Zustands der Bumper?
- Der linke Bumper und LED Nr. 6 teilen sich einen Port
(Bumper als Input, LED als Output).
- Wir schalten LED Nr. 6 aus.
- Wir schalten den Port als Input.
- Wir warten einen Taktzyklus, damit der Prozessor den Input auslesen kann.
- Wir lesen den Input-Port.
- Sofern LED Nr. 6 leuchten soll, schalten wir den Port zurück auf Output
und die LED ein.
Wer ruft task_Bumpers() auf?
- task_RP6System() ruft task_Bumpers() auf.
- Das Hauptprogramm ruft in seiner Hauptschleife task_RP6System() auf
("kooperatives Multitasking").
Ohne dies würden die Bumper nicht funktionieren.
This diff is collapsed.
Click to expand it.
20220613/unions-03.c
0 → 100644
+
23
−
0
View file @
68bc4bfd
#include
<stdio.h>
#include
<stdint.h>
typedef
union
{
uint8_t
byte
;
struct
{
unsigned
bit0
:
1
;
unsigned
bit1
:
1
;
int
bit2
:
1
;
int
bit3
:
1
;
};
}
data
;
int
main
(
void
)
{
data
d
;
d
.
byte
=
0x0a
;
printf
(
"d.bit0 = %d, d.bit1 = %d, d.bit2 = %d, d.bit3 = %d
\n
"
,
d
.
bit0
,
d
.
bit1
,
d
.
bit2
,
d
.
bit3
);
return
0
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment