Informatik ii grundlagen der programmierung programmieren in c add ons
This presentation is the property of its rightful owner.
Sponsored Links
1 / 39

Informatik II Grundlagen der Programmierung Programmieren in C Add Ons PowerPoint PPT Presentation


  • 105 Views
  • Uploaded on
  • Presentation posted in: General

Informatik II Grundlagen der Programmierung Programmieren in C Add Ons. Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ. Anwendung Smartmeter 1. Entwicklung eines Programms zum Auslesen des "intelligenten Stromzählers"

Download Presentation

Informatik II Grundlagen der Programmierung Programmieren in C Add Ons

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Informatik ii grundlagen der programmierung programmieren in c add ons

Informatik IIGrundlagen der ProgrammierungProgrammieren in CAdd Ons

Hochschule Fulda – FB ET

Sommersemester 2010

http://www.rz.hs-fulda.de/et

Peter Klingebiel, HS Fulda, DVZ


Anwendung smartmeter 1

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 2

Anwendung Smartmeter 2

  • Datentypen für Messungen

    • wie sollen die Messungen abgebildet werden?

    • wie sollen die Messungen gespeichert werden?

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 3

Anwendung Smartmeter 3

  • Wie sieht die Messfunktion aus? Simulation!

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 4

Anwendung Smartmeter 4

  • Wie sieht die Sendefunktion aus?Simulation!

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 5

Anwendung Smartmeter 5

  • Wie sieht die main-Funktion aus?Simulation!

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 6

Anwendung Smartmeter 6

  • smartmeter1.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 7

Anwendung Smartmeter 7

  • smartmeter mit Grafikausgabe (SVG)

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Anwendung smartmeter 8

Anwendung Smartmeter 8

  • smartmeter2.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 1

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 <signal.h>

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 2

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);

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 3

Signale 3

  • signal.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 4

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);...

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 5

Signale 5

  • alarm.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 6

Signale 6

  • Feinere Auflösung mit Intervall-Timer

  • #include <sys/time.h>

  • Datentypenstruct timeval { time_t tv_sec;/* Sekunden */ suseconds_t tv_usec; /* Microsek. */};struct itimerval { struct timeval it_interval; struct timeval it_value;};

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 7

Signale 7

  • Funktionensetitimer(int w, struct itimerval *v, struct itimerval *ov)getitimer(int w, struct itimerval *v)

  • Werte für wITIMER_REAL Systemuhr/-zeitITIMER_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 = 500000; /* Interv. */setitimer(ITIMER_REAL, &it, NULL);

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 8

Signale 8

  • smartmeter3.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Signale 9

Signale 9

  • smartmeter4.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Bitfelder 1

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;

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Bitfelder 2

Bitfelder 2

  • Speicherung eines Bitfelds

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Bitfelder 3

Bitfelder 3

  • bitfeld.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 1

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önnenunion { /* Union: */ char c; /* char */ short s; /* short */ int i; /* int */} u; /* teilen sich Platz */

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 2

Unionen 2

  • Speicherung von struct und union

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 3

Unionen 3

  • union.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 4

Unionen 4

  • union oft Element in einem struct

  • Typ des Elements in union muss definiert sein  eigenes Typelement im struct

  • Beispielstruct number { /* Struct Zahl */ byte typ; /* Typ union-Element */ union { /* Union: */ byte b; /* byte */ short s; /* short */ int i; /* int */ } u; };

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 5

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;}

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 6

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;

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Unionen 7

Unionen 7

  • mydraw4.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Syntaxfehler 1

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Syntaxfehler 2

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!!

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 1

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 DEBUGprintf("copy: %p %p\n", s1, s2);#endif

  • übersetzen dann mitgcc –DDEBUG file.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 2

Laufzeitfehler 2

  • debug1.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 3

Laufzeitfehler 3

  • debug2.c - debug1.c mit CPP-Direktiven

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 4

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 5

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 ???

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 6

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 7

Laufzeitfehler 7

  • Breakpoint setzen und starten

    • break func

    • run

  • Unterbrechung bei Breakpoint

    • print varname

    • continue

  • schrittweises Vorgehen

    • step

  • Debugger beenden

    • quit

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Laufzeitfehler 8

Laufzeitfehler 8

  • debug3.c

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


Profilanalyse

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.outprog

  • Profilanalyse mit gprof, prog, gmon.outgprof prog

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ


  • Login