Sie sind auf Seite 1von 11

Erste Schritte der

Programmierung in C

C versus C++
Anatomie von C-Programmen für AVR-
Mikrocontroller

Unterschiede zwischen C++ und C

1
Grundlegende Unterschiede
 File-Extensions (Header und Quellcode)
- C++: .h und .cpp
- C: .h und .c
 C++ unterstützt objektorientierte Programmierung
- Klassen, Objekte (Attribute, Methoden, Kapselung, Vererbung,
Polymorphie, …)
 C unterstützt strukturierte Programmierung
- Variablen, Strukturen, Funktionen
 C = (C++) - (OOP) - (ein paar syntaktische Features)
 ISO-Standard C99 ist etwas näher an C++ Syntax als
ältere C-Standards
- Einstellung der Option –std=c99 (oder –std=gnu99) in AVR-
Studio-C-Projekten

Variablen-Definitionen

 C (älterer Standard) nur zu Beginn eines Blockes


möglich
- ergibt Compiler-Fehler : for(int i = 0; i < n; i++) {}
- korrekt:
{ /*irgendein Block beginnt*/
int i;
for(i = 0; i < n; i++) {}
}

 C++ und C99 an beinahe beliebiger Stelle im Quellcode


- korrekt: for(int i = 0; i < n; i++) {}

2
Einstellungen in AVR-Studio
 Compiler Option: -std=c99 für neuen Standard
 Compiler Option: –O0 für die ersten Versuche sollte
die Optimierung des Compilers ausgeschaltet werden

Project -> Configuration options

Type-Casting

 C++ zwei Varianten möglich


(double) x;
double (x);

 C und C99 nur eine Variante möglich


(double) x;

3
Kommentare

 C (ältere Standards): gleiche Kennzeichnung für


einzeilige
i ili undd mehrzeilige
h ili Kommentare:
K t
/* einzeiliger Kommentar */
/* mehrzeiliger
Kommentar */

 C++ und C99


// einzeiliger Kommentar
/* mehrzeiliger
Kommentar */

Boolscher Typ

 C++
bool b=true;
b=false;
 C und C99: Typ bool ist unbekannt
int b=1;
b 0;
b=0;

4
Funktionen
 Parameter Über- und Rückgabe bei Funktionsaufruf
- C++
Call by Value
Call by Reference (Referenz, Zeiger)
- C und C99
Call by Value
Call by Reference (nur Zeiger)
 Polymorphie
- C++: Funktionen dürfen gleichen Namen haben, wenn ihre
P
Parameterliste
t li t unterschiedlich
t hi dli h ist:
i t
float mean(int min, int max); // Prototyp 1
float mean(int* pArray, unsigned int len); // Prototyp 2
- C: Funktionen müssen unterschiedliche Namen haben
float mean(int min, int max);
float mean_a (int* pArray, unsigned int len);

Dynamisches Allokieren von


Speicherplatz
 C++
unsigned
g int M=2;
; // Array-Größe
y
int* p=new int[M];
p[0]=1;
// irgend ein Programm
delete [] p;

 C und C99
unsigned int M=2; // Array-Größe
int* p= malloc(sizeof(int)* M) // Anzahl der Bytes
p[0]=1;
// irgend ein Programm
free(p);

5
Tastatur-Eingabe und
Bildschirm-Anzeige

 C++
cin/cout

 C und C99
scanf/printf

Tastatur und Bildschirm gehören


nicht zur Standard-Ausstattung eines
Mikrocontrollers!

Strukturen
 C++
- kennt Klassen und Strukturen
class A A myObj(1,-1); // Objekt erzeugen
{
private:
int m_x;
int m_y;
public:
A(int x=0, y=0);
};
- Strukturen werden behandelt wie Klassen ohne Methoden und
mit public deklarierten Attributen
struct A A myStruct; // Strukturvariable
{ myStruct.m_x=1;
int m_x myStruct.m_y=-1;
int m_y;
};

6
Strukturen
 C
- kennt nur Strukturen
struct A
{
int m_x
int m_y;
};

struct A myStruct; // Schlüsselwort struct ist


myStruct.m_x=1; // notwendig
myStruct.m_y=-1;

- oder neuer Typ muss definiert werden


typedef struct A t_A; // t_A ist neuer Typ

t_A myStruct={1,-1};

const
 Weist den Compiler an, Variablen und Parameter von
y, d.h. nicht veränderbar zu
Funktionen als read-only,
deklarieren
const int A=10;
A=-2; // Compiler-Fehler

void foo(const int* p)


{
int x=*p;
p ;
*p=10; // Compiler-Fehler
p
}
 kein Unterschied zwischen C++ und C/C99!

7
Standard-Definitionsdateien in C
(Beispiele)
 <stdio.h>
Dateioperationen,
ate ope at o e , Formatierte
o at e te Ausgabe,
usgabe, Formatierte
o at e te Eingabe,
gabe, Ein-
und Ausgabe von Zeichen, Positionieren in Dateien,
Fehlerbehandlung
 <string.h>
Funktionen für Zeichenketten
 <math.h>
Mathematische Funktionen
 <
<stdlib.h>
tdlib h>
Hilfsfunktionen
 <limits.h>
Definiert Konstanten und den Wertumfang von ganzzahligen
Typen

Funktionsbibliothek für
ATMEL-Controller
 Name der Bibliothek: avr-libc
 Download der Dokumentation ab MIT-Download-Seite:

immer die aktuelle


Version der
Dokumentation
(online, als pdf. ...)

8
Dokumentation avr-libc
 Für den Schnellzugriff auf die Dokumentation der
verfügbaren Funktionen im pdf-Dokument, z.B. über
den Module index

Anatomie von C-Programmen für


AVR-Mikrocontroller

9
Programmablauf für Mikrocontroller

Definieren und
Initialisieren der
benötigten Variablen

Initialisieren der
benötigten
Komponenten

Mikrocontroller-
Programme laufen in Programm, das mit
endlosen Schleifen! Komponenten und
Variablen arbeitet

C-Programme für Mikrocontroller


// bindet ein h-File ein, in dem alle IO-Adressen und
// Konstanten für den eingestellten Mikrocontroller-Typ
// definiert sind
#include <avr\io.h>
#define F_CPU
F CPU 1e6 // eingestellte Prozessor-Taktfrequenz
// weitere include-Anweisungen für benötigte Funktionen der
// avr-libc oder eigene Include-Files
// Funktionsprototypen für eigene Funktionen
int main(void)
{
// Definieren & Initialisieren der benötigten Variablen
// Initialisieren der benötigten Komponenten
while(1) // Endlosschleife
{
// Programm, das mit Komponenten arbeitet
}
}
// eigene Funktionen

10
Wahl des Mikrocontroller-Typs

Einstellung der Prozessor-Taktfrequenz F_CPU

gleicher
Wert!

11