MIKROPROZESSOR PROGRAMMIERUNG LV

Werbung
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
MIKROPROZESSOR
PROGRAMMIERUNG
8. VORLESUNG
BIT
LV-Nr. 439.026
SS2007
1
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Datendefinitionen
b) Unterteilung nach Typen: (Teil 2)
• void … leer
• Pointer 2/4 Bytes Adresse von Objekten
• Arrays
bei allen Datentypen außer „bit“ möglich
Dimension (n) in eckiger Klammer [n]
Struktur
• Strukturen
mehrere Variablen werden zusammengefasst im Gegensatz
zu Arrays können diese verschiedene Datentypen beinhalten
• Unions
Es können verschiedene Datentypen in einer union Platz
finden. Sie werden dann ab der gleichen Speicheradresse
abgelegt. Der größte Datentyp bestimmt die Größe der union.
2
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Datendefinitionen
Beispiele :
Variablen
unsigned char idata var1,var2;
bit secflag;
const unsigned char text[5];
unsigned long far temp[100];
unsigned char *ptr;
signed char test_tab [4] [3];
float idata x,y,z;
Struktur
struct {
unsigned int day;
unsigned int month;
unsigned int year;
} d;
d.year = 2000;
Union
union {
unsigned char access_byte[2];
unsigned int access_int;
} measure;
Zugriff: measure.access_byte[0] = 0x21; measure.access_byte[1] = 0x43;
a = measure.access_int ergibt für das unsigned int a gleich 0x4321.
Mit dieser Definition kann auf zwei Bytes als integer zugegriffen werden und man
erspart sich die Umrechnung 256*high byte + low byte
3
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Funktionen (Functions)
„Tätigkeiten“, die an mehreren Stellen im Programm abgearbeitet werden sollten, sind als so genannte
Funktionen „Functions“ zusammengefasst. Die Definition für eine Funktion muss sich vor dem Aufruf befinden.
Befindet sich die Funktion in einem anderen Modul, muss sie als Prototyp (1. Zeile der Funktionsdefinition)
deklariert werden.
Struktur einer Function:
Rückgabetyp Function-Name ( Übergabevariablen mit Typendeklaration)
{
Definition lokaler Function-Variablen
Realisierung der Function-Tätigkeit
eventuelle Wertrückgabe
}
Function-Name: beliebig
4
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Funktionen (Functions)
Übergabevariablen:
Liste von Werten, die an die Function übergeben werden sollen. Die Übergabewerte werden an lokale Variablen
übergeben, die in der Function definiert werden müssen. Die Function arbeitet nur mit lokalen Kopien der
Übergabevariablen, d.h. nach Beendigung der Function sind diese Variablen im aufrufenden Programm unverändert. Will
man eine Veränderung, so kann man an die Function einen Pointer auf die Variable übergeben oder einfach mit globalen
Variablen arbeiten.
Wertrückgaben:
Jede Function kann durch den 'return(Variable)'-Befehl einen Wert zurückgeben.
Beispiele von Functions und ihrem Aufruf:
input=getkey();
pointerset(anfang);
value=select(digit);
/* function getkey() liefert einen Wert */
/* An die function pointerset() wird ein Wert übergeben */
/* An die function select() wird ein Wert */
/* übergeben, und ein entsprechender Wert */
/* wird von der function zurückgeliefert */
5
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Funktionen (Functions)
Variablendefinitionen:
static:
Eine static-Variable verhält sich teils wie eine globale und teils wie eine lokale Variable. Lokal ist
sie, weil der Gültigkeitsbereich nicht über den zugehörigen Block hinausgeht. Von einer globalen
Variablen hat sie, dass der ihr zugewiesene Wert auch außerhalb der Gültigkeitsgrenzen
erhalten bleibt.
Eine globale Variable als static zu definieren, führt zu einem besonderen Verhalten. Diese
Variable verhält sich für das Modul, in dem sie definiert wurde, genau wie eine globale Variable,
für andere Module ist diese Variable aber nicht sichtbar. Normale globale Variablen hingegen
sind von anderen Modulen aus les- und schreibbar.
volatile:
Volatile wird in Embedded-Systemen häufig verwendet. Dieses Schlüsselwort teilt dem Compiler
mit, dass die entsprechende Variable außerhalb der Kontrolle des Programms (z.B. über
Assemblerprogramme, Interrupte oder externe Beschaltung) verändert werden kann. Jeder
Zugriff auf diese Variable erfolgt deshalb durch direktes Lesen des Speichers. Von vorherigen
Operationen noch vorhandene Registerinhalte werden ignoriert. Bezüglich einer mit „volatile“
versehenen Variablen finden keine Optimierungen seitens des Compilers statt.
6
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Funktionen (Functions)
Variablendefinitionen:
register:
const:
Das Schlüsselwort gibt die Anweisungen an den Compiler, diese Variable
möglichst als Prozessorregister auszuführen. Sind keine Register mehr frei,
so wird die Anweisung ignoriert. Der Programmierer hat mit diesem
Schlüsselwort die Möglichkeit einer Laufzeitoptimierung.
Hiermit versehene Typen können nicht mehr verändert werden und gelten als
konstant. Bei vielen Compilern für die hier besprochenen Embedded-Systems
hat das Schlüsselwort const noch eine Besonderheit. Es sorgt dafür, dass
Konstanten (wenn möglich) im billigen Programmspeicher (ROM) anstatt im
teureren (knapperen) Arbeitsspeicher (RAM) des Systems abgelegt werden.
Das funktioniert bei Konstanten, die feste Werte haben, beispielsweise bei
Timerwerten oder Schleifendurchläufen. Bekommt jedoch eine Konstante
beim Anlegen derselben einen Wert aus z.B. einer Funktion zurückgeliefert,
so kann der Compiler diese Konstante natürlich nicht im ROM ablegen.
7
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Interrupt- Functions:
Allgemeine Form:
function_name () interrupt x using y
{
Interrupt- Behandlung;
}
Function Name beliebig
An interrupt functions können keine Werte übergeben werden und sie liefern keinen Wert zurück !
Interruptquellen x:
x bestimmt den Einsprungsvektor (aus dem User Manual des Controllers
zu entnehmen) z. B 0x20 für den Timer 0
Registerbank y : Name der Registerbank
Beispiel:
void periodint(void) interrupt 0x11 using period_bank
8
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Hauptprogramm (main):
Das Hauptprogramm: main() stellt den Kern jedes C-Programms dar. Das Hauptprogramm beginnt
mit der Initialisierung und setzt dann mit dem abzuarbeitenden Programm fort.
Beispiel:
void main(void)
{
S0CON=0x8011;
T0IC=0x44;
while(1)
{
}
/* Initialisierung */
/* Serielle 10-Bit-Rahmen */
/* Timer0 Interrupt erlauben und Priorität */
/* setzen */
/* Rest des Hauptprogrammes */
/*Endlosschleife */
}
9
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Typwandlung: automatisch, mittels CAST
Eine automatische Typwandlung auch „arithmetische“ oder „implizite“ Typwandlung genannt, wird
vom C-Compiler durchgeführt, wenn bei Operationen die Operanden unterschiedlichen Typs sind
oder auf Grund der Operation Wertebereiche überschritten werden. Dabei gilt die Regel, dass
Operanden mit kleinerem Wertebereich in einen Typ mit größerem Wertebereich gewandelt werden.
Zunächst wird char und short in int bzw. unsigned char und unsigned short in unsigned int
umgewandelt. Die weitere Rangfolge ist dann unsigned int, long, unsigned long sowie double. Ist
also ein Operand vom Typ double so wird auch der beteiligte andere Operand in den Typ double
umgewandelt.
10
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Typwandlung: mittels CAST
Wenn man den Datentyp einer Variablen verändern will, kann man das mit einer expliziten Typumwandlung (castOperator) erreichen. Wenn man z.B. eine Variable vom Typ int in eine vom Typ float umwandeln will, würde man
schreiben:
main()
{ int var1;
float var2;
var2 = (float)var1;
}
cast- Operator
Die Umwandlung müsste man in diesem Fall allerdings nicht explizit angeben, weil C automatische Typumwandlungen
durchführt. Das Beispiel zeigt aber die Syntax einer Typumwandlung mit dem cast-Operator. Man drückt damit aus,
dass eine Variable [hier var1] vom Typ (datentyp) [hier ( float )] sein soll, wenn der Ausdruck ausgewertet wird.
Diese Typwandlung mittels cast- Operator kommt in der Praxis recht häufig vor. Sie kann in beide Richtungen
angewandt werden:
a) von kleinerem Typ zum größeren ohne Datenverluste
b) von großem zu kleinerem Typ mit Datenverlust.
z.B. bei Integertypen in einen char werden dabei immer die höherwertigen
Bytes abgeschnitten. Bei float nach integer wird der Dezimalbruch abgeschnitten.
11
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Operatoren:
C erkennt mehr Operatoren als
C-Schlüsselwörter
=
12
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Zuweisungen und Arithmetische Operatoren (Teil 1):
13
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Zuweisungen und Arithmetische Operatoren (Teil 2):
14
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Vergleichende und Logische Operatoren:
Vergleichende Operatoren werden in if- Bedingungen, while-Schleifen oder in for-Schleifen zur Entscheidung für den
weiteren Programmablauf bzw. zur Programmverzweigung genutzt. Mit den Operatoren logisch UND / ODER können
mehrere Vergleichsausdrücke zu einen Ausdruck verknüpft werden:
15
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Bitweise Operatoren (Teil 1):
Diese Operatoren sind nur für die Datentypen char, int, short, long (signed oder unsigned) erlaubt. Mit ihnen ist eine
direkte Manipulation einzelner Bits möglich. Je nach µC und Compiler werden diese Befehle auf entsprechende
effiziente Maschinenbefehle abgebildet. Anwendungen finden diese hardwarenahe Bitsteuerung oft beim Zugriff auf
spezielle µC-Peripherie Register
16
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Bitweise Operatoren (Teil 2):
>>…011101000…<<
Bit 7 …
Bit 0
17
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Programmsteuerung:
C-Anweisung:
Eine C-Anweisung besteht aus einem Ausdruck (expression statement) dem ein
Semikolon folgt. Diese Anweisung kann ein komplexer Zuweisungsausdruck, eine
einfache Wertzuweisung, ein Operationsausdruck, ein Funktionsaufruf oder sogar eine
leere Anweisung sein (z.B. while() )
Beispiele:
Block { } :
x = 0;
einfache Werte Zuweisung
printf(„hallo welt“);
Funktionsaufruf
z = (x > y);
Operationsausdruck:
Entscheidungsergebnis TRUE oder FALSE
wird z zugewiesen
Als Block werden alle durch geschweifte Klammern zusammengefasste Vereinbarungen
und Anweisungen bezeichnet. Mit der öffnenden linken geschweiften Klammer { beginnt
dieser Block und nach der schließenden rechten geschweiften Klammer } endet er wieder.
Der schließenden Klammer } folgt kein Semikolon
Nach außen wirkt der Block syntaktisch wie eine einzige Anweisung, deshalb kann der
Block an allen Stellen verwendet werden, an denen nicht mehr als eine Anwendung
stehen darf, wie nach if, else, for, while usw. Auch bei den Funktionen haben wir den
Block kennen gelernt, denn jede Funktion besitzt mindestens einen derartigen Block, den
Funktionsblock
18
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Programmsteuerung:
if-else-Anweisung:
if (Testausdruck)
{ Anweisung1; }
else
{ Anweisung 2; }
Die if-else Anweisung dient der Auswertung eines in runde Klammern gestellten
Vergleichsausdruckes (Testausdruck) für eine boolsche Entscheidung. Ist das Ergebnis
des Vergleiches TRUE so wird Anweisung1 ausgeführt oder ein an dieser Stelle
stehender Block von Anweisungen (in geschweiften Klammern). Bei FALSE wird dagegen
der Zweig mit Anweisung2 ausgeführt, der aber auch fehlen darf.
Wichtig ist, dass TRUE ein beliebiger Wert ungleich Null ist. Bei FALSE dagegen ist er
genau Null !
Für Mehrwege Entscheidungen kann eine mehrfach verschachtelte if-else-if Konstruktion
verwendet werden. Es sind beliebige if-else-if Schachtelungen erlaubt.
if ( x != 0)
{ if (x<20) y = x*z; }
if (x != 0) y = x*z;
else if (z!=0) y = x*a;
else if (u != 0) y = x*b;
else y = 0;
19
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Programmsteuerung:
while-Schleifen:
while-Schleifen dienen der zyklischen Ausführungen eines Anweisungsblockes, solange
ein Testausdruck den Wert TRUE (ungleich Null) ergibt. Es werden zwei Arten von whileSchleifen unterschieden:
• while (Test-Ausdruck)
{ Anweisung; }
• do
{ Anweisung; }
while (Test-Ausdruck);
Bei ersterer Variante wird im Unterschied zur zweiten erst der Test-Ausdruck ausgewertet
und dann der Block Anweisung abgearbeitet. D.h. wenn diese erste Auswertung den Wert
FALSE ergibt wird der Anweisungsblock gar nicht abgearbeitet.
Bei der zweiten Variante (do…while) würde in diesem Fall von dem Test schon einmal der
Anweisungsblock Anweisung abgearbeitet worden sein. Erst dann erfolgt eine Auswertung
von dem Test-Ausdruck
20
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Programmsteuerung:
switch-case-Anweisung:
switch (Ausdruck)
{
case Konstante1: Anweisungen; break;
case Konstante2: Anweisungen; break;
...
case KonstanteN: Anweisungen; break;
default: Anweisungen;
}
Die switch-Anweisung wird für die Entscheidung von Mehrwegeauswahl einer Variablen
verwendet. Das switch-Statement ermittelt den Wert und vergleicht diesen mit der
dazugehörigen case-Liste. Bei Übereinstimmung mit einer zwischen case und dem
Doppelpunkt stehenden Konstante werden die Anweisung dieses case-Zweiges
abgearbeitet bis ein break gefunden wird. Ist kein break angegeben, werden die
Anweisungen des nächsten case- Zweiges ebenso abgearbeitet.
21
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Programmsteuerung:
for-Anweisung:
Die for-Anweisung dient der Realisierung von iterativen Schleifen. In runden Klammern
eingeschlossen sind die 3 Ausdrücke Initialisierung (Init), Wiederholungstest (Test),
Wiederinitialisierung (Neu-Init) anzugeben.
for (Init ; Test; Neu-Init)
z.B. for ( i=0 ; i<5 ; i++)
{ Anweisungen;
{ Anweisungen;
}
}
Zuerst wird die for-Schleife initalisiert, indem der Ausdruck <Init> ausgeführt wird. Dies
können eine oder mehrere Zuweisungen bzw. Funktionsaufrufe sein, die durch Komma
getrennt werden. Anschließend erfolgt die Prüfung des Ausdruckes <Test>. Ist das
Ergebnis TRUE, wird der Anweisungs-Block (Anweisungen) abgearbeitet, bei FALSE
dagegen wird die Schleife verlassen.
Nach Abarbeitung des Anweisungs-Blockes wird der Ausdruck <Neu-Init> ausgeführt. In
der Regel werden dort die Schleifenvariablen aktualisiert. Es können aber auch eine oder
mehrere Zuweisungen oder Funktionsaufrufe sein. Dann wird wiederum der Ausdruck
<Test> geprüft und das Szenario wiederholt sich. Also ein leicht verständliches Prinzip.
Die 3 Ausdrücke <Init>, <Test>, <Neu-Init> sowie der Anweisungsblock dürfen auch leer
sein. Allerdings sollten dabei nicht die trennenden Semikolon < ; > vergessen werden, sie
müssen in jedem Fall angegeben werden. Der Ausdruck for(; ;) ohne jede Angabe ist
ebenso zulässig und stellt eine Endlosschleife dar.
22
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Mathematische Funktionen (Teil1):
23
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Einführung in die „Embedded Systems“ C - Programmierung
Mathematische Funktionen (Teil2):
24
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
10101010101110101010101010101010101010010101010101010101010101001010101010101010101010101010101010101010101010101011111010100010101010101
01010101010101010101011011010101010101010101010101010101010101010101010101010101010101010101011010100100010101010110101010101010101010101
10010101010110101010111110101010101010101010101010101010111110101010101001010101011110110111110100101010100000110101111111011010101011011
Detaillierte Analyse eines 16-Bit Mikrocontrollers C167CR
25
HINTERBERGER M. 2007
INSTITUT FÜR ELEKTRONIK
Herunterladen