Grundlagen der Systemnahen Programmierung in C (GSPiC)

Ähnliche Dokumente
Modulare Programmierung und Bibliotheken

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmentwicklung mit C++ (unter Unix/Linux)

SS / 16 schrittweise Verfeinerung -> Wirth, 1971, Programm Development by Stepwise Refinement

C# im Vergleich zu Java

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Repetitorium Informatik (Java)

Die Programmiersprache C Eine Einführung

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Deklarationen in C. Prof. Dr. Margarita Esponda

Propädeutikum. Dipl.-Inf. Frank Güttler

Objektorientierte Programmierung Teil 1: Einführung

Eine Einführung in C-Funktionen

Praktikum Betriebssysteme 1. Aufgabe (1)

Java Einführung Klassendefinitionen

Einführung in die C-Programmierung

Programmieren in Java

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

Abschnitt 9: Schnittstellen: Interfaces

Einstieg in die Informatik mit Java

Innere Klassen in Java

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Programmierung mit C Zeiger

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Die Programmiersprache C99: Zusammenfassung

DLLs (dynamic loaded libraries) mit MingW erstellen

Java für C++ Programmierer

Java Einführung Methoden. Kapitel 6

Grundlagen der Informatik - 6. Praktikum

Objektorientierte Programmierung. Kapitel 12: Interfaces

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Objektorientierte Programmierung

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Theorie zu Übung 8 Implementierung in Java

Übersicht. C Modularisierung. Präprozessor, Compiler, Linker. Präprozessor, Compiler, Linker. Präprozessor, Compiler und und Linker Linker

4.Grundsätzliche Programmentwicklungsmethoden

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Compiler und Präprozessor (1) Erstellen eines Projektes

Kurze Einführung in die Programmiersprache C++ und in Root

Konstruktoren, Packages und Scopes

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Kapitel 5: Das Design

Prof. W. Henrich Seite 1

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

Objektorientierte Programmierung

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Einführung in die Informatik

3. Grundlegende Sprachkonstruktionen imperativer Programme

Fachhochschule Wiesbaden - Fachbereich DCSM. Skriptsprachen. Moderne, objekt-orientierte Skriptsprachen mit Betonung auf Ruby

Vererbung & Schnittstellen in C#

Informationsverarbeitung im Bauwesen

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

1. Java ist Stammbaum der Programmiersprachen 3. Die "Softwarekrise"

1. Der Einstieg in Java. Was heißt Programmieren?

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

7. Pakete Grundlagen der Programmierung 1 (Java)

Objekt-Orientierte Programmierung

wenige Konzepte, keine Adressen, Anlehnung an C++ -Syntax Vererbung, Polymorphie/dynamisches Binden, umfangreiche Klassenbibliotheken

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Objektorientierung: Klassen und Objekte

Agile Methoden im Softwareprojekt. Janet Siegmund Thomas Thüm Sandro Schulze Elmar Jürgens

Javakurs für Anfänger

II.1.1. Erste Schritte - 1 -

Softwarepraktikum: Einführung in Makefiles

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

Prinzipien Objektorientierter Programmierung

Vererbung. Was versteht man unter dem Begriff Vererbung?

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Remote Method Invocation

Grundlagen. Kapitel 1

1. Der Einstieg in Java

Softwaretechnik (Allgemeine Informatik) Überblick

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

5.5.8 Öffentliche und private Eigenschaften

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Informatik ist viel mehr als Delphi-Programmierung!

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

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Objektorientierte Modellierung (1)

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Vorlesung Informatik II

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

1. Übung zu "Numerik partieller Differentialgleichungen"

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Dr. Monika Meiler. Inhalt

Aspektorientierte Programmierung (aspect-oriented programming, AOP)

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

1. Vom Sourcecode zum Programm

Objekt-basiert oder objekt-orientiert? Moderne Low Level Treiberprogrammierung mit C/C++ Programmier-Paradigmen Programmiersprachen C und C++

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Transkript:

Grundlagen der Systemnahen Programmierung in C (GSPiC) Teil C Systemnahe Softwareentwicklung Daniel Lohmann Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 http://www4.informatik.uni-erlangen.de/lehre/ss11/v_gspic

Überblick: Teil C Systemnahe Softwareentwicklung 12 Programmstruktur und Module 13 Zeiger und Felder 14 µc-systemarchitektur 15 Nebenläufigkeit 16 Speicherorganisation 17 Zusammenfassung

Softwareentwurf Softwareentwurf: Grundsätzliche Überlegungen über die Struktur eines Programms vor Beginn der Programmierung Ziel: Zerlegung des Problems in beherrschbare Einheiten Es gibt eine Vielzahl von Softwareentwurfs-Methoden Objektorientierter Entwurf Stand der Kunst Dekomposition in Klassen und Objekte An Programmiersprachen wie C++ oder Java ausgelegt [ GDI, IV] Top-Down-Entwurf / Funktionale Dekomposition Bis Mitte der 80er Jahre fast ausschließlich verwendet Dekomposition in Funktionen und Funktionsaufrufe An Programmiersprachen wie Fortran, Cobol, Pascal oder C orientiert Systemnahe Software wird oft (noch) mit Funktionaler Dekomposition entworfen und entwickelt. c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.1 Einführung 12 1

Beispiel-Projekt: Eine Wetterstation Typisches eingebettetes System Mehrere Sensoren 0+&1 Wind -)#''8)# Luftdruck Temperatur 2#$3 Mehrere Aktoren ; # < (hier: Ausgabegeräte) LCD-Anzeige 95: PC über RS232 PC über USB Sensoren und Aktoren an den µc angebunden über verschiedene Bussysteme I 2 C RS232 Wie sieht die funktionale Dekomposition der Software aus? ;<%&()%..#),=>?4@ 45676 "+'3.*A c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.2 Funktionale Dekomposition 12 2

Funktionale Dekomposition: Beispiel Funktionale Dekomposition der Wetterstation (Auszug): 1. Sensordaten lesen 0+&1 1.1 Temperatursensor lesen -)#''8)# 1.1.1 I 2 C-Datenübertragung intiieren 2#$3 1.1.2 Daten vom I 2 C-Bus lesen ; # < 1.2 Drucksensor lesen 95: 1.3 Windsensor lesen 2. Daten aufbereiten (z. B. glätten) 3. Daten ausgeben 3.1 Daten über RS232 versenden 3.1.1 Baudrate und Parität festlegen (einmalig) 3.1.2 Daten schreiben 3.2 LCD-Display aktualisieren 4. Warten und ab Schritt 1 wiederholen ;<%&()%..#),=>?4@ 45676 "+'3.*A c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.2 Funktionale Dekomposition 12 3

Funktionale Dekomposition: Probleme Erzielte Gliederung betrachtet nur die Struktur der Aktivitäten, nicht jedoch die die Struktur der Daten Gefahr: Funktionen arbeiten wild auf einer Unmenge schlecht strukturierter Daten mangelhafte Trennung der Belange c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.2 Funktionale Dekomposition 12 4

Funktionale Dekomposition: Probleme Erzielte Gliederung betrachtet nur die Struktur der Aktivitäten, nicht jedoch die die Struktur der Daten Gefahr: Funktionen arbeiten wild auf einer Unmenge schlecht strukturierter Daten mangelhafte Trennung der Belange Prinzip der Trennung der Belange Dinge, die nichts miteinander zu tun haben, sind auch getrennt unterzubringen! Trennung der Belange (Separation of Concerns) ist ein Fundamentalprinzip der Informatik (wie auch jeder anderen Ingenieursdisziplin). c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.2 Funktionale Dekomposition 12 4

Lösung: Modularisierung Separation jeweils zusammengehöriger Daten und Funktionen in übergeordnete Einheiten Module c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.3 Modularisierung 12 5

Was ist ein Modul? Modul := (<Menge von Funktionen>, <Menge von Daten>, <Schnittstelle>) ( class in Java) Module sind größere Programmbausteine 9 1 Problemorientierte Zusammenfassung von Funktionen und Daten Trennung der Belange Ermöglichen die einfache Wiederverwendung von Komponenten Ermöglichen den einfachen Austausch von Komponenten Verbergen Implementierungsdetails (Black-Box-Prinzip) Zugriff erfolgt ausschließlich über die Modulschnittstelle Modul Abstraktion 4 1 Die Schnittstelle eines Moduls abstrahiert Von der tatsächlichen Implementierung der Funktionen Von der internen Darstellung und Verwendung von Daten c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.3 Modularisierung 12 6

Module in C [ Java] In C ist das Modulkonzept nicht Bestandteil der Sprache, 3 13 sondern rein idiomatisch (über Konventionen) realisiert Modulschnittstelle.h-Datei (enthält Deklarationen 9 7 ) Modulimplementierung.c-Datei (enthält Definitionen 9 3 ) Modulverwendung #include <Modul.h> void RS232Init( uint16_t br ); RS232.h: Schnittstelle / Vertrag (öffentl.) void RS232Send( char ch ); Deklaration der bereitgestellten Funktionen (und ggf. Daten) #include <RS232.h> static uint16_t baud = 2400; static char sendbuf[16]; void RS232Init( uint16_t br) { baud = br; } void RS232Send( char ch ) { sendbuf[ ] = ch; } RS232.c: Implementierung (nicht öffentl.) Definition der bereitgestellten Funktionen (und ggf. Daten) Ggf. modulinterne Hilfsfunktionen und Daten (static) Inklusion der eigenen Schnittstelle stellt sicher, dass der Vertrag eingehalten wird c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 7

Module in C Export [ Java] Ein C-Modul exportiert eine Menge von definierten Symbolen Alle Funktionen und globalen Variablen ( public in Java) Export kann mit static unterbunden werden ( private in Java) ( Einschränkung der Sichtbarkeit 10 3 ) Export erfolgt beim Übersetzungsvorgang (.c-datei.o-datei) foo.c Compiler foo.o a, f Quelldatei (foo.c) int a; static int b; // public // private void f(void) // public { } static void g(int) // private { } Objektdatei (foo.o) Symbole a und f werden exportiert. Symbole b und g sind static definiert und werden deshalb nicht exportiert. c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 8

Module in C Import [ Java] Ein C-Modul importiert eine Menge nicht-definierter Symbole Funktionen und globale Variablen, die verwendet werden, im Modul selber jedoch nicht definiert sind Werden beim Übersetzen als unaufgelöst markiert Quelldatei (bar.c) Objektdatei (bar.o) extern int a; void f(void); void main() { a = 0x4711; f(); } // declare // declare // public // use // use Symbol main wird exportiert. Symbole a und f sind unaufgelöst. c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 9

Module in C Import (Forts.) [ Java] Die eigentliche Auflösung erfolgt durch den Linker [ GDI, VI-158] foo.c bar.c Compiler foo.o bar.o a, f main a, f Linker main, a, f bar Linken ist nicht typsicher! Typinformationen sind in Objektdateien nicht mehr vorhanden Auflösung durch den Linker erfolgt ausschließlich über die Symbolnamen (Bezeichner) Typsicherheit muss beim Übersetzen sichergestellt werden Einheitliche Deklarationen durch gemeinsame Header-Datei c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 10

Module in C Header [ Java] Elemente aus fremden Modulen müssen deklariert werden Funktionen durch normale Deklaration 9 7 void f(void); Globale Variablen durch extern extern int a; Das extern unterscheidet eine Variablendeklaration von einer Variablendefinition. Die Deklarationen erfolgen sinnvollerweise in einer Header-Datei, die von der Modulentwicklerin bereitgestellt wird Schnittstelle des Moduls ( interface in Java) Exportierte Funktionen des Moduls Exportierte globale Variablen des Moduls Modulspezifische Konstanten, Typen, Makros Verwendung durch Inklusion ( import in Java) Wird auch vom Modul inkludiert, um Übereinstimmung von Deklarationen und Definitionen sicher zu stellen ( implements in Java) c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 11

Module in C Header (Forts.) [ Java] Modulschnittstelle: foo.h // foo.h #ifndef _FOO_H #define _FOO_H // declarations extern int a; void f(void); #endif // _FOO_H Modulimplementierung foo.c // foo.c #include <foo.h> // definitions int a; void f(void){ } Modulverwendung bar.c (vergleiche 12 9 ) // bar.c extern int a; void f(void); #include <foo.h> void main() { a = 0x4711; f(); } c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 12

Zurück zum Beispiel: Wetterstation pr pr Quellmodule Objektmodule l ELF-Binary cp RS232.h RS232.c RS232.o I2C.h I2C.c gcc (Compiler) I2C.o ld (Linker) weather weather.c weather.o io.h....h io.o....o....o....o....o....o avr-libc.lib Jedes Modul besteht aus Header- und Implementierungsdatei(en).h-Datei definiert die Schnittstelle.c-Datei implementiert die Schnittstelle, inkludiert.h-datei, um sicherzustellen, dass Deklaration und Definition übereinstimmen Modulverwendung durch Inkludieren der modulspezifischen.h-datei Das Ganze funktioniert entsprechend bei Bibliotheken c dl GSPiC (Teil C, SS 11) 12 Programmstruktur und Module 12.4 Module in C 12 13