d.
while- und do-Anweisung
o allg. Form:
while (expression)
{
statements;
}
do
{
statements;
}
while (expression);
o statement wird
solange ausgeführt, solange Wert von expression ungleich Null (true)
e.
continue- und break-Anweisung
Ø continue
o beendet
innerhalb for-, while-, do-Anw. akt. Schleifendurchlauf u. verzweigt zum
nächsten Durchlauf
o allg. Form:
continue;
Ø break
o beendet for-,
while-, do-, switch-Anw. vorzeitig u. verzweigt zu next_statement
o -allg. Form:
break;
4.
Funktionen
a.
Funktionsdeklaration und Funktionsdefinition
o allg. Form:
Typ Rückgabewert (optional) à void
ohne return value
Typ u. Parametername (optional) à void
ohne parameter
o Beispiel:
Aufbau C-Programm:
#include < . . . >
#define . . .
/* Funktionsdekl. */
void int_ports (void);
unsigned short int read_sensors (char val1, char val2, unsigned char3);
/* Funktion main */
void main(void)
{
char count1, count2;
unsigned char count3;
unsigned short int act_pos;
act_pos = read_sensors (count1, count2, count3); /*
Funktionsaufruf /*
act_pos = int_ports ();
}
/* Funktionsdef. */
void int_ports (void)
{
Anweisungen
}
unsigned short int read_sensors (char val1, char val2, unsigned char val3)
{
Anweisungen
}
b.
Übergabe von Argumenten und Rückgabewerten
o Call by value:
Argument-Übergabe erfolgt als Wert
o Return-Anweisung:
return (expression); à return
(variable);
Rückgabe Wert von expression an aufrufende Funktion.
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
c.
Gültigkeitsbereich und Lebensdauer von Variablen
o lokale
Variable:
- wird nach Blockanfang def. und gilt bis Blockende
- aktueller Wert geht von einem Funktionsaufruf zum nächsten verloren
o globale
Variable: à z.B.: unsigend
short int global_control;
- wird außerhalb aller Funktionen eines Moduls def.
- gilt bis zum Modul-Ende
- akt. Wert bleibt bis zur nächsten Zuweisung erhalten
o externe Variable u. externe Funktion:
-Variable oder Funktion kann modulübergreifend verwendet werden, wenn sie im
Modul x außerhalb von allen Funktionen definiert u. im Modul y mittels extern
deklariert werden.
- ext. Variable ist immer verfügbar
- extern-Dekl. von Variablen u. Funktionen oft innerh. Include
file
Modul 1
extern void read_frequ(void);
extern unsigned char counter;
double max_frequ = 0;
void main(void)
{
..
read_frequ();
..
if ( max_frequ >= ..)
..
if (counter == ..)
..
}
Modul 2
extern double max_frequ;
unsigned char counter = 1;
void read_frequ(void)
{
..
max_frequ = ..
counter = ..
..
}
o Static-Variable
u. static-Funktion:
- Gültigkeitsbereich auf Block beschränkt, in dem Variable def. wurde
- Lebensdauer bleibt über gesamten Programmablauf erhalten
void write_lcd (..)
{
static unsigned short int cursor_pos = 0;
..
cursor_pos = ..
..
}
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
5.
Pointers und Vektoren
a.
Pointers
o unsigned char
*byte_ptr;
- Pointer zeigt nur auf den in Def. festgelegten Datentyp
o Adress-Operator:
&
float &act_temp ; // erste Adresse der
float variable wird angezeigt
(float 4 bytes
groß)
unsigned &char out_byte; // Adresse der char variable
wird angezeigt
liefert in Verbindung mit einem
Variablennamen die Adresse der Variablen
o inhalts-Operator:
*
liefert angewandt auf einen Pointer, das Objekt auf das der Pointer zeigt
(Wert der Variable wird angezeigt, auf die der Pointer zeigt)
*byte_ptr; // initialisierung
des pointers byte_ptr (4 bytes groß)
unsigned char byte1 = 21; // initialisierung der variable byte1
byte_ptr = &byte1; // Adresse von byte1 wird in
byte_ptr geschrieben
byte_ptr*; // Inhalt von Variable byte1 wird
angezeigt
b.
Argument – Übergabe an Funktionen
o Call by reference
void swap (unsigned char *byte_p1, unsigned char
*byte_p2);
main()
{
unsigned char high_byte, low_byte;
swap (&high_byte, &low_byte); /*byte swap*/
}
void swap (unsigned char *byte_p1, unsigned char *byte_p2)
{
unsigned char temp;
temp = *byte_p1;
*byte_p1 = *byte_p2;
*byte_p2 = temp;
}
- korrekter Tausch von high_byte,
low_byte in main
-wird Name eines Vektors als Argument an Fkt. übergeben, erhält Fkt. Adresse des Vektors
c.
Vektoren
o allg. Form: à typ vektor_name
[elemente_anzahl];
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
d.
Zusammenhang zwischen Pointer und Vektor
buff_ptr=&buffer[0]; //
1 Adresse vom Vektor buffer wird in buff_ptr geschrieben
buff_ptr=&buffer[3]; // 4 Adresse vom Vektor buffer wird in buff_ptr
geschrieben
buff_ptr=buffer;
buff_ptr=buffer+3; // gleicher aber besserer code als oben
value=buffer[3]; // Inhalt vom Vektor buffer wird in value geschrieben
value=*(buffer+3); // gleicher code (erst Klammer dann
Inhaltsoperator)
e.
Pointer-Arithmetik
a) Zuweisung auf Pointer
-Pinter kann mit Pointer gleichen
Typs oder mit ganzz. Ausdruck initial. warden
unsigned char *count_p1, **count_pp; //**
Pointer der auf Pointer zeigt
port1_p = (unsigned char *) 0x00F00000;
count_pp = &count_p1; //count_pp erhält Adresse auf die
count_p1 zeigt
++**count_pp; // ++(*(*count_pp))
b)
Addition, Subtraktion int-Wert zu Pointer
-zu Pointer kann int-Wert
addiert/subtrahiert werden
number = *++rec_p; //Adresse um 1 erhöht und
dann Wert zugewiesen
number = *(rec_p+2); // Adresse um 2 erhöht und dann Wert
zugewiesen
c.) Subtraktion von Pointers
-Pointers können voneinander
subtrahiert werden, wenn sie auf Elemtente des gleichen Vektors zeigen.
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
d.) Vergleich von Pointers
-Pointers können miteinander
verglichen warden, wenn sie auf Elemtente des gleichen Vektors zeigen
unsigend short int i, j, *start_p, *end_p,
out_buff[2000];
start_p = out_buff + i;
end_p = out_buff + j;
if (start_p > end_p )
{ /*error handling */ }
6.
Strukturen Datentypen
o Struktur:
Zusammenfassung von Variablen unterscheidl. oder gleichen Typs unter gemeinsamen.
Namen
typdef struct
{
unsigend char day;
unsigend char info [3];
} MESSAGE_STRUCT;
MESSAGE_STRUCT short_message;
short_message.day = 5;
short_message.info[ 0 ] = `M`;
//oder
MESSAGE_STRUCT short_message = {20, “abc”};
o - Struktur kann andere Struktur als Komponente enthalten
typedef struct
{
MESSAGE_STRUCT time;
float startTemp;
float endTemp;
} TEMP_MEAS;
TEMP_MEAS motorTemp;
meas_hour = motorTemp.time.day;
o Vektoren von Strukturen
typedef struct
{
unsigned short int nr;
unsigned char art[4];
} MESS_STRUCT;
MESS_STRUCT messung[20];
o Struktur kann
anderer Struktur zugewiesen werden, wenn diese vom Gleichen Typ ist
MESS_STRUCT mess1, mess2;
mess2 = mess1;
o Pointers auf
Strukturen
- für Pointers auf Strukturen
gilt Pointer-Arithmetik
unsigned short int mess_nummer;
MESS_STRUCT *messung_p;
messung_p=&mess_1;
mess_nummer=(*messung_p).nr;
vereinfachte Schreibweise für
Zugriff auf Strukturkomponenten mittels Pointer
messung_p=&mess_1;
mess_nummer=(*messung_p).nr;
mess_nummer= messing_p -> nr; //
mess_nummer=mess_1[0].nr
This paragraph has been concealed! Download the complete document for free! • Click on download to get complete and readable text • This is a free of charge document sharing network • First upload your own document, and you get a word document per email • No registration necessary, gratis Swap homeworks and notes at no charge! Gratis scripts for students and pupils!
o Union:
Variable, die zu unterschiedlichen Zeitpunkten Objekte mit verschiedenen
Datentypen und Größen enthält.
- Speicher für größten Datentyp wird reserviert àhier
double. Bei neuer Wertzuweisung wird Speicherbereich überschrieben
typdef union
{
unsigned char control_byte;
unsigned short int number;
double temp;
} TRANS_BUFF;
TRANS_BUFF transmit_buffer, *buff_p;
buff_p = &transmit_buffer;
buff_p -> control_byte = c_byte;
buff_p -> number = act_nr;
buff_p -> temp = act_temp;
a.
Bit-Felder
o Menge
nebeneinander liegender Bits innerhalb eines Worts
typedef struct //max 16 Bit da
U_INT16
{
U_INT16 direction : 1; // 1 Bit groß
U_INT16 speed : 4; // 4 Bit groß
} CTRL_PORT;
CTRL_PORT *ctrl_port_p = (CTRL_PORT *) 0x00F0600;
ctrl_port_p -> direction = FORWARD;
ctrl_speed_p -> speed = SLOW;
|