Overview. Multitasking in Embedded Systems. Software development with Linux. Using Multitasking in Microcontrollers. URL: http://hlb-labor.



Ähnliche Dokumente
Versionskontrollsysteme

Revisionskontrollsystem GIT

Softwareentwicklung unter Linux

Overview. Praktikum Embedded Systems

Linux und Eclipse Einführung SysArch Tutoren WS 2008/2009 Atanas Dimitrov, Johannes Weiss

Versionsverwaltung für die KU Betriebssysteme. Eine Einführung

ATB Ausbildung Technische Berufe Ausbildungszentrum Klybeck

KURZANLEITUNG DUPLICITY MIT CLOUD OBJECT STORAGE

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Benutzer und Rechte Teil 1, Paketverwaltung, SSH

Mein eigener Homeserver mit Ubuntu LTS

Installation mit Lizenz-Server verbinden

Version 0.3. Installation von MinGW und Eclipse CDT

git & git-flow Jens Sandmann Warpzone Münster e.v. Jens Sandmann (WZ) git & git-flow / 31

4D Server v12 64-bit Version BETA VERSION

How to install freesshd

C++ mit Eclipse & GCC unter Windows

Dateisystem 1, Suchpfad, Befehlstypen

Die Projek*ools. Files, Git, Tickets & Time

Dateisystem 1, Suchpfad, Befehlstypen

Benutzer und Rechte Teil 1

Torsten Flatter inovex GmbH. "Git.NET" gibt's nicht?

Versionsverwaltung mit Mercurial für Einsteiger

Apache Subversion (SVN)

Installations-Dokumentation, YALG Team

Verteilte Versionskontrolle mit GIT Dortmund Ansgar Brauner - GreenPocket GmbH - Köln

git Änderungen verwalten mit git

Moodle aktuell halten mit Git


Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

MobiDM-App Handbuch für Windows Mobile

disk2vhd Wie sichere ich meine Daten von Windows XP? Vorwort 1 Sichern der Festplatte 2

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

Installation der SAS Foundation Software auf Windows

MetaQuotes Empfehlungen zum Gebrauch von

SFTP SCP - Synology Wiki

cs106 Informatiklabor Teil 1: Java-Installation

Betriebssystem Windows - SSH Secure Shell Client

Von SVN zu Git. Daniel Willmann cbna

Herbstsemester cs106 Informatiklabor Teil 4: Partitionierung & Linux Installation. P.Huber@stud.unibas.ch

Laufwerke unter Linux - Festplatten - - USB Sticks - September 2010 Oliver Werner Linuxgrundlagen 1

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Windows Server 2012 R2 Essentials & Hyper-V

Anwenderhandbuch. ipoint - Server

Linux - a bit advanced

Konfigurationsdateien mit Git verwalten

Linux im Studium. Serbest Hammade / Resh, Christian Sturm. Do, 15. November 2012

Hex Datei mit Atmel Studio 6 erstellen

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Open Source. Hendrik Ebbers 2015

Oracle VirtualBox. Zum Herunterladen für alle Betriebssysteme gibt s die VirtualBox auf:

Python SVN-Revision 12

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Tutorial: Erstellen einer vollwertigen XP Home CD aus der EEE 901 Recover DVD

Lokale Installation von DotNetNuke 4 ohne IIS

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Workshop: Eigenes Image ohne VMware-Programme erstellen

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Aufbau einer Testumgebung mit VMware Server

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Netbeans 6.1 mit SVN Server unter Debian etch mit Windows Clients

Der Adapter Z250I / Z270I lässt sich auf folgenden Betriebssystemen installieren:

Installation DV4mini ausgehend von einem frisch installierten System:

NEWSLETTER. FileDirector Version 2.5 Novelties. Filing system designer. Filing system in WinClient

Embedded So)ware. Einrichten der Arbeitsumgebung

Einführung in Subversion

SSH Authentifizierung über Public Key

Installation Linux agorum core Version 6.4.5

Installation und Aktualisierung der VMware-Tools

Step by Step Webserver unter Windows Server von Christian Bartl

TeamSpeak3 Einrichten

Linux Cafe Referent: Bernd Strößenreuther

OP-LOG

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

GNU/Linux für Neulinge

Praktikum Ingenieurinformatik (PI)

Readme-USB DIGSI V 4.82

How to install ubuntu by crypted file system

Teamschool Installation/ Konvertierungsanleitung

Patch Management mit

Remote Control - LeCroy Oszilloskop WaveSurfer 3000 mit LabVIEW via VICP LAN-Schnittstelle

CVS. The open standard for version control. (Concurrent Versions System) Maik Zemann CVS

Im Folgenden wird die Konfiguration der DIME Tools erläutert. Dazu zählen die Dienste TFTP Server, Time Server, Syslog Daemon und BootP Server.

In 15 Schritten zum mobilen PC mit Paragon Drive Copy 11 und VMware Player

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

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse

Anleitung zum Prüfen von WebDAV

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Einführung Git Interna Workflows Referenzen. Git. Fast Version Control System. Michael Kuhn

X Anmelden am System. X System herunterfahren. X Grundlegendes zur Shell. X Das Hilfesystem. X Dateioperationen. X Bewegen im Verzeichnisbaum

Installation Messerli MySQL auf Linux

Transkript:

Overview Software development with Linux Using Multitasking in Microcontrollers URL: http://hlb-labor.de/lehre 1

Chapter 1 Software development under Linux OS 2

Softwareentwicklung mit Linux Was ist Linux? Das Linux Dateisystem Aufsetzen des Betriebssystems Installation von Softwarepaketen Werkzeuge ToolChain_STM32 Versionskontrollsysteme 3

Historie von Linux 1991 begann Linus Torvalds in Helsinki (Finnland) mit der Entwicklung einer Terminal-Emulation, um unter anderem seinen eigenen Computer besser zu verstehen. Mit der Zeit merkte er, dass sich das System immer mehr zu einem Betriebssystem entwickelte und kündigte es daraufhin in der UsenetThemengruppe für das Betriebssystem Minix, comp.os.minix an.[3] Im September desselben Jahres sollte das System dann auf einem Server den Interessierten zur Verfügung gestellt werden. Da der damalige FTP-ServerAdministrator Ari Lemmke mit den von Torvalds vorgesehenen Namen Freax oder Buggix nicht einverstanden war, stellte jener es stattdessen in einem Verzeichnis mit dem Namen Linux zur Verfügung. Torvalds widersetzte sich anfangs dieser Namensgebung, gab seinen Widerstand aber schnell auf, da er nach eigener Aussage eingestehen musste, dass Linux einfach ein besserer Name war. Linux wurde zu dieser Zeit noch unter einer eigenen Lizenz veröffentlicht, welche die kommerzielle Nutzung verbot. Schnell merkte Torvalds aber, dass diese hinderlich war, und entschied sich dazu, allen Entwicklern deutlich mehr Freiraum zu geben. Er und seine Mitautoren stellten daraufhin im Januar 1992 Linux unter die GNU GPL[4]. Somit konnte man Linux in GNU integrieren und dies als das erste freie Betriebssystem vertreiben. Dieser Schritt machte das System für eine noch größere Zahl von Entwicklern interessanter, da es für diese die Modifizierung und Verbreitung vereinfachte. 1996 kündigte Torvalds an, dass er einen Pinguin als Maskottchen für Linux haben wolle, und schrieb einen Wettbewerb aus, aus dem schließlich der populäre Tux hervorging. Quelle: http://de.wikipedia.org/wiki/linux#historische_entwicklung 4

Was ist Linux? Kernel Das Programm init Shells Benutzerverwaltung Grafische Benutzeroberfläche Anwendungen Distributionen Community 5

Der Linux Kernel Oberboss im System Lizensiert unter GNU General Public License 2 Komponenten Speicherverwaltung Gerätetreiber Multitasking Scheduler Interprozesskommunikation Paketfilter (Firewall) Quelle: http://kernel.org/ 6

GNU General Public License 2 Copyleft Prinzip Lizenznehmer: Alle abgeleiteten Werke auch GPL 2 Autor: Darf Werk auch unter anderen Lizenzen veröffentlichen Lizenznehmer muss Quelltext veröffentlichen! Mehrere Gerichtsverfahren gegen Firmen z.b. 2006 Verfahren gegen D-Link http://dejure.org/dienste/vernetzung/rechtsprechung?text=2-6+o+224/06 7

Das Programm /sbin/init Erstes Programm bei jedem Systemstart Startet alle weiteren Programme verwaltet Runlevel 0. System anhalten 1. Einzelbenutzer (meistens root) 2. Mehrbenutzer ohne Netzwerk 3. Mehrbenutzer mit textueller Oberfläche 4. Reserviert/ Unbenutzt 5. Mehrbenutzer mit grafischer Oberfläche 6. Rechner wird neugestartet Befehle (als Superuser) > runlevel > init <N> gibt aktuellen Runlevel aus schaltet in Runlevel <N> 8

Das Linux Dateisystem Dateisystem ist Zentralbibliothek des Rechners Linux Philosophie: Alles ist eine Datei! Laufwerke immer in Ordner eingehängt / ist die Wurzel von allem alles andere darunter Zugriff auf Hardware über virtuelle Dateien Zugriffsrechte/ Schutzbits Versteckte Dateien 9

Laufwerke in Ordnern keine Laufwerkbuchstaben! Einhängen eines Laufwerks mittels mount Benötigt oft Superuser Rechte (sudo) sudo mount /dev/sda2 /media/home Anzeige der Mountpoints mittels df oder mount > df -h Dateisystem rootfs devtmpfs tmpfs /dev/sda1 /dev/sda2 Größe Benut Verf Ben%% Eingehängt auf 20G 18G 2,9G 86% / 984M 228K 984M 1% /dev 990M 1,4M 988M 1% /dev/shm 20G 18G 2,9G 86% / 54G 46G 5,2G 90% /home 10

/ ist die Wurzel Immer ein Laufwerk in / eingehängt => Bei Neuinstallation reicht eine /-Partition alle anderen Datenträger in Unterordnern /-Verzeichnis (Beispiel opensuse) /bin Kommandos für root und normale Benutzer /boot Kernel und für Bootvorgang benötigte Dateien /dev Virtuelles Dateisystem devfs enthält Dateien für Zugriff auf Hardwaregeräte /etc Systemkonfiguration (globale Einstellungen für alle Benutzer) /home Jeder Benutzer für gewöhnlich ein eigenes Verzeichnis /lib Gemeinsam genutzte Programmbibliotheken /media Dynamische Datenträger wie z.b. USB-Sticks, CDROM Laufwerke,... /opt Optional installierte Software (z.b. QtSDK) /proc Virtuelles Dateisystem mit Informationen zum laufenden System /root Das Heimatverzeichnis des Superusers /sbin Befehle zur Systemverwaltung (nur mit Superuser Rechten benutzbar) /sys Virtuelles Dateisystem sysfs eine erweiterte Darstellung von devfs (/dev) /usr Die meisten Anwendungen sind hier installiert /var Variable Informationsdateien und Datenbanken Quelle: http://fibel.org/linux/lfo-0.6.0/node63.html 11

Der Ordner /dev Hardwaregeräte in Form von Dateien sichtbar Vom Kernel mittels devtmpfs automatisch gefüllt Beispieleinträge Ein Eintrag pro Festplatte und pro Partition /dev/sda Festplatte 1 /dev/sda1 Festplatte 1 Partition 1 Serielle Schnittstellen /dev/ttys0 /dev/ttyusb0 /dev/null interne serielle Schnittstelle erster USB-Seriell Wandler schluckt alle eingehenden Zeichen 12

Zugriffsrechte/ Schutzbits Für jede Datei drei Gruppen (E) (G) (A) Eigentümer Gruppe Andere Drei Arten von Schutzbits r darf lesen w darf schreiben x darf ausführen Schutzbits in Textdarstellung EEEGGGAAA > ls -l -rw-r--r-- 1 gregor users 43 11. Okt 13:35 Quellen.txt > chmod g+w Quellen.txt > ls -l -rw-rw-r-- 1 gregor users 43 11. Okt 13:35 Quellen.txt 13

Versteckte Dateien Dateien/ Ordner die mit Punkt beginnen Normalerweise nicht angezeigt Enthalten oft Einstellungen Bei Kopier- /Verschiebeaktionen ignoriert Punkt Einträge anzeigen > ls -al -rw-r--r-- 1 gregor gregor 3973 2011-10-12 09:30.springrc drwx------ 2 gregor gregor 480 2011-08-24 04:18.ssh Punkt Einträge kopieren cp -R \.* Ziel/ Im Dateiimanager versteckte Dateien anzeigen 14

Aufsetzen des Betriebssystems Wir machen uns die Hände schmutzig! Beispiel anhand Distribution Xubuntu http://xubuntu.org/ Installation in VirtualBox Emulator http://virtualbox.org/ 15

Linux Distro herunterladen 32 Bit Version (x86) optimal für Virtualisierung weniger Speicherbedarf einfacher zu emulieren 64 Bit Version (x64) optimal bei nativer Installation 16

Virtuelle Maschine erstellen 17

Namen vergeben 18

1GB RAM mindestens 19

Virtual Disk Image 20

Bootfestplatte erzeugen 21

Feste Größe ist schneller 22

20GB reichen zunächst 23

Zeit für einen Kaffee 24

ISO Image als virtuelle CD 25

Start von virtueller CD 26

Maus befreien: Strg Rechts 27

Inklusive Online Updates 28

Manuelle Partitionierung 29

Neue Partitionstabelle 30

Partition hinzufügen 31

Eine / Partition ist Pflicht! 32

Jetzt installieren 33

Ohne Swap fortfahren Auslagern auf virtuelle Festplatte langsam! Besser mehr Speicher für Maschine 34

Anmeldedaten 35

Ein gutes Passwort wählen GROSS- und kleinbuchstaben Ziffern Sonderzeichen,.! $ % & / ( ) = + Einen leicht zu behaltenen Satz wählen: Mann was der wieder für einen Quatsch sagt Sonderregeln (ein 1, sagen ;) Mwdwf1Q; Insgesamt 8 Zeichen! 36

Das kann dauern! 37

Neustart bestätigen 38

Ein aufgeräumter Desktop 39

Updates suchen 40

Updates installieren 41

Anwendungen installieren Änderungen am System nur als Superuser (root) Verschiedene Optionen Paketmanager Installationsskripte einzelne Pakete Quelltext 42

Der Superuser Ich bin /root, ich darf das! Eigenes Homeverzeichnis /root Darf jede Datei verändern Nur zur Systemkonfiguration Superuser werden > sudo su Etwas als Superuser ausführen > sudo reboot -n 43

Installation per Paketmanager Königlich einfache Bedienung Große Auswahl vorkonfigurierter Softwarepakete Abhängigkeiten automatisch aufgelöst Automatische Updates opensuse: yast, kpackagekit Debian: apt-get, aptitude, synaptic, kpackagekit 44

Installationsskripte Ähnlich Installation unter Windows OS Ausführbares Programm von Webseite Oft Dateinamensendung.run Datei muss ausführbar gemacht werden chmod +x DATEI Eigenschaften/ Dateizugriff im Dateimanager Oft als Superuser starten sudo./datei Beispiele QtCreator Grafikkartentreiber (NVIDA/ AMD) 45

Installation einzelner Pakete Für Fortgeschrittene User Per Suchmaschine suchen Muss zur Distribution passen opensuse, RedHat: sudo rpm install FILE.rpm Debian:.deb Format sudo gdebi FILE.deb Keine automatischen Updates! 46

Installation aus Quellen Pain in the Ass Suchen der richtigen Version neueste Quellen oft instabil Installationsanleitungen oft veraltet Neu kompilieren COMPILE.txt/ INSTALL.txt lesen! Foren durchsuchen Abhängigkeiten von Hand lösen Fehlermeldungen lesen Fehlende Software installieren Installationsscript erstellen (Fortgeschritten) 47

Gasterweiterungen Installieren Ermöglichen Gemeinsame Ordner Geteilter Zwischenspeicher 3D Grafikbeschleunigung Größenänderungen des Fensters 48

Skript nicht ausführbar Typisches Problem ISO Dateisystem hat keine Schutzbits 49

Shell im Ordner starten 50

autorun.sh direkt starten 51

Gasterweiterungen installiert 52

Wieder neustarten 53

Übung: Installieren Linux Distribution eigener Wahl installieren opensuse, Ubuntu/ Kubuntu, Debian, in virtueller Maschine oder als Dualboot System Darauf folgende Software installieren: QtCreator (http://qt.nokia.com/) git yakuake STM32_ToolChain (http://hlb-labor.de/cortexm3) 54

Console Textuelles Eingabeinterface Erste Console 1991 vom Kernel bereitgestellt Ursprünglich Ausgabe direkt in Grafikkartenpuffer Terminal ist Entsprechung unter grafischer Oberfläche Immer noch erreichbar per Strg+F1,... 55

Shell Jede Konsole startet eine Shell Interpretiert menschliche Texteingaben Es gibt verschiedene Shells bash, csh, tcsh, (unterschiedliche Kommandosyntax!) Grundfunktionen Starten von Programmen Ausführen von Skripten Vollständige Programmiersprache Umsetzen von Pipe Anordnungen Bereitstellung von Umgebungsvariablen Umleitung von Textausgaben 56

Shell Jede Konsole startet eine Shell Interpretiert menschliche Texteingaben Es gibt verschiedene Shells bash, csh, tcsh, (unterschiedliche Kommandosyntax!) Grundfunktionen Starten von Programmen Ausführen von Skripten Vollständige Programmiersprache Umsetzen von Pipe Anordnungen Bereitstellung von Umgebungsvariablen Umleitung von Textausgaben 57

Programme starten Goldene Regel: Dateien immer tabben! Ausführbare Datei finden absoluter/ relativer Pfad geht immer > /bin/less Suche im Suchpfad Variable $PATH zu durchsuchende Verzeichnisse > echo $PATH./:/home/gregor/bin:/bin:/opt/QtSDK/QtCreator/bin/:..../ ist aktuelles Verzeichnis 58

Ausführen von Skripten Synonym: Batchdatei Erste Zeile definiert Interpreter #!/bin/bash #!/usr/bin/perl x Bit gesetzt: chmod +x DATEI Keine Dateinamensuffixe unter Linux! Oft aktuelles Verzeichnis nicht im Pfad 59

Shell Programmierung Variablen VARIABLE= WERT echo $VARIABLE Kontrollstrukturen if [ BEDINGUNG ]; then... fi for A in a b c... ; do... done Kein goto in bash! 60

Pipeanordnungen Idee: Kleine Befehle als Werkzeugkasten Kombination einfacher Befehle ist mächtig Pipe ist Verbindung zweier Befehle Pipesymbol ist senkrechter Strich A B Textausgabe von A ist Texteingabe für B cat hallo.txt grep Welt Lange Pipeketten möglich 61

Umgebungsvariablen Jede Shell erbt Variablen von Umgebung Neue Variablen in Elternshell unbekannt Variablen anzeigen: export (Bash) Nur exportierte Variablen weiter vererbt Variablen sterben mit ihrer Shell permanent durch Eintrag in Startup Skript Zuweisung: VARIABLE= Wert 62

Textausgaben umleiten Jedes Programm 1 Eingabestrom: STDIN 2 Ausgabeströme: STDOUT, STDERR Eingabe aus Datei: BEFEHL <DATEI Ausgabe in Datei: Zieldatei überschreiben: BEFEHL >DATEI1 2>DATEI2 An Zieldatei anhängen: BEFEHL >>DATEI1 2>>DATEI2 STDERR nach STDOUT umleiten: 2>&1 63

Shell Startup Skript Bei Start/ Login automatisch ausgeführt /etc/bash.bashrc ~/.bashrc ~/.profile ~/.login Beispiele: Suchpfad zu qtcreator > echo 'export PATH= /opt/qtsdk/qtcreator/bin/:$path' >>~/.bashrc Permanenter alias > echo 'alias ll= ls -lh ' >>~/.bashrc 64

Werkzeuge man cat less find grep gcc/ g++ make openocd gdb 65

Befehl man (1) Textbasiertes Anleitungssystem Ausführliche Beschreibungen Praktisch jeder Befehl beschrieben Programmierhandbuch Tastenzuordnungen Pfeiltasten Blättern / nach Text suchen Beenden q Alternative: info 66

Befehl man (2) Verschiedene Ebenen > man EBENE SCHLÜSSELWORT 1 2 3 4 5 6 7 8 9 Ausführbare Programme oder Shellbefehle Systemaufrufe (Kernelfunktionen) Bibliotheksaufrufe (Funktionen in System-Bibliotheken) Spezielle Dateien (gewöhnlich in /dev Dateiformate und Konventionen, z. B. /etc/passwd Spiele Makropakete und Konventionen, z. B. man(7), groff(7) Systemadministrationsbefehle (in der Regel nur für root) Kernelroutinen [Nicht Standard] > man 1 open > man 2 open 67

Befehl cat Dateiinhalt ausgeben Oft Start einer Pipe > cat DATEI grep FOO less Here-Skript in Shell-/ Perl-Skript cat << END_OF_TEXT Hello World END_OF_TEXT 68

Befehl less Zeigt Dateiinhalt an Interaktives bidirektionales Blättern Suchfunktion: / Beenden: q 69

Befehl find Suchen von Dateien > find STARTPFAD -name MUSTER Viele Optionen zur Suchkonfiguration Verknüpfung mittels -and / -or Expression für jede gefundene Datei Default: -print Externes Programm: -exec BEFEHL {} \; Beispiele: > find /home -name \.* less > find./ -name *.txt -exec less {} \; man find 70

Befehl grep Universeller Suchbefehl Sucht im Eingabestrom nach Muster Gibt alle Zeilen aus, die Muster enthalten Syntax: grep MUSTER DATEI > grep Hallo HalloWelt.txt > cat HalloWelt.txt grep Hallo Kombination mit find > find./ -name *.h grep -n MUSTER man grep 71

Befehl gcc/ g++ Universeller Übersetzer Preprozessor C/ C++ Compiler Linker Assembler Übersetzen: gcc -c DATEI.c Linken: gcc DATEI1.o DATEI2.o -o OUT man gcc (10575 Zeilen) 72

Befehl make Führt makefile aus Umsetzung von Abhängigkeiten Einfache Regeln A.x mittels BEFEHL aus A.y erstellt Gegeben A.y, B.y, C.y, Für Ziel Z: Erstelle A.x, B.x, C.x, Ausnutzung Parallelität: make -jn (N = 2x CPU-Kerne) Für C wesentliche Dateiendungen.s.c.h.o Assembler Quelltext C Quelltext C Headerdatei Objektdatei (aus.c oder.s erstellt) 73

makefile Steuerdatei für make Regeln zur Übersetzung Konfigurationsoptionen Definition von Übersetzungsziele (ZIEL:) Quellverzeichnisse Zu erzeugender Objektdateien Name der Ausgabedatei Übersetzungsoptionen 74

GNU Make Quellen Offizielles Handbuch http://www.gnu.org/software/make/manual/make.pdf Deutsches Tutorial http://www.ijon.de/comp/tutorials/makefile.html 75

ToolChain_STM32 Collection of Scripts Automatically downloads aprox. 500MB Sources patched and compiled Compiler binaries Programmer/ Debugger uc Libraries 76

Features ToolChain Downloaded + installed automatically FreeRTOS Multitasking Scheduler STM-StdPeripheralsLibrary Compiler Suite ARM NONE EABI FTDI Treiber für JTAG Programmer current OpenOCD (snapshot from SVN) multiple Ethernet TCP/IP Stacks LCD-Monitor Text + Graphic Mathematic Fixpoint Library 77

Creating a new project Start the adventure! 1. cd ToolChain_STM32 2../createNewProject.pl TEST FOO 3. cd../test 4. configure Makefiles 5. configure Programmer 6../compile.sh 7. Debug 78

Skript createnewproject.pl./createnewproject PROJECT AUTHOR copies template project Creates new folder in../ Fills in name of project and author Created folder may be moved anywhere 79

Template Project Complete, standalone framework Should run on most Cortex M3 boards Support for QtSDK Editor open file ProjektName.creator from QtCreator Compile: >./compile.sh Missing ToolChain downloaded + installed 80

Makefile Parsed for every compile.sh run Defines how to make things Which object files to compile Where to find.c/.h/.s -files Which constants to define Which files to include Dependencies between build targets 81

Configure Makefile (1) (2) (3) (4) (5) (6) (7) (8) (9) basic constants where to find h-files where to find c-files where to find s-files automagically collect files define ucontroller to use minimize code size phony build targets add some general files 82

Makefile - basic constants Compileroptimizations (-O) O0 O1 O3 Os no Optimizations (for Debugging) simple Optimizations maximal Optimizations creates smallest Binary > man gcc 83

Makefile where to find h-files Header files benötigt für #include gcc Parameter -I definiert einen Includepfad \ am Zeilenende: mit nächster Zeile fortfahren $(INCLUDE_DIRS) enhält viele -I Einträge $(INCLUDE_DIRS) direkt an gcc gegeben Headerfile finden: gcc durchläuft Liste der -I Einträge 84

Makefile where to find c-files C-Sources compiled into separate.o files vpath.%c stores list of folders vpath.%c only used by make Whenever FOO.o should be created Make searches all folders in vpath.%c The first found file FOO.c will be compiled 85

Makefile where to find s-files.s files contain assembler source code Often used for Bootloader vpath %.s stores relative paths of folders Whenever make should compile a FOO.s All folders in vpath %.s are searched First found file FOO.s is being compiled FOO.s FOO.o 86

Makefile collect files Files with certain name suffix.c.cc.cpp.s Only files in same folder as makefile Every found file compiled into corresponding.o file Not required to manually add these files to makefile 87

Makefile - define ucontroller STM32 ucs are separated into classes Classes differ by Required bootcode file Amount of RAM Amount of Flash Memory Functional units (GPIOs, Timer, UARTS,..) 88

Makefile - minimize code size Optimize during Compile & Link GCC can write Funktiones/ Data into separate Sektions of the objektfile Unreferenced sections can be skipped during link stage Important: All used interrupt handlers have to be marked as attribute ((used)) arm-none-eabi-gcc --help=optimizers less man gcc 89

Makefile - phony build targets.phony: clean all Lists all Targets which are no files Avoids ambiguity between build targets and files of same name Example: all, clean 90

Makefile - add general files $(MAIN_OBJS) stores list of all object files to create Every mandatory.c file requires one.o entry in $(MAIN_OBJS)! Exceptions: page Collect Files object files can be added to at any stage of makefile E.g.: MAIN_OBJS += foo.o 91

Makefile Extensions Subfolders in project folder extensions/ Makefile fragments provided by ToolChain No user created/ project related files here! extensions.local/ User created Makefile fragments go here extensions.active/ Symbolic links to extensions/ or extensions.local/ all makefile.* files here are included automatically 92

Folder extensions/ Two types of files makefile.nnn_name Makefile fragment in rank NNN provides some extra settings when activated activate.nnn_name.sh scripts that activate makefile fragments will create one or more links in extensions.active/ some scripts remove interferring links automatically (e.g. activate.100_board_xxx.sh) Added to search PATH Just cd to your project folder and issue: > activate.700_example_threading_queues_led.sh 93

Extensions in different Ranks Extensions, Makefiles, Activate-Scripts Filename shows three digit rank number High ranked extensions depend on extensions with lower rank number Lowest rank: Basic compiler libraries Highest rank: Complex examples ToolChain/ReadMe_Ranks.txt Rule: No rank depends on higher ranks! 94 050 system libraries 100 basic definitions 200 basic libraries 300 public libraries 400 ToolChain libraries 600 simple examples 700 complex examples 999 external tools

Minimal SetUp > activate.600_example_leds.sh Creates out of the egg: makefile.050_compiler_sourcery_g++ makefile.100_board_olimex_p107 makefile.200_std_peripherals_library makefile.300_scheduler_free_rtos makefile.300_scheduler_free_rtos_heap1 makefile.600_example_leds + more in future releases of ToolChain 95

Extension 050_compiler_sourcery_g++ Basic Libraries provided by Compiler Binary compiler suite from CodeSourcery No source code available Outdated (not updated by CodeSourcery) CodeSourcery provides updated commercial compiler suite > activate.050_compiler_sourcery_g++.sh 96

Extension 100_board_XXX Board description CPU type Memory Size and Types Pin definitions One board description is mandatory > activate.100_board_olimex_p107.sh 97

Extension 200_std_peripherals_library Common library to access Peripherals on CortexM3 chips Mandatory for all example projects Required by FreeRTOS > activate.200_std_peripherals_library.sh 98

Extension 300_scheduler_free_rtos Multitasking scheduler Provides inter task communication Mandatory for all example projects Requires exactly one activated from 300_scheduler_free_rtos_heap1 300_scheduler_free_rtos_heap2 300_scheduler_free_rtos_heap3 > activate.300_scheduler_free_rtos.sh 99

Extension 400_debug_registers Provides global variables for certain registers Each variable is a pointer to detailed struct Allows easy reading of individual bit in hardware named access to bitfields in hardware registers > activate.400_debug_registers.sh 100

Extension 400_lcd_320x240_olimex driver for LCD panel on prototype board STM32-LCD from Olimex Basic graphical + text features Makes use of demo code from Olimex > activate.400_lcd_320x240_olimex.sh 101

Extension 400_fix_point_lib Library for Fixed Point mathematic operations CortexM3 CPUs have no Floating Point Unit Fixed Point Math much faster than Floating Point Math in Software Only low loss in accuracy Need to choose range according to application! Documentation/Math/ > activate.400_fix_point_lib.sh 102

Extension 400_network_uip_ste101p Basic TCP/IP network Stack uip Includes demo software from Olimex Requires Protoboard Olimex P107 Only one socket at a time Packet resend to be implemented by application Documentation/Network/ > activate.400_network_uip_ste101p.sh 103

Extension 400_support_adc Simple functions for ADC configuration Configuration of single ADC-channels DMA enabled data transfer into variables single channel, blocking readout > activate.400_support_adc.sh 104

Extension 600_example_leds Simple Multitasking example Two tasks communicate via shared Variables taskbrightness periodically changes brightnes value taskcontrolled creates PWM on pin PB_LED1 to show current brightness > activate.600_example_leds.sh 105

Extension 600_example_lcd Basic example how to use LCD panel on prototype board STM32-LCD from Olimex Shown Features initialize panel set background/ foreground color print single characters at certain positions printf() at certain/ current positions > activate.600_example_lcd.sh 106

Extension 700_example_threading_queues_led Example showing several tasks communicating via queues visualization via two LEDs can run on any board that defines PB_LED1, PB_LED2 > activate.700_example_threading_queues_led.sh 107

Extension 700_example_threading_queues_lcd Example showing several tasks communicating via queues visualization on LCD panel producer task: current value consumer task: current value Queue size > activate.700_example_threading_queues_lcd.sh 108

Extension 700_example_threading_semaphores_led Example showing several tasks communicate via semaphores several producer tasks give varying amount of tags to a semaphore several consumer tasks take one tag each and do something for a while Visualization via two LEDs on PB_LED1, PB_LED2 > activate.700_example_threading_semaphores_led.sh 109

Extension 700_example_threading_semaphores_lcd Example showing several tasks communicate via semaphores several producer tasks give varying amount of tags to a semaphore several consumer tasks take one tag each and do something for a while Visualization on LCD panel two producer tasks six consumer tasks > activate.700_example_threading_semaphores_led.sh 110

Adapting linker script Used when linking all objject files into final binary Defines memory adresses and assignments in the uc Memory divided into areas with attributes Name Access (r ead, w rite, x ecutable) Start Size Sections defined with attributes Name Alignment (1, 2, 4, 8 Bytes) Assigned memory area. is current address counter File stm32.ld contains linker script 111

Configure Programmer Programmer is a hardware device JTAG-Connection between Desktop PC/ Laptop and uc flashes binary file onto uc Allows Incircuit Debugging Must be supported by OpenOCD Example: ARM-USB-TINY-H from Olimex Corp. used programmer defined in _/interface.cfg List of supported programmers to be found in ToolChain/OpenOCD/share/openocd/scripts/interface/ 112

compile.sh./compile.sh downloads + installs missing ToolChain creates symbolic links to installed libraries may activate basic example framework compies current project updates QtCreator/PROJEKT.creator flashes binary onto uc 113

Debugging In which stage does the bug occur During compilation (gcc -c) Syntaxerror Includefile not found.c-datei makefile #02 During linking after compilation Objektfile missing Objektfile from wrong path makefile #09 makefile #03 During runtime Wrong uc chosen Too few/ much RAM Stackoverflow activate correct board stm32.ld xtaskcreate() call 114

Versionskontrollsysteme Erfassung von Änderungen an Dateien Protokollierung von Änderungen Wiederherstellung alter Zustände Archivierung der gesamten Historie Koordinierung des gemeinsamen Zugriffs Verzweigung in mehrere Branches 115

Funktionsweisen Lokale Versionsverwaltung Zentrale Versionsverwaltung Verteilte Versionsverwaltung 116

Lokale Versionsverwaltung Oft nur einzelne Datei versioniert Änderungen in Datei selbst gespeichert Werkzeuge: SCCS, RCS Beispiele Technische Zeichnung mit Änderungsindex 117

Zentrale Versionsverwaltung Als Client-Server System aufgebaut Ein zentraler Server speichert komplette Historie optional: Read-Only Zugriff für Fremduser optional: Web-Interface Entwickler jeweils nur eine Version Zugriff auch per Netzwerk möglich Werkzeuge cvs, svn (OpenSource) AlienBrain, Perforce, Team Foundation,... 118

Verteilte Versionsverwaltung Jeder Entwickler hat komplette Historie Zusätzlich zentraler Server möglich Änderungen zwischen Entwicklern austauschen optional: Read-Only Zugriff für Fremduser optional: Web-Interface Werkzeuge git, GNU arch, Mercurial, Bazaar (OpenSource) BitKeeper 119

Wie Git das? Übersicht Installation Dezentrale Verwaltung Verzweigte Entwicklung Datenaustausch Markierte Revisionen Interoperabilität Web-Interface 120

Git - Übersicht Freie Software Verteilte Versionsverwaltung von Dateien Entwickelt zur Verwaltung des Linux Kernel Quelltextes Betriebsysteme Linux, Solaris, Mac OS X, FreeBSD, Windows (Cygwin, Msysgit, TortoiseGit-Shell) Aktuell eingesetzt in vielen OpenSource Projekten Amarok, Android, BusyBox, Debian, DragonFly BSD, Eclipse, Erlang, Fedora, Git, Gnome, KDE, Qt, Ruby, Kurzanleitung: Webseite: http://hlb-labor.de/git/ http://git-scm.com/ 121

Git - Installation Debian/ Ubuntu sudo apt-get install git opensuse sudo zypper install git Windows http://de.wikipedia.org/wiki/cygwin http://de.wikipedia.org/wiki/tortoisegit 122

Git - Dezentrale Verwaltung Jeder Benutzer hat eigenes Repository > git pull Holt neuesten Stand vom Zentralrepository Kann Merge ausführen! > git commit sichert aktuellen Stand lokal kommentiert aktuellen Stand erzeugt einzigartige Commit-ID (Hexzahl) > git push kopiert neuesten Stand auf Zentralrepository 123

Git - Verzweigte Entwicklung 1/3 4 Verzweigung in der Entwicklung > git checkout -b B1 1 Verzweigung ab einem älteren Zustand > git checkout -b B2 2 1 Verzweigungspunkt: Branchname/ Commit-ID/ Tag Alle verfügbaren Branches auflisten > git branch -r Auf anderen Branch wechseln > git checkout BRANCH_NAME Branch zum Server hochladen > git push origin BRANCH_NAME 124 B1 2 3 2 3 4 B2 5

Git - Verzweigte Entwicklung 2/3 User B > git clone :Repo auf Branch origin master User A > git clone :Repo auf Branch origin master > git checkout -b B1 Branch B1 lokal erstellt Wechsel zu Branch B1 > git push origin B1 Branch auf Server laden > git pull neuer Branch entdeckt > git branch -r alle Branches auflisten > git checkout B1 Wechsel zu Branch B1 125

Git - Verzweigte Entwicklung 3/3 Implizite Verzweigung User A > git commit -a -m C1 User B > git commit -a -m C2 > git push C1 fehlt Impliziter Branch User B > git pull > git commit -a automatischer Merge von C1 User A > git pull A jetzt auf Stand M 126 C C1 C C1 C2 C C1 M C2

Git Datenaustausch 1/2 International durch verschiedene Protokolle Git-Protokoll über TCP Port 9418 SSH (verschlüsselt) HTTP HTTPS FTP rsync EMail (Patches) 127

Git Datenaustausch 2/2 Verschlüsselte Kommunikation per SSH Benutzer erzeugt RSA Schlüsselpaar > ssh-keygen -t rsa -C VORNAME.NACHNAME ~/.ssh/id_rsa ~/.ssh/id_rsa.pub Private Key Public Key Publickey auf Server kopieren Bei Anmeldung wird Private Key benötigt > git clone gitosis@hlb-labor.de:repository Server verschlüsselt Rechenaufgabe mit Public Key Client entschlüsselt mit Private Key und sendet Ergebnis Server akzeptiert Client 128

Git - Markierte Revisionen > git tag MARKIERUNG Definiert Markierung für aktuellen Stand Markierung beschreibt z.b. Releaseversion Markierung später für Branch nutzbar > git tag listet alle Markierungen auf > man git-tag 129

Git - Interoperabilität Git's das auch anders? Kompatibilitätsinterface GNU Arch (git-archimport) svn (git-svn) cvs (git-cvsexportcommit, git-cvsimport git-cvsserver) Darcs (darcs-fastconvert, darcs2git) Quilt (git-quiltimport) manpages 130

Git - Web-Interface Nice looking access to git OpenSource Software (some) gitweb is part of git distribution http://git-scm.com/ ViewGit is a total PHP rewrite http://viewgit.fealdia.org/ CGit written in C http://hjemli.net/git/cgit/ gitalist is written in Perl http://www.gitalist.com/ Existing Webhoster (one) GitHub Closed Source hoster http://github.com/ 131

Chapter 2 Multitasking in Embedded Systems 132

Multitasking in ES What is Singletasking? What is Multitasking? Why Multitasking? Different approaches Realtime Operating Systems FreeRTOS Synchronization Example Project Debugging Multitasking Software 133

What is Singletasking? Do only one thing at a time Most efficient way to solve problems Applicable to every algorithm No management overhead No internal synchronization required Easy to code Busy-wait for I/O No Interrupts 134

Singletasking Example while (1) { if ( Byte = receivebyte() ) { // blocks! Buffer[Index++] = Byte; if ( Index >= MessageSize) { M_t* M = (M_t*) Buffer; switch (M->Type) { case mt_commanda:... case mt_commandb: default: break; } Index = 0; } } } 135

What is Multitasking? Aim for multiple targets Switch context often Management overhead Synchronization required Interrupts required Hard to code/ debug Implicit delays Increased memory usage Implementation difficult for many algorithms 136

Multitasking Example main() { int Queue = xqueuecreate(...); xtaskcreate(receive, Queue, ); xtaskcreate(process, Queue, ); } void Process(int Q) { while (1) { M = (M_t*) xqueuereceive(q); if (M) { switch (M->Type) { case mt_cmda:... case mt_cmdb:... default: break; }}}} void Receive(int Q) { char Buffer[10][100]; int Index = 0; while (1) { char* Writer = &(Buffer[Index,0]); int Remaining = MessageSize; while (Remaining > 0) { if ( Byte = readbyte() ) { // sleeps! *Writer++ = Byte; Remaining--; } xqueuesend(q, &(Buffer[Index,0]);); Index++; if (Index > 99) Index = 0; } } 137

Why Multitasking? Functions spawnable multiple times Eases handling of slow IO Benefits from multiple CPU-cores Only 1 central Timer required Short Interrupt Service Routines Less global variables required 138

No life without Multitasking! Every Embedded System needs MT MT often implemented via Interrupts Complex Service Routines Data Exchange via Global Variables Difficult to debug Typical approach: Super-Loop Periodically starts set of functions Similar to task scheduler 139

Different Approaches Multiprogramming Ancient mechanism for Periheral Access Realized via Terminal Stay Ready (TSR) Cooperative Multitasking Central Scheduler manages Processes Each process grants CPU to other processes Single process can block whole system Preemptive Multitasking Scheduler interrupts each process periodically Requires central Interrupt-Timer Preemptible Multitasking High priority Applications can interrupt others (OS/2, Linux, FreeRTOS) Allows faster response times 140

Realtime Scheduling Definition of Realtime Real-time computing means a hardware + software system that must response within a strict time constraint. Realtime constraint Hard Violation causes hazardous results Firm Infrequent violations tolerable but degrade system's quality of service Soft Usefullness of results degrade after their deadline http://en.wikipedia.org/wiki/real-time_computing 141

FreeRTOS Multitasking Scheduler Premptible Multitasking High triority tasks block low priority ones Inter Thread Communication Semaphores Queues Developed specially for Embedded Systems Open Source FreeWare with Commercial Support Ported to several μc Architectures http://www.freertos.org/ 142

FreeRTOS Queues Base of inter task communication Send message Task A Task Task Interrupt Service Routine Task Call by value Reading from empty queue Function call waits until Queue is filled No CPU time is wasted during Wait 2 1 Task B FreeRTOS Queues 3 143

FreeRTOS - Semaphores Binary Task B Task B Task A Implemented as Queue of fixed size 1 Best suited for inter thread signaling Task B waits until Task A activates once Counting Task A Implemented as Queue of fixed size N Task A can activate B up to N times at once Data in Queue is of no interest FreeRTOS - Semaphores 144

FreeRTOS - Mutex best suited for Resource locking Semaphore + Priority inheritance Non recursive Task A Can be locked only once Recursive Task B thread can lock multiple times must be unlocked as often as being locked FreeRTOS - Mutexes 145

Multithreading with Queues Activate Extensions for Queues example on STM32-P107 > cd extensions.active/ > rm * > ln -s../extensions/makefile.free_rtos. > ln -s../extensions/makefile.example_threading_queues. > ln -s../extensions/makefile.free_rtos. > ln -s../extensions/makefile.example_leds. 146

Multithreading with Queues Activate Extensions for Queues example on STM32-LCD > cd extensions.active/ > rm * > ln -s../extensions/makefile.free_rtos. > ln -s../extensions/makefile.example_threading_queues. > ln -s../extensions/makefile.free_rtos. > ln -s../extensions/makefile.lcd_320x240_olimex. 147

Multithreading with Queues Spawning Tasks Producer threading_start() Consumer Print 148

Multithreading with Queues Communicate via Queues s8_t Column; s8_t Row; char Text[10]; s16_t Value; Producer LED1 6 5 PJ PJ PJ 4 3 Consumer Print enqueue/ dequeue LED2 setport()/ clrport() 149

Multithreading with Semaphores Activate Extensions for Semaphores example on STM32-P107 > activate.700_example_threading_semaphores_led.sh Activate Extensions for Semaphores example on STM32-LCD > activate.700_example_threading_semaphores_lcd.sh 150

Multithreading with Semaphores Spawning Tasks Producer1 Producer2 threading_start() Consumer1 Consumer2 Print 151

Multithreading with Semaphores Communicate via Semaphore enqueue/ dequeue Producer1 Data irrelevant 0-10/s 0-10/s Semaphore Producer2 setport()/ clrport() 5/s 5/s 5/s 5/s Consumer1 LED1 Consumer2 LED2 Consumer3 Consumer4 PJ PJ PJ 152 Print

Debugging Multitasking Software Different types of Memories Multitasking & Stacks objdump 153

Different types of Memories Storage RAM Heap Stack Datatypes Constants Global Variables Local Variables 154

Constants Stored in Flashmemory along code Automatically initialized 0x4000 0000 (initial value contained in binary) Peripherals Reference to value points to 0x2000 0000 address > 0x0800 0000 RAM Example: char* HelloWorld = Hello world ; 155 Hello World 0x0800 0000 Flash

Global Variables Stored in RAM Initialized by code at program start Reference to value points to address > 0x2000 0000 0x4000 0000 Peripherals Example: int V = 42; 0x2000 0000 RAM void main() { V++; } 0x0800 0000 Flash 156

Lokal Variables 157

Multitasking & Stacks Stacks in Singletask Applications Stacks in Multitasking Applications Stacks in FreeRTOS Stackoverflow 158

Debug: objdump 159