Beruflich Dokumente
Kultur Dokumente
WiSe21/22
Stephan Schulze
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 1 / 39
Gliederung
1 Befehlsausführung
3 Programmieren in C
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 2 / 39
Abschnitt 1
Befehlsausführung
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 3 / 39
Befehlsausführung
Ausführungszeit von Befehlen
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 4 / 39
Befehlsausführung
Ausführungszeit von Befehlen (Beispiel)
Beispielaufgabe:
mov r2 , #0x10000
m:
s u b s r2 , r2 , #1
bne m
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 5 / 39
Befehlsausführung
Befehlsabarbeitung
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 6 / 39
Befehlsausführung
Pipelining (I)
Ohne Pipelining:
Latenz: ? Takte
Durchsatz: ? Befehle/Takt
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 7 / 39
Befehlsausführung
Pipelining (II)
Mit Pipelining:
Latenz: ? Takte
Durchsatz: ? Befehle/Takt
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 8 / 39
Befehlsausführung
Pipelining (III)
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 10 / 39
Befehlsausführung
Instruction Sets (ARM)
ARM 32 32 32
Thumb 16 16 16 16 16 16 ...
Thumb-2 16 32 32 16
→ CMSIS? SIMD?
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 11 / 39
Befehlsausführung
Befehlsbeispiel: Thumb-2
Beispiel: SUBS
Syntax: SUBS <Rd>, <Rn>, #<imm3>
Maschinencode:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 1 1 <imm3> <Rn> <Rd>
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 12 / 39
Abschnitt 2
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 13 / 39
Unterabschnitt 1
Stack
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 14 / 39
Stack und Unterprogramme
Stack
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 15 / 39
Unterabschnitt 2
Unterprogramme
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 16 / 39
Stack und Unterprogramme
Unterprogramme
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 17 / 39
Stack und Unterprogramme
C-Funktionen vs. Assembler-Unterprogramme I
C-Code Assembler
Funktionsaufrufe und Parameter
mov r0 , #3
pythagoras (3 , 7) ; mov r1 , #7
bl pythagoras
Rückgabewerte mit return
mov r0 , . . .
return c ;
mov pc , l r
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 18 / 39
Stack und Unterprogramme
C-Funktionen vs. Assembler-Unterprogramme II
C-Code Assembler
Lokale Variablen
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 19 / 39
Stack und Unterprogramme
Stack und C
Warnung:
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 20 / 39
Abschnitt 3
Programmieren in C
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 21 / 39
Unterabschnitt 1
Datentypen
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 22 / 39
Programmieren in C
Basisdatentypen (Auswahl)
Typ Erklärung
Bool1 0 oder 1
char Ein Zeichen (bzw. Zahl)
signed char/unsigned char Ganzzahl, bei uns 8 Bits
short/unsigned short Ganzzahl, bei uns 16 Bits
int/unsigned int Ganzzahl, bei uns 32 Bits
long/unsigned long Ganzzahl, bei uns 32 Bits
float Fließkommazahl, bei uns 32 Bits
double Fließkommazahl, bei uns 64 Bits
1 Hinweis: nicht nativ!
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 23 / 39
Programmieren in C
Arrays
Beispiel:
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 24 / 39
Programmieren in C
Konstruierte Datentypen I
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 25 / 39
Programmieren in C
Konstruierte Datentypen II
typedef:
typedef unsigned i n t uint32 t ;
→ Kann verwendet werden als uint32 t x, y;
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 26 / 39
Programmieren in C
Konstruierte Datentypen III
Pointer:
int ∗ p;
→ Kann verwendet werden als:
p = &x; Dem Zeiger p wird zugewiesen: eine ”Adresse auf x”.
*p = 7; ”Dem worauf p zeigt” (also x) wird die Zahl 7 zugewiesen.
p = p1 ”p zeigt auf die gleiche Adresse, wie p1”
Das gleiche gilt für Pointer auf Strukturen. Wichtig hierbei: korrekte
Dereferenzierung:
(∗ p ) . wert = 20;
→ Siehe auch: Mehrfachpointer
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 27 / 39
Programmieren in C
Konstruierte Datentypen IV
const:
const int p ;
→ Kann normal verwendet werden (aber nur einmal beschrieben
werden!)
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 28 / 39
Unterabschnitt 2
Operatoren in C
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 29 / 39
Programmieren in C
Prioritäten
Priorität Symbol
15 ( ) () (Funktionsaufruf) [ ] -> .
14 +-(VZ) ! ∼ ++ – & * (Typ) sizeof
13 */%
12 +-
11
10 <≤≥>
9 == !=
8 &
7 ˆ
6 |
5 &&
4 k
3 ?:
2 = *= /= %= += -= &=ˆ= |= = gg =
1 ,
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 30 / 39
Programmieren in C
Operatoren (Auswahl)
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 31 / 39
Unterabschnitt 3
Allgemeines
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 32 / 39
Programmieren in C
Casts in C
Impliziter Cast:
Arithmetische Operationen werden in C im ”mächtigeren” der beiden
Operanden-Typen ausgeführt.
Expliziter Cast
int a , b;
float f ;
a = b ∗ 1.2 f ;
f = a / b;
f = a / ( float ) b;
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 33 / 39
Programmieren in C
Schleifen
for:
for(i = 0; i<10; i++){...}
while:
while(i < 10){...}
do-while:
do{...}while(i < 10);
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 34 / 39
Programmieren in C
Struktur eines Programms
#i n c l u d e <s t d i n t . h>
#i n c l u d e ” l c d . h”
#d e f i n e P I 3 . 1 4 1 5 9 2 6 f
uint16 t drehzahl ;
v o i d pruefeUmfang ( i n t r a d i u s )
{
f l o a t umfang ;
umfang = 2 ∗ PI ∗ r a d i u s ;
...
return ;
}
i n t main ( v o i d )
{
i n t x = 17;
...
pruefeUmfang (34) ;
}
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 35 / 39
Programmieren in C
Ablage von Variablen im Speicher
int x ;
int a [3];
int y ;
struct
{
int v ;
i n t w;
}s ;
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 36 / 39
Abschnitt 4
Anhang
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 37 / 39
Unterabschnitt 1
Quellen
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 38 / 39
Quellen I
Stephan Schulze (BHT Berlin / IAV GmbH) Termin 3 - MCT-2 19. Oktober 2021 39 / 39