U4 Grundlagen der C-Programmierung

Ähnliche Dokumente
U4 Grundlagen der C-Programmierung

U3 Grundlagen der AVR-Programmierung

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

4 Formelsammlung C/C++

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Übungen zu Systemnahe Programmierung in C (SPiC)

10 Die Programmiersprache C99: Zusammenfassung

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Programmierkurs C++ Variablen und Datentypen

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Deklarationen in C. Prof. Dr. Margarita Esponda

Die Programmiersprache C99: Zusammenfassung

Hinweise C-Programmierung

Datentypen in C. Informatik Universität Hamburg Proseminar: C-Grundlagen und Konzepte Jan Branitzki

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Inhalt. Aufgabe 4: LED-Modul Hinweise Testen des Moduls Sommersemester 2015

Speicherklassen (1) Lokale Variablen

RO-Tutorien 3 / 6 / 12

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Übungen zu Systemnahe Programmierung in C (SPiC)

Grundlagen der Informatik 2. Typen

RO-Tutorien 15 und 16

Moderne C-Programmierung

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Einführung in die C-Programmierung

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Tutorium Rechnerorganisation

Systemnahe Programmierung in C Übungen Moritz Strübe, Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2010 U2.fm

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber

U5 Fortgeschrittene AVR-Programmierung U5 Fortgeschrittene AVR-Programmierung. Synchronisation mit Unterbrechungsbehandlungen

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

PIC16 Programmierung in HITECH-C

Felder, Zeiger und Adreßrechnung

3. Exkurs in weitere Arten der Programmierung

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

Einführung in die Programmierung

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009

Algorithmen zur Datenanalyse in C++

Unterlagen. CPP-Uebungen-08/

Algorithmen und Datenstrukturen

C-Deklarationen lesen und schreiben

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Interrupts. Inhalt. Interrupts. Synchronisation

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Vorkurs C++ Programmierung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Girls Day 2017 Programmierung

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme?

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

2. Datentypen und Deklarationen

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

Tag 4 Repetitorium Informatik (Java)

Übungen zu Systemnahe Programmierung in C (SPiC)

Datentypen in C. Universitat Hamburg Fachbereich Informatik Proseminar: C-Grundlagen und Konzepte. Jan Branitzki

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

2 Eine einfache Programmiersprache

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Java I Vorlesung Imperatives Programmieren

Einführung in C. EDV1-04C-Einführung 1

Grundlagen der C++ - Programmierung für das MiniBoard von qfix 1

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Elementare Datentypen in C++

Programmiertechnik Erweiterungen in Java 5

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

2. Programmierung in C

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Grundlagen der OO- Programmierung in C#

U5 Fortgeschrittene AVR-Programmierung

b) Was bewirken folgende Programmanweisungen? uint8_t x = 42; x ^= x;

Einführung in die Programmierung

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Tag 4 Repetitorium Informatik (Java)

Programmiersprachen Einführung in C

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Einführung in die Programmierung Wintersemester 2008/09

Java Einführung Methoden. Kapitel 6

Crashkurs C++ - Teil 1

Codingstandard. Softwareentwicklung Praktikum Stand:

Informatik I Übung, Woche 41

Kapitel 3: Variablen

C++ - Funktionen und mehr -

Projekt 3 Variablen und Operatoren

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Grundlagen der Programmierung in C++ Zusammengesetzte Typen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 12

Einstieg in die Informatik mit Java

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

Einführung in die Programmiersprache C

Programmierkurs C++ Kapitel 6 Module Seite 1

Programm-Ablauf. int main() // Beispiel- Struktur eines Programmes. prepare_everything(); read_input(); calculate_result(); write_output();

Transkript:

U4 Grundlagen der C-Programmierung U4 Grundlagen der C-Programmierung Makros Enums und Typedefs Deklaration und Definition Compileroptimierungen U4.1

U4-1 Makros U4-1 Makros Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies passiert bevor der Compiler die Datein verarbeitet. Aufbau: #define Suchwort Ersetzung Anweisungsende ist der Zeilenumbruch (kein Strichpunkt!) Ersetzung: #define MEINE_KONST 7 [..] a = b + MEINE_KONST; // a = b + 7; #define MEINE_ERSETZUNG = b + 7 [..] a MEINE_ERSETZUNG; // a = b + 7; U4.2

U4-1 Makros (2) U4-1 Makros Funktionen: #define POW2(a) (a * a) [..] a = POW2(4); // a = (4 * 4); Achtung: #define ADD(a, b) a + b [..] a = ADD(7, 5) * 5; // a = 7 + 5 * 5 = 32 Berechnungen bei Makros in Klammern setzen #define ADD(a, b) (a + b) [..] a = ADD(7, 5) * 5; // a = (7 + 5) * 5 = 60 U4.3

U4-2 Enums U4-2 Enums Der Enum-Typ (engl. Enumeration = Aufzählung) Zuweisung eines Namens zu einem Integertyp C beginnt mit 0 und erhöht Enums automatisch um 1 Beispiel: enum LED_e{ RED0 = 0, YELLOW0 = 1, GREEN0 = 2, BLUE0 = 3, RED1 = 4, YELLOW1 = 5, GREEN1 = 6, BLUE1 = 7 ; enum LED_e{ RED0 = 0, YELLOW0, GREEN0, BLUE0, RED1, YELLOW1, GREEN1, BLUE1 ; U4.4

U4-2 Enums (2) U4-2 Enums Verwendung von Enums enum LED_e{ RED0, YELLOW0, GREEN0, BLUE0, RED1, YELLOW1, GREEN1, BLUE1 ; enum LED_e meineled; meineled = RED1; meineled++; if(meineled == YELLOW1){ /* Dies wird ausgeführt */ Achtung! C überprüft den Wertebereich von Enums nicht! meineled++; kann also einen ungültigen Wert ergeben! Die Einhaltung des Wertebereichs ist Aufgabe des Programmierers. U4.5

U4-3 Typedefs U4-3 Typedefs Typedefs erlauben es, neue Variablentypen zu deklarieren Beispiel stdint.h der libavr: typedef signed char int8_t; typedef unsigned char uint8_t; typedef signed int int16_t; typedef unsigned int uint16_t; typedef signed long int int32_t; typedef unsigned long int uint32_t; Dies ist auch mit Enums oder Strukturen (werden später eingeführt) möglich Verkürzte Schreibweise aus der led.h: typedef enum { RED0=0, YELLOW0=1, GREEN0=2, BLUE0=3, RED1=4, YELLOW1=5, GREEN1=6, BLUE1=7 LED; U4.6

U4-4 Deklaration und Definition U4-4 Deklaration und Definition Compiler arbeiten den Quelltext von oben nach unten ab Deklaration Das "Versprechen", dass es eine Funktion/Variable geben wird, die einen bestimmten Rückgabewert hat und bestimmte Parameter übergeben bekommt. uint8_t meinefunktion(uint8_t w1, uint16_t w2); Definition Die eigentliche Funktion uint8_t meinefunktion(uint8_t w1, uint16_t w2){ /* Hier passiert was */ Die Funktionen der libspicboard werden in Headerdateien deklariert. U4.7

U4-5 Optimierung durch den Compiler U4-5 Optimierung durch den Compiler Eine CPU arbeitet nicht direkt im Speicher: 0 (1) Laden aus dem Speicher in Register (2) Abarbeiten der Operationen in den Registern (3) Zurückschreiben in den Speicher Der Compiler macht Annahmen, um den Code zu optimieren. Beispiele: Variableninhalte sind beständig. Sie ändern sich nicht "von alleine". Operationen, die den Zustand nicht ändern, können entfernt werden. U4.8

U4-5 Optimierung durch den Compiler U4-5 Optimierung durch den Compiler (2) Typische Optimierungen: Code wird weggelassen. Die Reihenfolge des Codes wird umgestellt. Für lokale Variablen wird kein Speicher reserviert; es werden stattdessen Register verwendet. Wenn möglich, übernimmt der Compiler die Berechnung: a = 3 + 5; wird zu a = 8; Der Wertebereich wird geändert: Statt von 0 bis 10 wird von 246 bis 256 ( = 0 für uint8_t ) gezählt und dann getestet, ob ein Überlauf stattgefunden hat. U4.9

Codebeispiel U4-5 Optimierung durch den Compiler void wait(void){ uint8_t u8; while(u8 < 200){ u8++; U4.1

U4-5 Code ohne Optimierung U4-5 Optimierung durch den Compiler Codebeispiel ohne Optimierung: ;void wait(void){ ; uint8_t u8; ; [Prolog (Register sichern, etc)] rjmp while; Springe zu while ; u8++; addone: ldd r24, Y+1; Lade Daten aus Y+1 in Register 24 subi r24, 0xFF; Ziehe 255 ab (addiere 1) std Y+1, r24; Schreibe Daten aus Register 24 in Y+1 ; while(u8 < 200) while: ldd r24, Y+1; Lade Daten aus Y+1 in Register 24 cpi r24, 0xC8; Vergleiche Register 24 mit 200 brcs addone; Wenn kleiner dann springe zu addone ;[Epilog (Register wiederherstellen)] ret; Kehre aus der Funktion zurück U4.1

U4-5 Code mit Optimierung U4-5 Optimierung durch den Compiler Codebeispiel mit Optimierung: ; void wait(void){ ret; Kehre aus der Funktion zurück ; Die Schleife hat keine Auswirkung auf den Zustand. Lösung: Variable als volatile (engl. unbeständig) deklarieren Für Variablen bedeutet dies: Sie müssen immer in den Speicher gelegt und vor und nach jeder Operation mit diesem synchronisiert werden; ihr Wertebereich darf nicht geändert werden. U4.1

Einsatzmöglichkeiten von volatile: Warteschleifen U4-5 Optimierung durch den Compiler void wait(void){ volatile uint8_t u8; while(u8 < 200){ u8++; Zugriff auf Hardware (z. B. Pins). Debuggen; der Wert wird nicht wegoptimiert. U4.1