Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann.

Ähnliche Präsentationen


Präsentation zum Thema: "V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann."—  Präsentation transkript:

1 V _cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann

2 V _cbs/kf / Folie 2 Foxboard G20 im Internet Wichtige Web-Seiten: foxg20.acmesystems.it eshop.acmesystems.it/?id=FOXG20 elmicro.com/de/foxboard.html (Zur Zeit nicht) Zugriff auf das Foxboard zum Üben cbs.selfhost.me im Raum R411 (CBS) k49.selfhost.menur nach Absprache Herrn Jan Arnold hat mich bei der Erstellung des Scripts enorm unterstützt. Dafür möchte ich mich sehr herzlich bedanken.

3 V _cbs/kf / Folie 3 Erste Techniker Arbeit (2006): WBOT mit dem FoxboardLX16 Kettenfahrzeug mit Schrittmotoren Router mit 4 Ports und WLAN Foxboard LX16 IP-WebCAM 12 Volt Akku 2 LED-Leuchten

4 V _cbs/kf / Folie 4 Zweite Techniker-Arbeit: EIB-Haus Client-Rechner mit Browser Internet oder LAN Router mit Switch

5 V _cbs/kf / Folie 5 Software-Feature des Foxboard G20 Einfache Installation von Applikationen durch die Verwendung des Atmel-Controllers aus der ARM9-Serie und einem frei wählbaren Linux-Betriebssystem Linux Distributionen: Debian, Gentoo, OpenWRT, OpenEmbedded Internetdienste: Web-Server, FTP-Server, Gateways, etc. Volle Unterstützung von vielen Programmiersprachen: C, C++, Python, Perl, Java, PHP, Basic, Fortran, etc

6 V _cbs/kf / Folie 6 Hardware-Features FoxboardG20 Netus G20 mit 400MHz Atmel Mikrocontroller AT91SAM9G20 2 USB 2.0 host ports (12 MBits per second) One Ethernet 10/100 MBit/s port One USB device port (12 MBits per second) One debug serial port (3.3V); (RS232, V24, COM1, S0) 2 serial ports (3.3V); (RS232, V24, COM1, S0) On-board microSD socket (up to 16GB) Real Time Clock (RTC) with on-board lithium backup battery GPIO lines (3.3V oder 1.8V) 4 A/D converter lines (10-Bit Auflösung) I2C-Bus und SPI-Bus 5V DC power supply; stabilisiert ist wichtig durchschnittliche Leistungsaufnahme: 0,4 Watt (80 mA bei 5V) ohne microSD, ethernet link, USB devices oder andere Peripherie. Temperatur-Bereich: von -15°C bis +70°C

7 V _cbs/kf / Folie 7 Die Platine

8 V _cbs/kf / Folie 8 RS232-Adapter für den S0-Debug-Port Über die serielle Schnittstelle des Foxboard (Debug-Port) und des PC (COMx) und einem Terminalprogramm (Hyperterminal oder Putty) wird der PC zum Terminal für das Foxboard. Der gesamte Bootvorgang kann verfolgt werden.

9 V _cbs/kf / Folie 9 Vorbereitungen am PC Das Programm Putty ist notwendig, um auf das Linux- Betriebssystem des Foxboard zuzugreifen. –Download : –Putty ist im NAL unter Betriebssysteme vorhanden. Putty starten und konfigurieren (siehe nächste Folie). An den RS232-Adapter des Foxboards ein 9 poligen 1:1 Sub-D-Kabel sehr vorsichtig anschließen und mit der COM-Schnittstelle des PCs oder einem RS232-USB- Adapter verbinden. Foxboard an eine stabilisierte 5V-Spannungsversorgung anschließen. –Wenn an den USB-Schnittstellen des Foxboards keine zusätzlichen USB- Geräte angeschlossen sind, kann das Foxboard auch über die 5V einer USB- Schnittstelle des PCs versorgt werden.

10 V _cbs/kf / Folie 10 RS232-Einstellungen bei Putty Putty für serielle COM-Schnittstelle konfigurieren: COMx-Schnittstelle im Gerätemanager feststellen, wichtig bei USB-RS232-Adapter Einstellungen vornehmen: Serial line: COMx Speed: Bei Category - Serial kontrollieren:

11 V _cbs/kf / Folie 11 Foxboard starten und beenden Warten bis login: erscheint. Eingabe bei login: root Eingabe bei Password: cbsg20 reboot fährt das Linuxbetriebssystem herunter und startet es neu. init 0 oder halt fährt das Linuxsystem herunter. Kann nur durch Trennung der Spannung neu gestartet werden. Sobald das Foxboard mit 5V versorgt wird, startet Linux. Bevor das Foxboard G20 von der Spannungsversorgung getrennt wird, muss das Linuxbetriebssystem unbedingt heruntergefahren werden bis zur Meldung: Power down

12 V _cbs/kf / Folie 12 Übung 1 Foxboard über RS232-Schnittstelle mit einem 9 poligen 1:1 Sub- D Kabel vorsichtig mit der COMx-PC-Schnittstelle verbinden. Wenn ein USB-RS232-Adapter notwendig ist, im Gerätemanager die COMx-Nummer nachschauen. Putty konfigurieren. Foxboard an 5V anschließen und Startvorgang beobachten. In das Linux-Betriebssystem einloggen. –User: root / Passwort: cbsg20 Mit dem Linuxbefehl reboot das Betriebssystem neu starten. Startvorgang beobachten. Wieder einloggen und die Zeit zwischen Befehl halt und der Meldung Power down stoppen und aufschreiben. –Mit init 0 oder halt das Betriebssystem herunterfahren. –Warten bis die Meldung Power down erscheint. –Jetzt erst die Stromversorgung trennen.

13 V _cbs/kf / Folie 13 Netzwerkzugriff auf das Foxboard mit TCP/IP Beim TCP/IP-Protokoll kann eine IP-Adresse fest vorgegeben oder durch einen DHCP-Dienst dynamisch zugewiesen werden. Fragen bei der Vergabe der IP-Adresse: –Dynamische IP Ist ein DHCP-Server aktiv. Welche IP-Adresse ist vergeben worden. –Feste (statische) IP Ist die fest vergebene IP im bestehenden Netzwerk ansprechbar. Wie kann man die feste IP herausfinden, ändern. IP-Begriffe: Netzwerk-Adresse, Subnetmask, Gateway Für das R411-Intranet gilt für die IP-Vergabe : Netzwerk-Adresse (IP): Subnetmask: Gateway-IP: (Server mit Routerfunktion)

14 V _cbs/kf / Folie 14 IP-Konfiguration bei eth0 (Patchkabel) eth0 steht für den Ethernet-Netzwerkadapter mit der Rj45-Buchse und dem Patchkabel. Im Verzeichnis /etc/network ist die Datei interfaces. In dieser Datei wird die IP-Konfiguration festgelegt. Eintrag für statische Zuweisung der IP-Adresse für das Foxboard x (x steht für 1 bis 9): auto eth0 # dynamic IP #iface eth0 inet dhcp # static IP iface eth0 inet static address x netmask gateway # (Rauten) sind Kommentare. Wichtig: Auf die Rauten unter der Zeile dynamic IP achten. Die Rauten unter der Zeile static IP müssen entfernt werden.

15 V _cbs/kf / Folie 15 IP-Konfiguration bei WLAN-Dongel Wegen der WLAN-Verschlüsselung müssen noch die Accesspoint- Daten angegeben werden. Inhalt von wpa_supplicant: ctrl_interface=/var/run/wpa_supplicant network={ ssid= ” meine SSID “ psk= ” mein Schluessel “ } Inhalt von /etc/network/interfaces: auto wlan0 # dynamic IP #iface wlan0 inet dhcp # static IP iface wlan0 inet static address x netmask gateway wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

16 V _cbs/kf / Folie 16 Übung 2a In das Linuxsystem über die serielle Schnittstelle einloggen. IP-Adresse mit dem Linuxbefehl ifconfig feststellen. Mit dem Befehl cat /etc/network/interfaces die IP-Konfiguration anschauen. –catder cat-Aufruf ist für die Ausgabe einer Textdatei (mit Strg C kann cat bei Fehleingabe abgebrochen werden) –/etc/network/Pfad (Ordner), in der sich die Datei interfaces befindet Wie ist die IP-Konfiguration eingestellt? –dynamisch –statisch Was müssten Sie tun, um auf die andere IP-Vergabe umzustellen: ____________________________________________ ____________________________________________

17 V _cbs/kf / Folie 17 Übung 2b: Foxboard mit dem Netzwerk verbinden Gesamte IP-Konfiguration unter Linux anschauen: –ifconfig eingeben, um aktuelle IP-Konfiguration zu erfahren. –Browsertest: Im Browser x eingeben. IP-Adresse für die Sitzung ändern, zum Beispiel: ifconfig wlan x (x ist Nummer des Foxboards) –Die Änderung wird nicht gespeichert. –Die Änderung ist nur während der Sitzung aktiv. –Browsertest: Im Browser x eingeben. –Kontrollieren Sie dies durch Eingabe reboot. In einem Netzwerk darf eine IP-Adresse nie doppelt vergeben werden.

18 V _cbs/kf / Folie 18 SSH-Verbindung mit Putty einrichten Zugriff auf das Foxboard: –Putty mit SSH starten. SSH: Secure Shell (verschlüsselte Verbindung). –IP eingeben und mit Return bestätigen. –Login-Name: root –Password: cbsg20 –Linux beenden: halt –Nur Putty beenden: exit Alle Linux-Zugriffe werden unter Putty_SSH durchgeführt. Der Zugriff über die COM-Schnittstelle wird nur noch bei Fehlern während des Bootens benötigt. Das Standard-Programm Telnet ist unverschlüsselt.

19 V _cbs/kf / Folie 19 Übung 3 Serielles Kabel und Patchkabel anschließen. Mit Putty_Serial in das Linux-Betriebssystem einloggen. IP-Adresse mit dem Linuxbefehl ifconfig feststellen. Putty für SSH starten, IP eingeben und ins Foxboard einloggen. IP-Adresse für die Sitzung mit Putty ändern, zum Beispiel: ifconfig wlan x (x ist Nummer des Foxboards) –Bei Putty_SSH den Befehl ifconfig eingeben. Was passiert? –Mit Putty_SSH mit der neuen IP einloggen. –ifconfig eingeben und IP merken, danach reboot eingeben und nach dem Neustart IP-Adresse kontrollieren. Welche IP ist aktiv: _______________________ Putty_SSH starten, IP eingeben und ins Foxboard einloggen. Linux mit reboot neu booten und Ausgabe bei Putty_Serial und Putty_SSH beobachten. Danach den Ablauf mit dem Befehl halt beobachten.

20 V _cbs/kf / Folie 20 Übung 4 Loggen Sie sich mit Putty in andere Foxboards im Intranet des R411 ein. Öffnen sie gleichzeitig mehrere Sitzungen. Mit Putty über das Internet einloggen: –Pinguin-Foxboard mit cbs.selfhost.me –Siedelsbrunn-Foxboard mit k49.selfhost.me Mit ifconfig die IP-Adressen der Foxboards im Internet bestimmen: cbs.selfhost.me ________________ k49.selfhost.me _________________ Können das die Internet-IP-Adressen sein? Wie können Sie die Internet-IP-Adresse von k49 bestimmen? ____________________________________________________ Schauen Sie sich auch die Webseiten der Foxboards im Intranet mit der IP-Adresse, im Internet mit dem Domainnamen und danach mit der IP-Adresse an.

21 V _cbs/kf / Folie 21 Einige Linux-Befehle Navigation im Dateisystem pwd gibt das aktuelle Verzeichnis aus (print working directory) cd / wechselt ins Hauptverzeichnis (Root) (change directory) cd.. wechselt in das übergeordnete Verzeichnis cd wechselt ins Verzeichnis Beispiel: relativ zum Verzeichnis home: cd kf oder absolut von jedem beliebigen Verzeichnis: cd /home/kf cd - wechselt in das vorherige Verzeichnis cd wechselt ins Home-Verzeichnis des Benutzers

22 V _cbs/kf / Folie 22 Verzeichnisse und Benutzer ls kurze Liste des Verzeichnisinhaltes (list) ls -l ausführliche Liste des Verzeichnisinhaltes mit Dateirechten rm Löscht die Datei im Verzeichnis (remake) mkdir neues Verzeichnis erstellen ( z. B. mkdir test ) rmdir leeres Verzeichnis löschen ( z. B. rmdir test ) cat gibt den Inhalt einer Datei aus, z. B. cat /etc/network/interfaces Der Inhalt der Datei interfaces im Ordner /etc/network wird angezeigt. passwd Passwort für Benutzer root ändern: passwd root !!!!Bitte kein Passwort ändern!!!!!! who Wer ist alles eingeloggt? Ausgabe der Benutzernamen, des Terminals und der Login-Zeit.

23 V _cbs/kf / Folie 23 Systeminformationen mount Ausgabe aller gemounteter Partitionen/Geräte df df -h Ausgabe der Speicherkapazität der gemounteten Geräte date date MMTThhmmYYYY Anzeigen und Setzen von Datum und Uhrzeit free gibt die Nutzung des Arbeitsspeichers aus uptime zeigt die Prozessorauslastung und -laufzeit an top zeigt die höchsten Ressourcenverbraucher an (mit q beenden) ps zeigt Informationen über laufende Prozesse an uname -a gibt Kernel-Informationen und die Kernel-Version aus

24 V _cbs/kf / Folie 24 Übung 5: Home-Ordner (mit Putty) Mit cd / in das Hauptverzeichnis (Wurzel, root) wechseln. Mit ls die Dateien und Ordner im Hauptordner (Wurzel) anschauen. Mit cd /home in den Ordner /home wechseln. Mit mkdir xx Ordner xx (xx: Kürzel des Nachnamen: z. B. kf) in /home erstellen. Dieser neue Ordner ist Ihr Ordner für Ihre Dateien. Wie groß ist die Speicherkapazität der Partitionen. Stimmt das Datum und Uhrzeit? Das Foxboard mit reboot neu starten und in den Ordner xx wechseln ( cd /home/xx). Geben Sie cd, danach pwd ein. In welchem Ordner sind Sie? Erläutern Sie den Unterschied der Befehle: cd / und nur cd Erläutern Sie die unterschiedlichen Bedeutungen für root. Erläutern Sie die Ausgabe auf dem Bildschirm nach einem Return. Mit den Pfeiltasten hoch / runter können Sie die letzten Befehle aufrufen, mit links / rechts editieren.

25 V _cbs/kf / Folie 25 GPI/O-Ports vom Foxboard direkt unter Linux ansprechen Die drei 32 Bit-I/O-Port-Register –Port A hat die Adresse 32 –Port B hat die Adresse 64 –Port C hat die Adresse 96 Einige Pins der I/O-Ports können über den Port und die Pinnummer angesprochen werden. PAx bedeutet: Port A Pin x (x steht für 0 bis 31) Linux benötigt die KernelID: die Adresse des Ports + die Pinnummer PB12  KernelID: = 76

26 V _cbs/kf / Folie 26 Beschaltung von SW1 und LD2 U bei „1“ am PC7 (LD2) = 1,8V Spannung an PC4 durch Taster SW1 berechnen: Bei offenen Taster U = _____V Bei gedrückten Taster U = _____V I F bei leuchtender LD2 berechnen (U F = 1,7V): I F = _______mA Berechnung der KernelID: KernelID = Port-Adresse + Pin-Nummer KernelID SW1: ____________________ KernelID LD2: ____________________

27 V _cbs/kf / Folie 27 Fest vereinbarte GPIO-Pins unter Linux Die rote LED LD2 ist am Pin 7 des Ports C (PC7, KernelID = 103) angeschlossen und unter Linux fest vereinbart. Nach dem Linuxstart blinkt die LD2. Um das Blinken zu beenden, muss in die Datei brightness der Wert 0 eingetragen werden. Dadurch wird der Pin, an dem die LD2 angeschlossen ist, auf 0V (auf logisch 0) gesetzt. Linux überträgt stetig den Wert in der Datei brightness an den Pin PC7. Der Linux-Befehl echo x > Pfad/Datei überträgt den Wert x in die angegebene Datei. Ist der Ordner, in der die Datei liegt, der aktive Ordner, muss der Pfad nicht angegeben werden. Das Blinken beenden: echo 0 > /sys/class/leds/user_led/brightness LD2 mit Linux-Befehl ein- und ausschalten: ein: echo 1 > /sys/class/leds/user_led/brightness aus: echo 0 > /sys/class/leds/user_led/brightness Aufgabe: Geben Sie in Putty die Anweisungen nach einander ein. Schalten Sie öfters die LED ein und aus. Schauen Sie sich nach jedem Befehl den Inhalt der Datei brightness mit dem cat-Befehl an.

28 V _cbs/kf / Folie 28 GPIO-Pin unter Linux ansprechen Mit dem Programm export kann ein GPIO-Pin unter Linux vereinbart werden, um auf diesen Pin zugreifen zu können. Beispiel des Pins mit der KernelID 58 : echo 58 > /sys/class/gpio/export Richtung (Ein- oder Ausgabe) des Pins festlegen als: Ausgang: echo out > /sys/class/gpio/gpio58/direction Eingang: echo in > /sys/class/gpio/gpio58/direction Einen vereinbarten Ausgang auf logisch 1 : echo 1 > /sys/class/gpio/gpio58/value 0 : echo 0 > /sys/class/gpio/gpio58/value setzen. Diese Vereinbarung ist nur temporär, das heißt: Die Vereinbarungen ist nur während einer Linux-Sitzung gültig.

29 V _cbs/kf / Folie 29 Übung 6: Pin mit ID 58 (59) vereinbaren Putty: Versuchen Sie den Pin mit der KernelID 103 (LD2) zu vereinbaren. ls: Inhalt con Ordner /sys/class/gpio anschauen. Merken Sie sich die Unterordner. Putty: Vereinbaren Sie den Pin mit der KernelID 58 als I/O-Pin: echo 58 > /sys/class/gpio/export. cd, ls: Inhalte von Ordner /sys/class/gpio und Unterordner anschauen. cat: Was steht in der Datei direction im Ordner /sys/class/gpio/gpio58 ? Putty: Vereinbaren Sie die Richtung als Ausgang: echo out > /sys/class/gpio/gpio58/direction Schalten Sie die KernelID 58 auf logisch „1“, dann auf logisch „0“. Schauen Sie sich den Inhalt der Datei value im Ordner /sys/class/gpio/gpio58 an. Warum verändert sich die LED LD2 nicht. Zu welchen Port und zu welchen Pin gehört die KernelID 58. An welchen Pin vom Foxboard müssten Sie eine LED anschließen, damit diese von der KernelID 58 gesteuert wird.

30 V _cbs/kf / Folie 30 Infos für die C-Programmierung C-Einsteigerkurse de.wikibooks.org/wiki/C-Programmierung www2.hs-fulda.de/~klingebiel/c-vorlesung Im public-html-Ordner von Kaufmann ist das C-Script Ansi-C_ES.doc Kapitel-Angaben ( z.B. K5.3) beziehen sich auf Ansi-C_ES.doc Einfach zu bedienende Windows-C-Kompiler oder dev-c.softonic.de/download Programme für die C-Entwicklungsumgebung (SDK) –Putty: (putty.exe herunterladen) –Notepad++: notepad-plus-plus.org –WinSCP: winscp.net/eng/download.php

31 V _cbs/kf / Folie 31 FTP-Client-Programm WinSCP Für die Datenübertragung zwischen PC und Foxboard wird das FTP-Client-Programm WinSCP benötigt. Geben Sie die IP-Adresse und die Benutzerkennung an.

32 V _cbs/kf / Folie 32 Vorbereitungen für die C-Programmierung Entwicklungsumgebung (SDK): –Notepad++ ist ein Textverarbeitungsprogramm zum Erstellen des c-Programms –WinSCP ist ein FTP-Client (File-Transfer-Protokoll) –Putty ist ein textorientierte Oberfläche zum Ausführen von Betriebssystembefehle Installieren Sie Notepad++ für die Bearbeitung des C-Sourcecodes. Starten Sie WinSCP für die Datei-Übertragung zwischen PC und Foxboard. Kontrollieren Sie mit WinSCP unter /home, ob ein Ordner mit ihrem Kürzel (zum Beispiel: kf für Kaufmann) vorhanden ist. Wenn der Ordner fehlt, erstellen Sie den Ordner mit WinSCP. Erstellen Sie den gleichen Ordner auf ihrem PC in ihrem Homeverzeichnis H:. Sicherheitshinweis: Auf den Foxboard können nach dem Unterricht alle Daten gelöscht werden. Deswegen sichern Sie alle C-Dateien für das Foxboard in Ihrem Homeverzeichnis auf dem PC.

33 V _cbs/kf / Folie 33 Erstellen von C-Programme fürs Foxboard Vorgehensweise: 1.Mit notepad++ wird der C-Quellcode (Source-Code, für den Menschen verständlicher Code) auf dem PC erstellt. Diese Datei hat die Dateierweiterung c (.c). 2.Mit WinSCP wird die C-Datei auf das FoxboardG20 ins /home/xx-Verzeichnis kopiert. 3.Mit Putty wird im Ordner /home/xx mit dem Aufruf: gcc.c –o die Datei.c kompiliert und die ausführbare Datei erstellt, wenn keine Fehler erkannt wurden. 4.Die ausführbare Datei starten:./

34 V _cbs/kf / Folie 34 Das erste C-Programm: hw.c Um Ausgaben auf dem Bildschirm mit printf zu ermöglichen, muss die Standard- IO-Bibliothek stdio.h (Header-Datei) eingebunden werden: #include Ein C-Programm benötigt immer ein Hauptprogramm int main(void). Der Anweisungsblock {...} für das Hauptprogramm oder für andere Programmteile wird immer in geschleiften Klammern eingebunden. Der bei der Anweisung printf in Anführungszeichen eingebundene Text wird auf den Bildschirm ausgegeben. \n ist ein Steuerzeichen (Befehl an Ausgabeeinheit) und wird nicht ausgegeben. Befehl für den Bildschirm: Ausgabe des Textes und in neue Zeile springen. Jede Anweisung wird mit einem Semikolon ; beendet. Mit // beginnt der einzeilige Kommentar, keine Bedeutung für den Compiler. #include int main(void) { printf("Hallo Welt von XXXXX!\n"); return(0); // Rücksprung ins Betriebssystem }

35 V _cbs/kf / Folie 35 Verändern, Kompilieren, Ausführen von hw Schreiben Sie hw.c mit Notepad++ : Ausgabe auf dem Bildschirm: Hallo Welt von XXXXX! Schreiben Sie für xxxxx ihren Namen in die printf- Anweisung. Speichern Sie hw.c in ihrem PC-Ordner. Übertragen Sie die Datei hw.c mit WinSCP in den /home/xx-Ordner auf dem Foxboard. Aktionen auf dem Foxboard mit dem Programm Putty: –Compilieren Sie hw.c in /home/xx mit dem Befehl: gcc hw.c –o hw –Starten Sie die ausführbare Datei hw mit./hw

36 V _cbs/kf / Folie 36 Zugriff auf die Hardware unter C Um auf die Ports des FoxG20 zugreifen zu können, muss die Header-Datei cbsg20.h, die nicht zum Linux-Betriebssystem gehört, in den Ordner /usr/include kopiert werden. Im c-Programm muss die Anweisung #include am Ende der include-Anweisungen hinzugefügt werden. In der Header-Datei werden die Zustände der einzelnen Pins in Dateien eingetragen, von Linux und dem c-Programm ausgewertet. Folgende Anweisungen sind in cbsg20.h vereinbart : –Pin vereinbaren als Eingang: gpioinit (kernelid, “in“) Ausgang: gpioinit (kernelid, “out“) –Setzt den Pin auf 0 : gpioset (kernelid, 0) 1 : gpioset (kernelid, 1) –Liest den Zustand des Pins: gpioget (kernelid)

37 V _cbs/kf / Folie 37 LD2 blinkt: C-Programm ld2.c // ld2.c Kaufmann #include // für printf #include // für sleep #include // für gpio #define LD2 103 // kernelid 103 als Label LD2 definieren int main(void) { gpioinit(LD2,"out");// LD2 als Ausgang festlegen printf("LD2-Programm von xxxxxx V3.1\n"); while(1) { gpioset(LD2,0); printf("LD2 aus Abbruch + \n"); sleep(1); gpioset(LD2,1); printf("LD2 an Abbruch + \n"); sleep(1); } return(0); } K4.2.1: printf K5.2: while

38 V _cbs/kf / Folie 38 Fragen zu ld2.c Kompilieren und starten Sie das Programm ld2. Erläutern Sie die Anweisung: gpioinit(LD2,"out"); Erläutern Sie die Anweisung: gpioset(LD2,0); Bei welcher C-Anweisung wird die Diode LD2 eingeschaltet? Durch welche Zahl wird LD2 beim Kompilieren ersetzt? Erläutern Sie die Funktionsweise der Schleife while (1) {...}. –Was passiert, wenn Sie anstelle der 1 eine 2, eine 0, eine –1 einsetzen. Verändern Sie die Werte, kompilieren und starten Sie das Programm. –Warum bezeichnet man while (1) {...} als Endlosschleife? Schauen Sie sich die printf-Anweisung an. Was bedeutet \n ? Welche Aufgabe hat die Anweisung sleep(1). Beachten: Bei sleep(zahl) ist zahl immer ganzzahlig. Welche Aufgabe hat die Anweisung return(0);

39 V _cbs/kf / Folie 39 Aufgabe: ld2.c erweitern 1.ld2_1.c: Programmänderung: Die Periodendauer des Blinkens soll 0,5 Sekunden betragen (P = 0,5s oder f = 2Hz). Verwenden Sie die Anweisung: usleep(usekunden); Die Variable usekunden ist ganzzahlig (int) und bedeutet Mikrosekunden. 2.ld2_2.c: Programmieren Sie einen Zähler hinzu. Integer-Variable int zaehler = 0; und C-Anweisung zaehler ++; hinzufügen. Verändern Sie die Ausgabe so, dass folgendes Bild erscheint: V eränderte Print-Anweisung: printf("LD2 aus Anzahl Blinken: %d \n", zaehler); 3.ld2_3.c: Nach dem 10. mal Blinken soll das Programm mit der Ausgabe Ende des Blinkens beendet werden. Bedingung: while (zaehler < 10) {... } K4.3: %d

40 V _cbs/kf / Folie 40 for-Schleife und scanf-Anweisung Compilieren Sie das Programm sf.c und starten Sie sf. Beachten Sie: Bei scanf muss bei der Variablen das &-Zeichen (Pointer) sein. Speichern Sie die Source-Datei ld2_3.c unter sf.c ab. Ersetzen Sie while (zaehler < 10) durch den fett angegeben C-Code und entfernen Sie die Anweisung zaehler ++; im while-Anweisungsblock. Beachten Sie: blinkenmax muss noch als int-Variable vereinbart werden. printf("Wie oft soll geblinkt werden: "); scanf("%i", & blinkenmax); for (blinken = 1; blinken <= blinkenmax; blinken++) { gpioset(LD2,0); printf("LD2 aus Anzahl Blinken = %d\n", blinken); usleep(250000); gpioset(LD2,1); printf("LD2 an \n\n"); usleep(250000); } K2.2: Variablen K4.2.2: scanf K5.1: for

41 V _cbs/kf / Folie 41 Aufgabe: sf.c verändern Verändern Sie das Programm (sf_x.c): 1.Geben Sie blinkenmax in der for-Schleife aus. 2.Die Periodendauer des Blinkens soll 0,3 Sekunden betragen. Vereinbaren Sie Taktdauer in einer define-Anweisung. 3.Nach der For-Schleife soll wieder zur Eingabe zurückgesprungen werden (zusätzliche while-Schleife). 4.Wenn bei der Eingabe die Zahl für blinkenmax kleiner 1 ist, soll das Programm beendet werden (printf-Anweisung anpassen). Durch den Aufruf return(0) wird eine Prozedur beendet. Im main-Block wird das main-Programm beendet und somit ins Betriebssystem zurückgesprungen. Oder: Durch den Aufruf exit(0) wird das gesamte Programm sofort beendet und ins Betriebssystem zurückgesprungen ( stdlib.h notwendig). 5.Geben Sie vor der Rückkehr ins Betriebssystem noch die Meldung aus: Ende durch Eingabe einer Zahl kleiner 1. K5.3: if

42 V _cbs/kf / Folie 42 Aufgaben: Mathe-C-Programme (1) Addition (add.c) –Funktion: Die Summe von Zahl1 und Zahl2 soll berechnet werden. z. B: = 10 –Eingabe: Zahl1 und Zahl2 –Ende: Ausgabe: Ergebnis = 10 Erweiterung Addition mit while Schleife: (add_2.c) –Wiederholung durch Rücksprung zur Eingabe Zahl1 (while-Schleife) –Ende des Programms: Eingabe 0 bei Zahl1 –Ausgabe: die 2 eingegebenen Zahlen und das Ergebnis: = 10 Summe mit for-Schleife (sum.c) –Funktion: Die Summe von Zahl1 bis Zahl2 soll berechnet werden. z. B: = 25 –Eingabe: erste und letzte Zahl –Ende: Ausgabe: Summe = 25 Erweiterung Summe: (sum_2.c) –Ende des Programms: Eingabe 0 bei der ersten Zahl (while-Schleife) –Zusätzlich Ausgabe des Produkts zwischen den beiden Zahlen z. B: 3 * 4 * 5 * 6 * 7 = 2520

43 V _cbs/kf / Folie 43 Aufgaben: Mathe-C-Programme (2) Potenz zur Basis 3 (p3.c) –Funktion: Die Potenz zur Basis 3 soll durch Eingabe des Exponenten berechnet werden. z. B: Exponent = 4  3 * 3 * 3 * 3 = 81 –Eingabe: Exponent (beachte: bei Eingabe 0 ist das Ergebnis 1) –Ende des Programms: Eingabe einer negativen Zahl. Potenz einer beliebigen Basis (p.c) –Eingabe: Basis, Exponent –Danach soll bis zur Eingabe eines negativen Exponenten die Potenz errechnet werden. –Wird bei der Basis der Wert 0 eingegeben, soll das Programm beendet werden. Potenzberechnung mit math.h (pow.c) (nur für Interessierte) –hinzufügen: #include –Alle Variable als Datentyp: double (Dezimalzahlen, z. B. 3.5) –Formatierung bei scanf und printf: %lf –Anweisung zur Potenzberechnung (in math.h): pow(basis, exponent); –Ende: Basis = 0. Abbruch der while-Schleife: Exponent = 0 –Für Basis und Exponent sind jetzt auch Dezimalzahlen möglich. –Kompilieren mit: gcc pow.c –lm –o pow (Reihenfolge der Parameter beachten)

44 V _cbs/kf / Folie 44 Aufgaben: Mathe-C-Programme (3) (nur für Interessierte, mit der math.h-Library) Satz des Pythagoras (py.c) –Eingabe: Die beiden Katheten. –Verarbeitung: Die Hypotenuse berechnen. –Ausgabe: Hypotenuse. –Hinweise: hinzufügen: #include Datentyp: double, Formatierung bei scanf und printf: %lf Wurzel ziehen: sqrt(wert); oder pow(wert, 0.5); kompilieren mit: gcc py.c –lm –o py Erweiterung (py_2.c) –Auswahl durch Eingabe eines Buchstabens E oder e => Ende des Programms H oder h => Hypotenuse berechnen K oder k => Kathete berechnen

45 V _cbs/kf / Folie 45 Datum und Uhrzeit Unter Linux: –date gibt das aktuelle Datum aus –date MMTThhmmYYYY setzt das Datum für Linux (nur für die Session) RTC-IC für Hardware-Uhr (RealTimeClock, RTC) –hwclock –wHardwareclock mit System-Datum (Linux) setzen –hwclock –rHardwareclock auslesen Unter C –#include "time.h" fügt die Time-Funktionen hinzu. –time_t Sec1970; vereinbart einen Datentyp (z. B. Sec1970), der die Sekunden seit enthält. –time(&Sec1970); oder Sec1970 = time(NULL); aktualisiert die Variable Sec1970 mit der Sekundenanzahl. –ctime(&Sec1970) gibt ein vordefiniertes Datumsformat aus. –localtime(&Sec1970) berechnet Datum und Uhrzeit für eigene Datumsformate aus dem Datentyp Sec1970 und erzeugt %-Formatierungen für das Datum. –strftime( ) kopiert in einen String die gewünschte Ausgabe eines Datumsformats mit den festgelegten %-Datumsformatierungen. Analysieren Sie die Programme: datum.c, dauer.c

46 V _cbs/kf / Folie 46 Dateioperationen Unter C können Dateien erstellt, beschrieben und ausgelesen werden. Dateien können in unterschiedlichen Moden geöffnet werden (Schreib-, Lese-Modus usw). –FILE vereinbart ein Name (als Pointer *) unter C. –fopen( ) vereinbart den Pfad, den Dateinamen und den Modus. –fprintf( ) schreibt Daten formatiert in eine Datei. –fgets( ) liest Daten formatiert aus einer Datei ein. –fclose( ) schließt eine Datei und gibt sie für andere Benutzer frei. Lesen Sie den Abschnitt Dateien und Streams im oben angegebenen Link durch und analysieren Sie die Programme: fw.c, fr.c, fr2.c, frt.c, frt2.c

47 V _cbs/kf / Folie 47 HTML-Programmierung Das Foxboard G20 wird mit dem Webserver Lighttpd ausgeliefert. Der Standardwebserver in der Carl-Bosch-Schule ist der Apache2. Deswegen wurde auf dem Foxboard der Apache2 installiert und konfiguriert. Die Installation und Konfiguration ist in dem Dokument FoxG20Installation.doc beschrieben. Die im Ordner /var/www hinterlegten html-Dateien können im Webbrowser durch IP/ aufgerufen werden. Erstellen Sie die Datei hw.html im Ordner /var/www und rufen Sie die Datei im Browser mit x/hw.html auf. –Inhalt der hw.html-Datei: Hallo Welt von xxxxx V3.1!

48 V _cbs/kf / Folie 48 CGI-Programmierung (Common Gateway Interface) Um den aktuellen Zustand der Hardware anzuzeigen, können mit CGI dynamische Webseiten in C erstellt werden. Die im Ordner cgi-bin in C-geschriebenen Programme verwenden als Standardausgabe den WEBServer. Deswegen steht der html-Code in printf-Anweisungen. Da der html-Code oft Anführungszeichen " benötigt, müssen diese in printf-Anweisungen durch ein Backslash \" gekennzeichnet werden, um der printf-Anweisung mitzuteilen, dass dieses Anführungszeichen nicht das Ende des printf-Strings bedeutet. Vereinbarungen in der Apache2-Konfigurationsdatei: –der /var/www-Ordner als DocumentRoot –cgi als Alias für den Ordner cgi-bin –die Endung.cgi als Kennzeichnung eines CGI-Programms Deswegen sollten die ausführbaren CGI-Dateien (kompilierten C- Dateien) mit.cgi enden und im /var/www/cgi-bin Ordner liegen.

49 V _cbs/kf / Folie 49 Hallo Welt als cgi-Programm Das CGI-Programm in Notepad++ schreiben und die hwcgi.c- Datei in den cgi-Ordner kopieren (/var/www/cgi-bin/). Die Datei hwcgi.c im cgi-bin Ordner mit gcc hwcgi.c –o hw.cgi kompilieren und die Rechte mit chmod 4755 hw.cgi setzen. Im Browser aufrufen. Hinweis: Durch den Eintrag ScriptAlias /cgi/ /var/www/cgi-bin/ in der Apache2-Konfigurationsdatei wird der richtige Pfad für cgi ersetzt. Die grüne Anweisung ist für den Firefox wichtig!!! //hwcgi.c #include int main(void) { printf("Content-Type: text/html; charset=iso \n\n"); printf(" Hallo Welt von xxxxx V_CGI_3.1 "); }

50 V _cbs/kf / Folie 50 int main(void) { char *query_string = getenv("QUERY_STRING"); gpioint(DL2, "out"); if (query_string) // 0, keine Übergabe, wichtig beim ersten Aufruf { // LD2-LED setzen durch Browser-Eingabe if (strstr("LD2on",query_string)) gpioset(LD2,1); if (strstr(„LD2off",query_string)) gpioset(LD2,0); } printf("Content-Type: text/html; charset=iso \n\n"); printf(" Fernschalten der LD2 (KID:103,PC7) "); printf(" LD2 an "); printf(" LD2 aus "); printf(" Version G20.3/kf (CBS-HD) "); } LD2 übers Internet schalten (1) ?LD2off ist als Teilstring im query_string. Putty: gcc ld2cgi.c –o ld2.cgi Putty: chmod 4755 ld2.cgi (Recht für ausführbar setzen) Browser:

51 V _cbs/kf / Folie 51 LD2 übers Internet schalten (2) Erstellen Sie auf den Foxboard im Ordner /var/www den Ordner pics und speichern Sie die Bilder hell.jpg und dunkel.jpg im Ordner pics. –In der Apache2-Konfigurationdatei ist der Pfad für den DocumentRoot auf /var/www/ gesetzt. Deswegen muss als Pfad beim html- Aufruf img src= für den Ort der Bilder /pics/ angegeben werden. Speichern Sie die Datei ld2cgi.c unter ld2imgcgi.c und ersetzen Sie die beiden Zeilen mit printf( "

52 V _cbs/kf / Folie 52 CGI-Programm als WEB-Startseite des FoxG20 Kopieren Sie die index.html-Datei mit dem Inhalt in den /var/www-Ordner. Die index.html-Datei startet beim Aufruf die Datei index,cgi, die im /var/www/cgi-bin Ordner sein muss. Nennen Sie deswegen die Datei im Ordner cgi-bin in index.cgi um, die bei der Eintragung der IP-Adresse des FoxG20 im Browser sofort gestartet werden soll. Aufgabe: –Nennen Sie die Datei ld2img.cgi um in index.cgi. –Starten Sie den Browser und geben Sie nur die IP-Adresse ihres FoxG20 ein. Warum ist eine dynamische DNS-Adresse sinnvoll.

53 V _cbs/kf / Folie 53 CGI auf html-Seite umleiten (1) int main(void) { char *query_string = getenv("QUERY_STRING"); gpioinit(LD2,"out"); if (query_string) { if (strstr("LD2on", query_string)) gpioset(LD2,1); if (strstr("LD2off",query_string)) gpioset(LD2,0); } printf("Content-Type: text/html; charset=iso \n\n"); printf(" "); } Werden auf der Webseite keine aktuellen Einstellungen angezeigt (Webseite ist statisch, nicht dynamisch), kann nach der Hardwareauswertung und - Einstellung im CGI-Teil auf eine html-Webseite verzweigt werden. Die html- Datei sollte dann im Dokumentenroot vom Apache2-Server liegen, auf keinen Fall im cgi-bin_Ordner. Inhalt der ld2w.cgi-Datei:

54 V _cbs/kf / Folie 54 CGI auf html-Seite umleiten (2) Ich hoffe, es hat Ihnen Spaß bereitet, sich mit dem Foxboard, mit Linux und der Sprache C zu beschäftigen. Der Autor: Michael Kaufmann Fernschalten der LD2 (KID:103,PC7) LD2 an LD2 aus Version G20.3/kf (cgi -> html) (CBS-HD) Wichtig ist die Umleitung in der ld2w.html-Datei zurück auf die ld2w.cgi-Datei im Ordner /cgi/. Der Inhalt der ld2w.html-Datei:


Herunterladen ppt "V11.07.12_cbs/kf / Folie 1 Embedded Systems Hardware unter Linux mit dem FoxboardG20 steuern - Digitale Signale - Analoge Signale Autor: StD Michael Kaufmann."

Ähnliche Präsentationen


Google-Anzeigen