BFP Entwurf Eingebetteter Systeme Freeflight! Sommersemester Cross-Compilieren für die AR.drone

Ähnliche Dokumente
Die ARM-Mikroarchitektur. Acorn RISC Machine ARM. Asm Prak SS03 p.1/13

Neues vom STRIP Forth-Prozessor

Embedded Linux gnublin Board Programmieren Sonstiges. Embedded Linux am Beispiel des Gnublin-Boards

Vom Web ins IoT: Schnelleinstieg in Tooling und Entwicklung

ASIC-SYNTHESE DER SHAP-MIKROARCHITEKTUR

Technische Grundlagen der Informatik 2 SS Einleitung. R. Hoffmann FG Rechnerarchitektur Technische Universität Darmstadt E-1

Martin Stiller, Fakultät Informatik, Institut für Technische Informatik. LLVA: Eine virtuelle Befehlssatzarchitektur

Assembler - Einleitung

Embedded-Linux-Seminare. Toolchains

DIGITALE SCHALTUNGEN II

Grundlagen der Rechnerarchitektur. MIPS Assembler

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018

Android NDK API + ABI

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Hardware PCI-Bus. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg

Informatik in Bewegung

Android NDK API + ABI

Was ist Reference Counting Implementierung. Ende. Reference Counting. Kevin Köster. Uni Hamburg. 31. März Kevin Köster Reference Counting 1/58

M I K R O P R O Z E SS O R P R A K T I K U M SS2018. Termin1. C-Programmierung für eingebettete Systeme

Leistungsfähige ARM CPUs für den industriellen Einsatz

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009

Bios-Update Anleitung mit Q-Flash. Wichtige Hinweise!

Just-In-Time-Compiler (2)

Bibliotheks-basierte Virtualisierung

2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"

Grundlagen der Rechnerarchitektur. Einführung

Just-In-Time-Compiler (2)

Software ubiquitärer Systeme 2. Übung

Fachprojekt for Embedded System: Design and Implement Your Own Embedded Systems (2) LS 12, TU Dortmund

Configurable Embedded Systems

Alte Software auf neuer Hardware, Neue Software auf alter Hardware

4D Server v12 64-bit Version BETA VERSION

ARM-Rechnerarchitekturen für System-on-Chip-Design

N Bit Binärzahlen. Stelle: Binär-Digit:

Embedded Linux Portierung auf mobiles Datenerfassungsterminal. Ole Reinhardt

Seminar: Multi-Core Architectures and Programming

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

Vorlesung 3: Verschiedenes

Einführung Leistungsmerkmale Aufbau am Beispiel FAT16. Das Filesystem FAT. Peter Schmid. Hochschule für Technik Zürich Studiengang Informatik

Benchmarking Intel Pentium III-S vs. Intel Pentium 4

Mikrocontroller. Vortrag von Louis Liedtke. 8. Dezember Fakultät Elektrotechnik und Informatik. Bild 1: Atmel ATmega8

ARM Cortex-M Prozessoren. Referat von Peter Voser Embedded Development GmbH

Informatik für Mathematiker und Physiker Woche 7. David Sommer

1 Fehler in Bibliotheksfunktionen. 1 Überblick. 2 Ziele der Aufgabe. Besprechung der 1. Aufgabe

Smartphone Entwicklung mit Android und Java

Implementierung und Evaluation eines Thumb- und Thumb2- Architekturmodells für den Befehlssatzsimulator Jahris

Selbststudium Informationssysteme - H1102 Christian Bontekoe & Felix Rohrer

Computer-Architektur Ein Überblick

ANLEITUNG Version RBG TAURIS. Raumbediengerät Unterputz 4,3 TFT Modbus -TCP/IP mit Linux Betriebssystem und Modbus -RTU Gateway

Symbian OS. OS für kleine Endgeräte: Sven Walter

PLATO-Systemanforderungen

Hugepages, NUMA or nothing on Linux?

Software ubiquitärer Systeme 2. Übung

Verschiedenes. Peter B. Ladkin

Arbeiten mit Visual COBOL 3.0 for Eclipse. Rolf Becking 30. November 2017

Erhöhung der Ausfallsicherheit einer Mikropumpensteuerung mit Hilfe einer hierarchisch organisierten, heterogenen Controllerplattform

Neue Prozessor-Architekturen für Desktop-PC

LeMaker HiKey 960 4GB, Octa Core 4xARM Cortex A73 + 4xA53 64-Bit-CPU, Mali G71 MP8 3D GPU, 96board

Hinweise C-Programmierung

Citrix Provisioning Server Marcel Berquez. System Engineer

Rechner Architektur. Martin Gülck

Grundkurs Routing im Internet mit Übungen

Einstieg in die Informatik mit Java

Die Technik hinter IoT: Arduino, Raspberry Pi & Co.

Linux Terminal mit Ethernet und Java. Eine dynamische Plattform für Automatisierungsapplikationen?

Seminar Parallele Rechnerarchitekturen SS04 \ SIMD Implementierung aktueller Prozessoren 2 (Dominik Tamm) \ Inhalt. Seite 1

C++ mit dem Arduino (Uno und Mega2560)

Rechner in Eingebetteten Systemen

Am Beispiel der SHARC-DSPs Jan Kiene

Mikrocontroller-Programmierung

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Systemanforderungen Verlage & Akzidenzdruck

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

Rechnernetze und Organisation

U5-2 Register beim AVR-µC

ODA Erfahrungen und Neuigkeiten

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

Übungen zu Systemnahe Programmierung in C (SPiC)

RGBWW WLAN LED Dimmer mit H801 (ESP8266)

LINUX Schulung. FrauenComputerZentrum Berlin. Jutta Horstmann, Mai 2006

Hochschule Düsseldorf University of Applied Sciences HSD RISC &CISC

Open Source - Mikrokontroller für Mixed Signal ASIC

Embedded Systems Themen am : 32 Bit Controller für Embedded Systems (von Atmel)

Echtzeitbetriebssysteme (am Beispiel QNX) Dr. Stefan Enderle HS Esslingen

Aufbau und Funktionsweise eines Computers

Vorlesung Rechnerarchitektur. Einführung

BFP Entwurf Eingebetteter Systeme Elektronische Musik. Ein Klavier oder Wie klingt ein Rechteck?

Samsungs Exynos 5 Dual

ABLEITUNG ZUSÄTZLICHER STEUERGRÖSSEN FÜR DIE STRAHLFORMUNG IN EINEM LASER-SCANNER IM ECHTZEITBETRIEB

Oracle 10g Einführung

Programmier-Befehle - Woche 09

Einführung in die Programmierung des VEX IQ mit ROBOTC. Kurzanleitung

Datenblatt: TERRA MINISERVER G ,00. Chipsatz: Intel C232 / Sockel 1151 / Single-Prozessor-System. Zusätzliche Artikelbilder IT. MADE IN GERMANY.

Transkript:

12 BFP Entwurf Eingebetteter Systeme Freeflight! Sommersemester 2012 Cross-Compilieren für die AR.drone 2012/06/21 Michael Engel Informatik 12 TU Dortmund

Überblick Cross-Compiler Beispielcode Laufen lassen 12, 2011-2 -

Cross-Compiler Problem: normaler Compiler (z.b. gcc) erzeugt Code für die Architektur, auf der er läuft z.b. x86 oder (bei uns) x64 Die AR.drone hat aber einen ARM926-Prozessor: Unterschiedlicher Befehlssatz Unterschiedliche Breiten von Datentypen Aber: Sehr ähnliches Betriebssystem (Linux) Compiler benötigt, der Code für ARM926 erzeugt! 12, 2011-3 -

Cross-Compiler (2) Cross-Compiler: Läuft auf Host-Plattform x Erzeugt Code für Target-Plattform y Definition der Plattform als Triplets: Für die AR.drone: arm none linux gnueabi Format: CPUarchitektur-Hersteller-OS-ABI Hier ein Quadrupel wegen verschiedener ABIs, die Linux für ARM unterstützt Innerhalb einer Architektur werden verschiedene Prozessorvarianten unterstützt (ARM7, ARM9,...) Triplet wird als Prefix für Compiler-Tools verwendet: arm none linux gnueabi g++ arm none linux gnueabi ld (usw.) 12, 2011-4 -

Cross-Compiler (3) Welche CPU nutzt die AR.drone genau? Verbindung aufbauen: telnet 192.168.0.1 cat /proc/cpuinfo Processor : ARM926EJ S rev 5 (v5l) BogoMIPS : 233.47 Features : swp half thumb fastmult edsp java CPU implementer : 0x41 CPU architecture: 5TEJ CPU variant : 0x0 CPU part : 0x926 CPU revision : 5 Cache type : write back Cache clean : cp15 c7 ops Cache lockdown : format C Cache format : Harvard I size : 32768 I assoc : 4 I line length : 32 I sets : 256 D size : 16384 D assoc : 4 D line length : 32 D sets : 128 Hardware : Mykonos Parrot platform Revision : 0904 Serial : 0000000000000000 12, 2011-5 -

ARM-Architektur Was bedeuten die Bezeichnungen? Verschiedene ARM-Entwicklungsstufen: ARMvx Anfang der ARM-Entwicklung 1983 bei Acorn: ARMv1-Prototyp ARMv2: erste kommerzielle Variante: 1986 8 MHz Implementierung: ARM2, ARM3 ARMv3: 1989 4 kb Cache, 25 MHz, 12 MIPS Implementierung: ARM6, ARM7 (z.b. Apple Newton) ARMv4: ARM7TDMI, StrongARM, ARM9TDMI ARMv5: ARM7EJ, ARM9E, ARM10E Aktuell: ARMv7 (Cortex A): bis 2 GHz... Processor : ARM926EJ S rev 5 (v5l) Features : swp half thumb fastmult edsp java CPU architecture: 5TEJ 12, 2011-6 -

ARM-Architektur (2) 32-Bit RISC-Architektur Load/Store 16 32-Bit-Register + Shadow-Register Dezizierte Register: R15 = PC R14 = LR (Rückspr.adr.) R13 = SP Erweiterungen möglich für: Floating-Point Vektor-Ops 12, 2011-7 -

ARM-Architektur (3) Verschiedene ARM-Architekturvarianten unterscheiden sich in: Mikroarchitektur (Piplelinestufen) Cache-Architektur Unterstützer Befehlssatz ARM-Befehlssätze ARM32: 32-Bit-Befehle THUMB: 16-Bit-Befehle, nur 8 Register nutzbar, Ergänzung zu 32-Bit-Befehlen: kompakt, spart Speicher THUMB2: kompakter 16/32-Bit-Befehlssatz, eigenständig nutzbar ARM926EJ-S: ARM32 + THUMB, kein THUMB2, kein FP, keine Vektor-Ops Processor : ARM926EJ S rev 5 (v5l) Features : swp half thumb fastmult edsp java CPU architecture: 5TEJ 12, 2011-8 -

Crosscompilieren für ARM Cross-Compiler selber bauen ist aufwändig, fehleranfällig und dauert... Fertige Crosscompiler existieren Für ARM z.b. CodeSourcery g++ Toolchain für ARM: http://www.mentor.com/embedded software/sourcery tools/sourcerycodebench/editions/lite edition/ Angabe der Zielarchitektur auf der Compiler-Befehlszeile: arm none linux gnueabi gcc march=armv5 c foo.c...ergibt... $ file foo.o foo.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped Praktischerweise erzeugt die Standardeinstellung (ohne -march) bereits funktionierenden Code :-) 12, 2011-9 -

Beispielprogramm Quelle: https://github.com/ardrone Navboard: ardrone/navboard Navboard driver and demo getting raw data from the navboard and converting it to realworld units Zwei C-Sourcedateien, ein Header: main_navboard.c Aufruf Initialisierung, Schleife liest Messwerte navboard.c Kalibrierung (flat trim), Init, Werte lesen navboard.h struct für Navigation, Funktionsprototypen Zwei weitere Files benötigt: util.c Hilfsfunktionen: Taste lesen, Zeit (in µs) liefern gpio.c Setzen von gpio-pins über Tool gpio und system-aufruf Bauen mit (siehe make.bat): arm none linux gnueabi g++ o navboard../util/util.c../gpio/gpio.c navboard.c main_navboard.c 12, 2011-10 -

Beispielprogramm navboard.h: struct nav_struct { u16 size; u16 seq; // +0x00 Size of the following data (always 0x2C) // +0x02 Sequence number, increases every update u16 acc[3]; // +0x04 Raw data (10 bit) of the accelerometers multiplied by 4 u16 gyro[3]; gyros. X,Y=IDG, Z=Epson // +0x0A Raw data for the gyros, 12 bit A/D converted voltage of the u16 gyro_110[2]; // +0x10 4.5x Raw data (IDG), gyro values with another resolution (see IDG 500 datasheet) u16 acc_temp; // +0x14 Accs temperature startup value 120 @ 25C, rising to 143 u16 gyro_temp; // +0x16 XYGyro temperature (IDG), 12 bit A/D converted voltage of IDG's temperature sensor startup value 1532 @ 25C, rising to 1572 u16 vrefepson; of the Epson sensor u16 vrefidg; of the IDG sensor // +0x18 ZGyro v_ref (Epson), 12 bit A/D converted reference voltage // +0x1A XYGyro v_ref (IDG), 12 bit A/D converted reference voltage u16 us_echo; // +0x1C bit15=1 echo pulse transmitted, bit14 0 first echo. Value 30 = 1cm. min value: 784 = 26cm... u16 checksum; // +0x1E Checksum = sum of all values except checksum (22 values) 12, 2011-11 -

Laufen lassen! Übertragen des eigenen Programms: ftp 192.168.0.1 ftp> bin ftp> put navboard AR.drone verwendet Steuerprogramm mit dem kreativen Namen program.elf Steuerprogramm benutzt alle Ressourcen muss vor Start eigener Programm beendet werden: telnet 192.168.0.1 killall program.elf Programm ausführbar machen und starten: chmod +x navboard./navboard 12, 2011-12 -

Laufen lassen! Übertragen des eigenen Programms: ftp 192.168.0.1 ftp> bin ftp> put navboard AR.drone verwendet Steuerprogramm mit dem kreativen Namen program.elf Steuerprogramm benutzt alle Ressourcen muss vor Start eigener Programm beendet werden: telnet 192.168.0.1 killall program.elf Programm ausführbar machen und starten: chmod +x navboard./navboard 12, 2011-13 -

Eigener Code auf der AR.drone Weitere Beispiele für Ansteuerung von Sensoren und Aktuatoren unter: https://github.com/ardrone Wichtige Punkte für eigenen Code: ARM926 der AR.drone läuft mit nur 468 MHz Keine Unterstützung für Hardware-Fließkommazahlen In Software emuliert (soft-fp), daher sehr langsam AR.drone hat nur 128 MB RAM Ansonsten: Netzwerk-Verbindungen auch lokal machbar Entsprechende Ports auf localhost (127.0.0.1) öffnen Erstmal mit Original-Flugsoftware laufen lassen Eigenes Programm steuert AR.drone wie gehabt über UDP 12, 2011-14 -