Programmierung in C
C versus C++
Anatomie von C-Programmen für AVR-
Mikrocontroller
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
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
Type-Casting
3
Kommentare
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);
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
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;
};
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
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:
8
Dokumentation avr-libc
Für den Schnellzugriff auf die Dokumentation der
verfügbaren Funktionen im pdf-Dokument, z.B. über
den Module index
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
10
Wahl des Mikrocontroller-Typs
gleicher
Wert!
11