Die Entwicklungsumgebung Labor Technische Informatik Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber 19.04.2011 Inhalt 1 Das Keil MCB1700 Board.......................................................................................2 2 Keil ARM MDK Toolchain .......................................................................................3 2.1 Projekterstellung..............................................................................................3 3 Download und Debugging ......................................................................................4 4 Neues Filekonzept beim Cortex .............................................................................5 4.1 4.1.1 4.1.2 Die Datei stdint.h und das Integerproblem ......................................................5 Hintergrund.......................................................................................................................5 Lösung..............................................................................................................................6 5 Grundstruktur für das Hauptfile ..............................................................................6 6 Nützliche Links .......................................................................................................7 __________________________________________________________________________________________ -1- 1 Das Keil MCB1700 Board Abbildung 1 zeigt das MCB1700 Board mit der im Labor genutzten Orientierung. Das bedeutet, das sich die Begriffe „oben, unten, links und rechts“ in den Anleitungen auf diese Ansicht beziehen. Abbildung 1: Das MCB 1700 mit LPC1758 Weitere Leistungsmerkmale des Eval-Boards sind: 32 Bit LPC1758 Cortex-M3 mit 512 kB Flash und 64 kB SRAM 2 x serielle Schnittstellen 2 x CAN QVGA Color LCD Poti, LED-Reihe, Joystick und 2 Taster 100Mbit Ethernet USB Interface __________________________________________________________________________________________ -2- 2 Keil ARM MDK Toolchain Im Labor arbeiten Sie unter Windows mit der aus dem Mikrocontroller-Labor bekannten µVision Oberfläche, in die der Compiler für den Controller eingebettet ist. Abbildung 2: µVision4 mit dem Blinky von Keil Für die Laborversuche verwenden Sie die Files von der Laborseite und nicht die Dateien, die in den Verzeichnissen von Keil zu finden sind. Die Gründe sind unter Anderem folgende: Sie sollen etwas lernen In der Keil-Variante sind zum Teil Fehler enthalten Die Hardware soll überleben Wie schon bekannt, werden Sie keinen automatisch erzeugten Startup Code einbinden. 2.1 Projekterstellung Die Erstellung eines neuen Projektes erfolgt wie die im Mikrocontroller-Labor. Als Prozessor wird unter „Device -> NXP“ ein LPC1758 ausgewählt. Einzig unter „Target“ wird noch eine Checkbox selektiert, der Rest ist schon korrekt eingestellt. __________________________________________________________________________________________ -3- Abbildung 3: Target Options Die Speichereinstellungen sollten wie oben aussehen, das Häkchen für die MicroLib muss noch gesetzt werden. 3 Download und Debugging Beides findet mit Hilfe des ULINK-ME Adapters statt. Dazu muss unter „Options->Debug“ der ULINK Cortex Debugger ausgewählt werden. Abbildung 4: Options Debug __________________________________________________________________________________________ -4- 4 Neues Filekonzept beim Cortex ARM hat bei der Einführung der Cortex-Familie einen neuen Standard eingeführt, CMSIS genannt. Das Kürzel bedeutet Cortex Microcontroller Software Interface Standard und soll die Möglichkeit bieten, portable Software für die unterschiedlichen Derivate zu schreiben. Dazu wird ein herstellerunabhängiger Hardware Abstraktion Layer eingeführt. system_LPC17xx.c Enthält neben Definitionen nur die Funktion SystemInit(), die alle zum Programmstart alle notwendigen Clock- und PLL-Register setzt. stdint.h Hier sind Typdefinitionen für die Variablen zu finden, siehe 4.1. lpc17xx.h Dies ist der controllerabhängige Teil der Definitionen. Die Datei besteht zum großen Teil aus Strukturen, die im eigenen Programm einen einfachen Zugriff auf die Peripherie ermöglichen. core_cm3.h Hier sind die Definitionen zu finden, die für alle Cortex-M3 gelten. system_lpc17xx.h Damit werden projektbezogenen Einstellungen für die Peripherie gemacht. Diese Datei sollte nicht verändert werden. startup_lpc17xx.s Normaler Startup-Code für den µC. Abbildung 5: Die neue Filestruktur 4.1 4.1.1 Die Datei stdint.h und das Integerproblem Hintergrund Bei der Erzeugung von plattformunabhängigem Code taucht ein Problem auf: Die Länge von Integervariablen. Um dieses Problem zu umgehen, wird immer mehr auf die Methode gesetzt, im Sourcecode anstelle normaler Variablentypen spezielle Definitionen zu verwenden. Kleines Beispiel: Für einen 8051 hat ein short int die gleiche Länge wie eine int Variable, nämlich 16 Bit. In der Welt der Cortex µCs ist der int aber doppelt so groß. Wird nun ein Cortex Modul auf einem 8051 genutzt, können Probleme auftauchen. Wer nun der Meinung ist, das kommt nicht vor, sei auf die Datei GLCD verwiesen. Damit kann von verschiedenen µCs auf die unterschiedlichsten Grafik-LCDs zugegriffen werden. __________________________________________________________________________________________ -5- 4.1.2 Lösung Anstatt die Variablen wie folgt zu deklarieren: unsigned int unsigned char uiZeilenLaenge; ucBuchstabe; // Anzahl Buchstaben pro Zeile // Charakter ZeilenLaenge; Buchstabe; // Anzahl Buchstaben pro Zeile // Charakter wird jetzt die Notation uint32_t uint8_t verwendet. In der stdint.h ist folgende Definition zu finden: typedef unsigned int typedef unsigned char uint32_t; uint8_t; Damit kann nun im eigenen Sourcecode eine konkrete Länge angegeben werden, die für jede Plattform auf den korrekten Typ umgesetzt werden kann, da der Compiler die Typdefinitionen aus der stdint.h verwendet. 5 Grundstruktur für das Hauptfile Neben dem schon bekannten Kopf aus dem Mikrocontrollerlabor /******************************************************************************* * Projektname: Lauflicht * Prozessor: LPC1758 100 MHZ CPU / 25 MHz Peripherie * Funktion: Lauflicht mit SYSTICK * Erstellungsdatum: 12.04.11 * Bearbeiter: AR * History: *******************************************************************************/ #include "Lauflicht.h" /* Definitions */ ist folgender Code wichtig, da der Compiler sonst einen Fehler meldet und die Peripherie nicht korrekt initialisiert ist: /*---------------------------------------------------------------------------Main Program *----------------------------------------------------------------------------*/ int main (void) { SystemInit(); /* Init the LPC1758 */ } Die SystemInit() ist in system_LPC17xx.c zu finden und stellt alle internen Clockpfade und PLLs korrekt ein. Im Gegensatz zu den originalen Dateien von Keil ist eine grafische Bearbeitung des Files abgeschaltet. __________________________________________________________________________________________ -6- 6 [1] Nützliche Links CMSIS: http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php [2] MCB1700: http://www.keil.com/support/man/docs/mcb1700/mcb1700_intro.htm [3] LPC1758 http://www.nxp.com/documents/data_sheet/LPC1758_56_54_52_51.pdf [4] LPC1700 User Manual http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc17xx.pdf [5] ARM Cortex-M3, Second Edition, Joseph Yiu, ISBN: 978-1-85617-963-8 __________________________________________________________________________________________ -7-