Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester 2010 Peter.

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester 2010 Peter."—  Präsentation transkript:

1 Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester Peter Klingebiel, HS Fulda, DVZ

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 Anwendung Smartmeter 1 Entwicklung eines Programms zum Auslesen des "intelligenten Stromzählers" 3 Stromkreise sind zu messen 1 Meßwert / Sekunde 15 Minuten messen, dann Übertragung der Meßwerte an Versorger / Drittanbieter

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Anwendung Smartmeter 2 Datentypen für Messungen –wie sollen die Messungen abgebildet werden? –wie sollen die Messungen gespeichert werden?

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 Anwendung Smartmeter 3 Wie sieht die Messfunktion aus? Simulation!

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 Anwendung Smartmeter 4 Wie sieht die Sendefunktion aus? Simulation!

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 Anwendung Smartmeter 5 Wie sieht die main-Funktion aus? Simulation!

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 Anwendung Smartmeter 6 smartmeter1.c

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 Anwendung Smartmeter 7 smartmeter mit Grafikausgabe (SVG)

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 Anwendung Smartmeter 8 smartmeter2.c

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 Signale 1 Signal Systemnachricht an einen Prozess vergleichbar mit einem Interrupt ausgelöst z.B. vom Nutzer... –Abbruch (Ctrl-C, SIGINT) –Programmstop (SIGKILL)... oder vom System –Timer (SIGALRM) –Programmende (SIGTERM) #include

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 Signale 2 einige Signale: –SIGINT – Unterbrechung (meist Ctrl-C) –SIGHUP – Programmende –SIGKILL – Programm beenden –SIGALRM – Timer abgelaufen Signale können abgefangen werden : void handler(int sig) {... }... signal(SIGALRM, handler);

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Signale 3 signal.c

13 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 Signale 4 Timerfunktionen alarm(int nsec) löst nach nsec Sekunden ein Signal SIGALRM aus: void alrmhandler() { printf("SIGALRM!\n"); }... signal(SIGALRM, alrmhandler); alarm(5);...

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 Signale 5 alarm.c

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 Signale 6 Feinere Auflösung mit Intervall-Timer #include Datentypen struct timeval { time_t tv_sec;/* Sekunden */ suseconds_t tv_usec; /* Microsek. */ }; struct itimerval { struct timeval it_interval; struct timeval it_value; };

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Signale 7 Funktionen setitimer(int w, struct itimerval *v, struct itimerval *ov) getitimer(int w, struct itimerval *v) Werte für w ITIMER_REAL Systemuhr/-zeit ITIMER_VIRTUAL Prozesszeit Beispiel: struct itimerval it; it.it_value.tv_sec = 2; /* 2 Sek. */ it.it_value.tv_usec = 0; /* Start */ it.it_interval.tv_sec = 0; /* 0,5 Sek */ it.it_interval.tv_usec = ; /* Interv. */ setitimer(ITIMER_REAL, &it, NULL);

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Signale 8 smartmeter3.c

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Signale 9 smartmeter4.c

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 Bitfelder 1 Bitfelder Elemente vom struct -Typ Einzelelemente: int oder unsigned int gedacht für hardwarenahe Programmierung Problem: compilerabhängig nicht portabel! Beispiel: typedef struct _iodev { /* Bitfeld */ unsigned int rflag:1; /* 1 Bit: Writeflag */ unsigned int wflag:1; /* 1 Bit: Readflag */ unsigned int d1:2; /* Dummy */ unsigned int type:2; /* 2 Bit: Geraetetyp */ unsigned int d2:2; /* Dummy */ unsigned int data:8; /* 8 Bit: Datenbyte */ } iodev;

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Bitfelder 2 Speicherung eines Bitfelds

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 Bitfelder 3 bitfeld.c

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 Unionen 1 union : spezielle Art von struct anderer Name: varianter Rekord Speichern der Elemente in union nicht nacheinander, sondern übereinander union -Elemente teilen sich Speicherplatz sinnvoll bei gleichartigen Objekten, die aber verschiedenen Typs sein können union { /* Union: */ char c; /* char */ short s; /* short */ int i; /* int */ } u; /* teilen sich Platz */

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 Unionen 2 Speicherung von struct und union

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 Unionen 3 union.c

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 Unionen 4 union oft Element in einem struct Typ des Elements in union muss definiert sein eigenes Typelement im struct Beispiel struct number { /* Struct Zahl */ byte typ; /* Typ union-Element */ union { /* Union: */ byte b; /* byte */ short s; /* short */ int i; /* int */ } u; };

26 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 Unionen 5 Zugriff auf union : struct number n;... switch(n.typ) { case BYTE: dobyte(n.u.b); break; case SHORT: doshort(n.u.s); break; case INT: doint(n.u.i); break; }

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Unionen 6 Beispiel: mydraw4.c #define LINE 0x01 /* Typ Linie */ #define RECT 0x02 /* Typ Rechteck */ #define CIRCLE 0x04 /* Typ Kreis */... typedef struct _obj { /* Objekt allgemein */ int n; /* Objektnummer */ int f; /* Loeschflag */ int t; /* Typ des Objekts */ union { line l; /* Linie */ rect r; /* Rechteck */ circle c; /* Kreis */ } o; } object;

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Unionen 7 mydraw4.c

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Syntaxfehler 1 C hat kein sinnvolles error recovery eine sehr schlechte Fehlerbehandlung beim Übersetzen nach Auftreten von Syntaxfehlern der C-Compiler setzt nach einem Fehler nicht neu auf und tut so, als ob es keinen Fehler gegeben hat, sondern produziert eine Anzahl, manchmal eine wahre Fülle von Folgefehlern tatsächliche Fehler oft schwer zu finden Fehlererkennung und –korrektur mühsam

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 Syntaxfehler 2 treten nur ein oder ganz wenige Fehler auf Fehlersuche in oder vor der Zeile, die in der Fehlermeldung angegeben ist treten viele und oft unsinnig erscheinende Fehler auf Fehlersuche im Umfeld vor der Zeile, die in der Fehlermeldung angegeben ist dann erneut kompilieren... oder viel Glück!!

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 Laufzeitfehler 1 oft ist es mühsam, Syntaxfehler zu finden noch mühsamer Laufzeitfehler finden intuitives Herangehen: zusätzliche Ausgaben in den Programmtext einstreuen ggfs. mit CPP-Direktiven #ifdef DEBUG printf("copy: %p %p\n", s1, s2); #endif übersetzen dann mit gcc –DDEBUG file.c

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 Laufzeitfehler 2 debug1.c

33 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 Laufzeitfehler 3 debug2.c - debug1.c mit CPP-Direktiven

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 Laufzeitfehler 4 das Verfahren ist mühsam und zeitaufwendig Alternative Debugger nutzen Debugger: Werkzeug, unter dessen Kontrolle ein Programm gestartet und während des Programmslaufs untersucht werden kann für gcc (und dev-cpp) GNU-Debugger gdb Kode muss für Debugging instrumentiert werden: gcc –g file.c –o file dann Debugger aufrufen: gdb file

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 Laufzeitfehler 5 gdb – interaktive Shell mit vielen schönen Features innerhalb dev-cpp weitgehend durch die grafische Oberfläche angesteuert wichtige Kommandos –help –help topic –run wenn das Programm läuft, alles ok! bei Fehlern ???

36 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 Laufzeitfehler 6 Wichtige Mechanismen Breakpoints – Unterbrechung an definierten Stellen (z.B. Zeilennummer, Funktion) –break file.c:12 –break func Watchpoints – Unterbrechung bei Änderung des Werts einer Variablen –watch varname Anzeigen von Variablenwerten –print varname

37 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 Laufzeitfehler 7 Breakpoint setzen und starten –break func –run Unterbrechung bei Breakpoint –print varname –continue schrittweises Vorgehen –step Debugger beenden –quit

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 Laufzeitfehler 8 debug3.c

39 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 Profilanalyse oft notwendig: Laufzeitverhalten von Programmen zu überprüfen –wo wird die Laufzeit verbraucht? –wo ist Optimierung notwendig / möglich? Profilanalyse des Programms Instrumentierung mit -pg bei Neucompilieren gcc -pg prog.c -o prog Starten des Programms gmon.out prog Profilanalyse mit gprof, prog, gmon.out gprof prog


Herunterladen ppt "Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester 2010 Peter."

Ähnliche Präsentationen


Google-Anzeigen