<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=131.188.149.16</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=131.188.149.16"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/131.188.149.16"/>
	<updated>2026-04-11T06:01:23Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Eclipse&amp;diff=21894</id>
		<title>AVR Eclipse</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Eclipse&amp;diff=21894"/>
		<updated>2007-06-04T14:54:56Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: /* Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt erste Erfahrungen mit Eclipse und der AVR-Toolchain. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Was muss installiert sein ? ==&lt;br /&gt;
&lt;br /&gt;
=== Unter Linux: (Gentoo) ===&lt;br /&gt;
==== Eclipse-IDE ====&lt;br /&gt;
* [http://www.eclipse.org/downloads/index.php Eclipse-IDE] Version 3.1.0&lt;br /&gt;
* [http://www.eclipse.org/cdt/ Eclipse-CDT-Plugin] Version 3.0.0&lt;br /&gt;
* [http://sf.net/projects/avr-eclipse Eclipse-CDT-Addon for AVR] Version 20070404&lt;br /&gt;
&lt;br /&gt;
==== Compiler ====&lt;br /&gt;
* emerge crossdev&lt;br /&gt;
* crossdev --target avr&lt;br /&gt;
** binutils-2.16.1-r2&lt;br /&gt;
** gcc-3.4.6&lt;br /&gt;
** avr-libc-[latest]&lt;br /&gt;
&lt;br /&gt;
==== Programmer ====&lt;br /&gt;
* emerge uisp&lt;br /&gt;
&lt;br /&gt;
=== Unter Linux: (Debian) ===&lt;br /&gt;
==== Eclipse-IDE ====&lt;br /&gt;
* [http://www.eclipse.org/downloads/index.php Eclipse-IDE] Version 3.1.0&lt;br /&gt;
* [http://www.eclipse.org/cdt/ Eclipse-CDT-Plugin] Version 3.0.0&lt;br /&gt;
* [http://sf.net/projects/avr-eclipse Eclipse-CDT-Addon for AVR] Version 20070404&lt;br /&gt;
&lt;br /&gt;
==== Compiler ====&lt;br /&gt;
* binutils-avr 2.15-3&lt;br /&gt;
* gcc-avr 1:3.4.3-2&lt;br /&gt;
* avr-libc 1:1.2.3-3&lt;br /&gt;
&lt;br /&gt;
==== Debugger ====&lt;br /&gt;
* simulavr 0.1.2.2-1&lt;br /&gt;
* gdb-avr 6.3-2&lt;br /&gt;
* ? avra 0.7-1&lt;br /&gt;
&lt;br /&gt;
==== Programmer ====&lt;br /&gt;
* uisp 20050207&lt;br /&gt;
* ? avrp&lt;br /&gt;
* ? avrprog&lt;br /&gt;
&lt;br /&gt;
== Einrichten der IDE ==&lt;br /&gt;
=== Eclipse ===&lt;br /&gt;
Eclipse ist relativ einfach einzurichten. Die gesamte Entwicklungsumgebung kommt als eine gezipte Datei. Wird diese ausgepackt, so entsteht ein kompletter Verzeichnissbaum, der alle benötigten Dateien enthält.&lt;br /&gt;
&lt;br /&gt;
Das CDT-Plugin ist als getrennte Zip-Datei erhältlich, und muss ebenso entpackt werden. Dabei ist darauf zu achten, die CDT-Datei in den gleichen Verzeichnissbaum zu kopieren, wie vorher Eclipse.&lt;br /&gt;
&lt;br /&gt;
Allerdings ist die Verwendung des update managers wesentlich komfortabler.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative 1:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dieses Plugin installieren: [http://areciv.com/~doogie/index.php?aid=4 avr-eclipse]&lt;br /&gt;
Dann kann direkt ein AVR-Projekt mit den richtigen Einstellungen erstellt werden.&lt;br /&gt;
&lt;br /&gt;
Hier startet man - wie bei Alternative 2 - mit dem &amp;quot;managed Make C Project&amp;quot;, hat aber dann auf der zweiten Wizard-Seite in der Drop-Down-Liste &amp;quot;Project Type&amp;quot; die Möglichkeit, ein &amp;quot;AVR Cross-Target-Project&amp;quot; auszuwählen. &lt;br /&gt;
&lt;br /&gt;
Weiterhin sollte man unter Linux im ausgepackten org.mrm.avr.2007xxxxxx.0.0-Plugin die Datei avr-objsplit.bat in ein ebenso einfaches Shellscript umbauen (#!/bin/bash in erste Zeile, ausführbar machen, @if umschreiben usw.) und nach /usr/bin/avr-objsplit kopieren. Das Skript wird dann immer von Eclipse im (automatischen) Build aufgerufen.&lt;br /&gt;
&lt;br /&gt;
Angepasste Version für Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#/bin/sh&lt;br /&gt;
&lt;br /&gt;
avr-objcopy -j .text -j .data -O ihex *.elf flash.hex&lt;br /&gt;
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex *.elf eeprom.hex&lt;br /&gt;
if [ ! -f eeprom.hex ]; then&lt;br /&gt;
        echo &amp;quot;:00000001FF&amp;quot; &amp;gt; eeprom.hex&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative 2:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== neu anlegen ====&lt;br /&gt;
Mein erster erfolgreicher Versuch lief mit einen &amp;quot;managed C Projekt&amp;quot;. Ich hoffe in der folgenden Beschreibung fehlt kein Schritt:&lt;br /&gt;
* File / New / Managed Make C Project&lt;br /&gt;
** Project Name &#039;&#039;&#039;&amp;quot;test2&amp;quot; [Next]&#039;&#039;&#039;&lt;br /&gt;
** Project Type &#039;&#039;&#039;&amp;quot;Executable (GNU)&amp;quot; [Next]&#039;&#039;&#039;&lt;br /&gt;
** C/C++ Indexer &#039;&#039;&#039;&amp;quot;full ...&amp;quot; [Finish]&#039;&#039;&#039; (hab ich später geändert siehe unten)&lt;br /&gt;
&lt;br /&gt;
==== Projekteinstellungen ====&lt;br /&gt;
* File / New / SourceFile&lt;br /&gt;
** &#039;&#039;&#039;[Browse] &amp;quot;test2&amp;quot; [OK]&#039;&#039;&#039;&lt;br /&gt;
** Source File: &#039;&#039;&#039;&amp;quot;test2.c&amp;quot; [Finish]&#039;&#039;&#039;&lt;br /&gt;
* Project / Properties&lt;br /&gt;
** C/C++ Build / ToolSettings&lt;br /&gt;
*** GCC-C-Compiler&lt;br /&gt;
**** Command:  &#039;&#039;&#039;gcc&#039;&#039;&#039; ändern auf &#039;&#039;&#039;avr-gcc -mmcu=atmega16 -c&#039;&#039;&#039;&lt;br /&gt;
**** Das &#039;&#039;&#039;-c&#039;&#039;&#039; ist wichtig, damit nur kompliert aber nicht gelinkt wird.&lt;br /&gt;
**** Directorys Eintrag &#039;&#039;&#039;/usr/avr/include&#039;&#039;&#039; einfügen&lt;br /&gt;
**** Debugging  gewünschten Wert einstellen (z.B. -g)&lt;br /&gt;
*** GCC-C-Linker &lt;br /&gt;
**** Command:  &#039;&#039;&#039;gcc&#039;&#039;&#039; auch ändern auf &#039;&#039;&#039;avr-gcc -mmcu=atmega16 &#039;&#039;&#039;&lt;br /&gt;
**** Libraries: Library Search Path= &#039;&#039;&#039;/usr/avr&#039;&#039;&#039;&lt;br /&gt;
**** Miscellaneous: Linker Flags = &#039;&#039;&#039;-Wl,-Map,avr.map&#039;&#039;&#039;&lt;br /&gt;
*** GCC Assembler&lt;br /&gt;
**** Command:  &#039;&#039;&#039;as&#039;&#039;&#039; ändern auf &#039;&#039;avr-as&#039;&#039;&lt;br /&gt;
** C/C++ Build / Build Steps&lt;br /&gt;
*** Post-Build-Step&lt;br /&gt;
**** Command: &#039;&#039;&#039;avr-objcopy -j .text -j .data -O ihex test2 test2.hex&#039;&#039;&#039;&lt;br /&gt;
** C/C++ Indexer&lt;br /&gt;
*** Available Indexers = &#039;&#039;&#039;CTags Indexer (declarations only)&#039;&#039;&#039;&lt;br /&gt;
*** Include Files: Index Include paths &#039;&#039;&#039; einschalten&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== später eingefügt: ====&lt;br /&gt;
* Project / Properties&lt;br /&gt;
** C/C++ Build / Build Steps&lt;br /&gt;
*** Pre-Build-Step&lt;br /&gt;
**** Command: &#039;&#039;&#039;uisp -dprog=dasa2 -dserial=/dev/ttyS0 -dpart=atmega16 --erase&#039;&#039;&#039;&lt;br /&gt;
* Project / Properties&lt;br /&gt;
** C/C++ Build / Build Steps&lt;br /&gt;
*** Post-Build-Step&lt;br /&gt;
**** Command: &#039;&#039;&#039;avr_upload&#039;&#039;&#039;&lt;br /&gt;
* Project / Properties&lt;br /&gt;
** C/C++ Build / Build Settings&lt;br /&gt;
*** Build Output&lt;br /&gt;
**** Artifact Name: &#039;&#039;&#039;avr_main&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
avr_upload ist eine kleine Batchdatei im Verzeichniss &#039;&#039;&#039;/usr/bin &#039;&#039;&#039;, die ich neu angelegt hab:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# .lst-Datei erzeugen (optional)&lt;br /&gt;
# avr-objdump -h -S avr_main &amp;gt; avr.lst&lt;br /&gt;
# Datei in Intel-hex erzeugen&lt;br /&gt;
avr-objcopy -j .text -j .data -O ihex avr_main avr.hex&lt;br /&gt;
# Intel-hex-Datei uploaden&lt;br /&gt;
#uisp -dprog=dasa2 -dserial=/dev/ttyS0 -dpart=atmega16 --upload if=avr.hex&lt;br /&gt;
# Intel-hex Datei uploaden und verifizieren.&lt;br /&gt;
uisp -dprog=dasa2 -dserial=/dev/ttyS0 -dpart=atmega16 --upload if=avr.hex --verify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eclipse Plugin ===&lt;br /&gt;
&lt;br /&gt;
Im Forum gibt es ein Plugin für Eclipse, das einen Großteil dieser Einstellungen bereits beinhaltet. Der Thread steht unter: &lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/forum/read-2-229419.html#new &lt;br /&gt;
&lt;br /&gt;
Das Plugin wird dort zum Download angeboten. Aber es ist sicher hilfreich die dortige Anleitung zu beachten.&lt;br /&gt;
&lt;br /&gt;
http://www.mikrocontroller.net/attachment.php/285349/org.eclipse.cdt.avrgcc_1.0.16.zip&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HINWEIS:&#039;&#039;&#039; Bitte die aktuelle Version benutzen. Folgende Warnung bezieht sich auf die älteren Versionen (vor Version 1.0.14).&lt;br /&gt;
&#039;&#039;&#039;WARNUNG:&#039;&#039;&#039; Bei mir funktionierten Timer-Interrupts mit dem Plugin nicht (die jedoch tadellos mit der WinAVR Makefile fuktionierten). Vielleicht habe ich nur eine Option übersehen, seid aber auf der Hut. Wenn ihr Unregelmäßigkeiten bei IRQs feststellt, versucht&#039;s erstmal ohne das Eclipse-Plugin (bevor ihr stundenlang an eurem Code und euch selbst zweifelt :-) ).&lt;br /&gt;
&lt;br /&gt;
== Erster Test ==&lt;br /&gt;
Die folgenden Angaben beziehen sich auf ein sehr einfache Entwicklungsboard mit SPI-Anschluss über die serielle Schnittstelle. Bestückt wurde von mir nur die Spannungsversorgung, der SPI auf RS232 Teil zum Programmieren des Prozessors, Prozessor und Quarz, sowie einige Taster und LEDs. Den Schaltplan gibts [http://www.pollin.de/shop/downloads/D810022B.PDF als PDF hier]&lt;br /&gt;
&lt;br /&gt;
=== Ziel: Eine LED soll blinken ===&lt;br /&gt;
Mein Test läuft auf einem ATMega16, der einen 8MHz-Quarz hat. Der Quarz wird aber nicht genutzt, weil bisher keine Fuses gesetzt sind. Die einzige verwendete LED ist an Port D (&#039;&#039;&#039;PD6&#039;&#039;&#039;) angeschlossen.&lt;br /&gt;
==== Das Kabel ====&lt;br /&gt;
Das Board hat eine 9-polige Buchse(Mama), der PC hat einen 9-poligen Stecker(Papa). Das Kabel muss somit direkt durchverbunden werden (!!!). Keines der Kabel wird gekreuzt. Am besten kauft man ein 9-polig beschaltetes &amp;quot;Verlängerungskabel&amp;quot; für die serielle Schnittstelle (meins ist selbergebastelt, und 1m lang)&lt;br /&gt;
==== Prozessor erkennen ====&lt;br /&gt;
Zuerstmal wollte ich testen, ob mein selbstgelötetes Board auch funktioniert. Ohne Prozessor sind die 5 Volt da, und auch sonst keine &amp;quot;Rauchzeichen&amp;quot;. Prozessor eingesetzt, und an den PC angeschlossen.&lt;br /&gt;
&lt;br /&gt;
Unter Linux kann der Befehl &#039;&#039;&#039;uisp -dprog=dasa2 -dserial=/dev/ttyS0 -dpart=atmega16 --rd_fuses&#039;&#039;&#039; verwendet werden. Entscheidend ist die erste Zeile der Antwort. Da sollte stehen: &#039;&#039;&#039;Atmel AVR ATMega16 is found&#039;&#039;&#039;. Wenn nicht ??? --- Bei mir war einfach nur der Strom für das Board noch nicht wieder eingesteckt.&lt;br /&gt;
* &#039;&#039;&#039;uisp&#039;&#039;&#039; = Programm zum Programmieren, Lesen und Löschen des AVR&lt;br /&gt;
* &#039;&#039;&#039;-dprogr=dasa2&#039;&#039;&#039; = Angabe der Pinbelegung der seriellen Schnittstelle. Je nach Hersteller des Programmierboards werden unterschiedliche Pinbelegungen verwendet. &#039;&#039;&#039;dasa2&#039;&#039;&#039; ist die, die bei mir gepasst hat.&lt;br /&gt;
* &#039;&#039;&#039;-dserial=/dev/ttyS0&#039;&#039;&#039; = Ich verwende die Schnittstelle COM1(ttyS0). Wer COM2(ttyS1) verwendet, muss &#039;&#039;&#039;/dev/ttyS1&#039;&#039;&#039; angeben.&lt;br /&gt;
* &#039;&#039;&#039;-rd_fuses&#039;&#039;&#039; = lesen der FUSE-Bits&lt;br /&gt;
&lt;br /&gt;
==== Prozessor löschen ====&lt;br /&gt;
* &#039;&#039;&#039;uisp -dprog=dasa2 -dserial=/dev/ttyS0 -dpart=atmega16 --erase&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Programm eintippen ====&lt;br /&gt;
(oder einfach von hier kopieren)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
#define running  1  &lt;br /&gt;
&lt;br /&gt;
// Unterprogramm mit Zeitschleife fuer ATMega16 ohne Quarz&lt;br /&gt;
void delay_ms( unsigned int ms )&lt;br /&gt;
{&lt;br /&gt;
    unsigned int  i;&lt;br /&gt;
    unsigned int  j;&lt;br /&gt;
       &lt;br /&gt;
    for ( i = ms;  i;  i-- ) &lt;br /&gt;
    {&lt;br /&gt;
        for ( j = 51;  j;  j-- )&lt;br /&gt;
        {&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
    // PortD6 als Output konfigurieren&lt;br /&gt;
    DDRD |= _BV(PD6);&lt;br /&gt;
&lt;br /&gt;
    // Hauptschleife des Programms&lt;br /&gt;
    while ( running )&lt;br /&gt;
    {&lt;br /&gt;
    	// LED einschalten, und dann warten&lt;br /&gt;
        PORTD |= _BV(PD6);&lt;br /&gt;
        delay_ms( 1000 ); &lt;br /&gt;
        &lt;br /&gt;
    	// LED ausschalten, und dann warten&lt;br /&gt;
        PORTD &amp;amp;= ~_BV(PD6);&lt;br /&gt;
        delay_ms( 29000 );         &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&#039;&#039;&#039;Beim Speichern innerhalb Eclipse wird das Programm compiliert, und die Ausgabe sollte etwa wie folgt ausssehen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
**** Incremental build of configuration Debug for project AVR_Test ****&lt;br /&gt;
&lt;br /&gt;
make -k -q main-build &lt;br /&gt;
make -k pre-build main-build &lt;br /&gt;
uisp -dprog=dasa2 -dserial=/dev/ttyS0 -dpart=atmega16 --erase&lt;br /&gt;
Atmel AVR ATmega16 is found.&lt;br /&gt;
Erasing device ...&lt;br /&gt;
Reinitializing device&lt;br /&gt;
Atmel AVR ATmega16 is found.&lt;br /&gt;
 &lt;br /&gt;
Building file: ../tests/test1.c&lt;br /&gt;
Invoking: GCC C Compiler&lt;br /&gt;
avr-gcc -mmcu=atmega16 -I/usr/avr -O0 -g -Wall -c -fmessage-length=0 -otests/test1.o ../tests/test1.c&lt;br /&gt;
Finished building: ../tests/test1.c&lt;br /&gt;
 &lt;br /&gt;
Building target: AVR_Test&lt;br /&gt;
Invoking: GCC C Linker&lt;br /&gt;
avr-gcc -mmcu=atmega16 -L/usr/avr -Wl,-Map,avr.map -oAVR_Test ./tests/test1.o&lt;br /&gt;
Finished building target: AVR_Test&lt;br /&gt;
 &lt;br /&gt;
make --no-print-directory post-build&lt;br /&gt;
avr_upload&lt;br /&gt;
Atmel AVR ATmega16 is found.&lt;br /&gt;
Uploading: flash&lt;br /&gt;
 &lt;br /&gt;
Build complete for project AVR_Test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit etwas Glück blinkt jetzt die LED&lt;br /&gt;
&lt;br /&gt;
== weiter ==&lt;br /&gt;
soweit bin ich gekommen. Ich hab es sofort aufgeschrieben, weil nacher vergisst man irgendwelche Details.&lt;br /&gt;
Jeder ist aufgerufen hier weiterzumachen, wenn er mehr weiss, oder es besser gestalten kann.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
Das Debuggen von AVR-Code mit Eclipse funktioniert prinzipiell. Man muss dazu sowohl das Packet simulavr als auch den avr-gdb haben. Allerdings hat die Release-Version 6.4 des gdb noch einen Bug, der im CVS bereits behoben ist.&lt;br /&gt;
&lt;br /&gt;
Hat man beide Pakete übersetzt und installiert, so startet ein:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;simulavr -g -p 1212 -d atmega16 -P simulavr-disp&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
den Simulator.&lt;br /&gt;
&lt;br /&gt;
Unter eclipse erzeugt man ein neues Debug-Target und wählt als Debugger den avr-gdb. Dieser benötigt noch ein Startskript mit folgendem Inhalt:&lt;br /&gt;
&lt;br /&gt;
target remote localhost:1212&amp;lt;br&amp;gt;&lt;br /&gt;
load&amp;lt;br&amp;gt;&lt;br /&gt;
break main&amp;lt;br&amp;gt;&lt;br /&gt;
continue&lt;br /&gt;
&lt;br /&gt;
Das sollte reichen.&lt;br /&gt;
&lt;br /&gt;
: Wo muss man das Target hinzufügen, wo kommt das Startskript hin? Ich finde es gerade überhaupt nicht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR ]]&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=ARM_Cortex_Mikrocontroller&amp;diff=18758</id>
		<title>ARM Cortex Mikrocontroller</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=ARM_Cortex_Mikrocontroller&amp;diff=18758"/>
		<updated>2006-12-19T17:19:31Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Firma ARM stellt selbst keine Prozessoren/Controller her, sondern entwickelt nur sogenannte &amp;quot;IP-Cores&amp;quot;, die von Herstellern wie Atmel, Philips, TI lizensiert werden. Diese Hersteller ergänzen den Core um Speicher und Peripherie. Der Vorteil dieses Modells ist, dass dadurch sehr viele Prozessoren mit unterschiedlichster Ausstattung verfügbar sind, die alle mit dem selben Befehlssatz (und damit dem selben Compiler) programmierbar sind.&lt;br /&gt;
&lt;br /&gt;
Allen ARM-Cores gemeinsam ist die 32 Bit RISC-Architektur. Manche ARM-Cores besitzen neben dem 32 Bit ARM-Befehlssatz noch einen zusätzlichen, kleineren 16 Bit-Befehlssatz (&#039;&#039;&#039;Thumb&#039;&#039;&#039;-Modus, erkennbar am &#039;&#039;&#039;T&#039;&#039;&#039; in der Beizeichnung, z.B. ARM7&#039;&#039;&#039;T&#039;&#039;&#039;DMI). Der Vorteil des Thumb-Befehlssatzes ist der geringere Platzbedarf des Codes; der Nachteil ist die etwas niedrigere Geschwindigkeit. Die ARMv7-Architektur (man beachtet das &#039;v&#039;) also z.B. Controller mit Cortex-M3-Kern untersützten ausschliesslich den Thumb2-Befehlssatz. Für etwas Verwirrung sorgt die Namenskonvention. So handelt es sich beim ARM7TDMI Core um die Hardwareversion 7, realisiert wird damit jedoch ARMv4, die Architekturversion 4.&lt;br /&gt;
&lt;br /&gt;
Seit wenigen Jahren erst sind ARM-basierte Mikrocontroller erhältlich, die durch ihre einfache Beschaltung Alternativen zu 8-Bit-Controllern wie dem [[AVR]] oder dem 8051 sind. Der dafür meist verwendete Core ist der &#039;&#039;&#039;ARM7&#039;&#039;&#039;TDMI. Controllerfamilien dieser Klasse sind:&lt;br /&gt;
&lt;br /&gt;
* NXP (ehemals Philips) [[LPC2000]]&lt;br /&gt;
* Atmel [[AT91SAM]]7&lt;br /&gt;
* Analog Devices [[ADuC7xxx]]&lt;br /&gt;
* [http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionId=95&amp;amp;tabId=203&amp;amp;familyId=454 Texas Instruments] [[TMS470]]&lt;br /&gt;
* und viele weitere&lt;br /&gt;
&lt;br /&gt;
Eine weitere aktuelle Variante des ARM ist der [http://www.arm.com/products/CPUs/ARM_Cortex-M3.html ARM Cortex-M3], der für Low-End-Anwendungen und als Konkurrenz zu 8- und 16-Bit Mikrocontrollern wie dem [[AVR]] oder [[MSP430]] gedacht ist. Die bisher einzige Controllerfamilie mit diesem Kern ist die Stellaris-Serie von [http://www.luminarymicro.com/ Luminary Micro (LMI)].&lt;br /&gt;
&lt;br /&gt;
Mehr Informationen zur ARM-Architektur finden sich in der [http://de.wikipedia.org/wiki/ARM-Architektur Wikipedia], weiterführende Links in der [[Linksammlung#ARM|Linksammlung]].&lt;br /&gt;
&lt;br /&gt;
== Compiler ==&lt;br /&gt;
&lt;br /&gt;
Einer der beliebtesten Compiler für ARM-Prozessoren ist der GCC. Er kann sowohl ARM- als auch Thumb-Code erzeugen. Ein komplettes Paket mit allen benötigten Tools für Windows ist [http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm WinARM], für Linux und Mac OS X gibt es fertige Komplettpakete [http://www.mikrocontroller.net/en/arm-gcc hier]. Alternative Pakete sind [http://gnuarm.com/ GNUARM] (Linux, Windows) und [http://www.yagarto.de/ Yagarto] (Windows, mit Eclipse-Integration).&lt;br /&gt;
&lt;br /&gt;
Kommerzielle Entwicklungsumgebungen für ARM-basierte Mikrocontroller sind z.B. [http://rowley.co.uk/arm/ Crossworks ARM] (GCC-basiert, Windows und Linux), [http://www.iar.com/ewarm/ IAR Embedded Workbench for ARM] (Windows) und [http://www.keil.com/arm/ Keil/ARM] (Windows).&lt;br /&gt;
&lt;br /&gt;
== [[JTAG]] ==&lt;br /&gt;
&lt;br /&gt;
Alle ARM-basierten Prozessoren verwenden ein einheitliches JTAG-Interface, über das Debugging und Speicherzugriff erfolgen kann. Nicht standardisiert sind allerdings die Verfahren zum Beschreiben des Flash-ROMs, deshalb muss man beachten ob die verwendete JTAG-Software Programmierroutinen für den jeweiligen Controller besitzt.&lt;br /&gt;
&lt;br /&gt;
Ein einfacher JTAG-Adapter für den Parallelport ist der &amp;quot;Wiggler&amp;quot;-kompatible, den man selbst bauen kann ([http://www.hygrand.com/Service/BBSUpImage/C1_254045WigglerJTAG.JPG Schaltplan]) oder z.B. hier im [http://shop.mikrocontroller.net/ Shop] für &amp;amp;euro; 20,90 bestellen kann. Als Software lässt sich unter Windows und Linux [http://openocd.berlios.de/ OpenOCD] (zusammen mit [[GDB]]) oder [http://rowley.co.uk Crossworks ARM] verwenden. &lt;br /&gt;
&lt;br /&gt;
Für USB gibt es [http://shop.mikrocontroller.net/ hier] einen ebenfalls OpenOCD-kompatiblen JTAG-Adapter zum Preis von € 69,90.&lt;br /&gt;
&lt;br /&gt;
Als Alternative zum Beschreiben des Flash über JTAG ist ein oft serieller [[Bootloader]] im Controller enthalten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== siehe auch ==&lt;br /&gt;
* [[Linksammlung#ARM|Linksammlung (Abschnitt ARM)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ARM]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Impact_mask&amp;diff=16274</id>
		<title>Impact mask</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Impact_mask&amp;diff=16274"/>
		<updated>2006-07-27T08:48:23Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: /* Fehlermeldung mit angewählten verify */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Probleme und Lösungen für Xilinx Download tool (impact)==&lt;br /&gt;
=== Fehlermeldung mit angewählten verify ===&lt;br /&gt;
&#039;&#039;&#039;Problem:&#039;&#039;&#039;&lt;br /&gt;
Beim FPGA Programmieren mit aktivierten Verify bricht die FPGA Programmierung mit folgender Meldung ab:&lt;br /&gt;
&lt;br /&gt;
 Bitstream:2 - The input file&lt;br /&gt;
 &amp;quot;C:\Xilinx_Projekte\Starterkit\tutorial\counter.msk&amp;quot; does not&lt;br /&gt;
 exist.  Please check that the specified location is correct and that&lt;br /&gt;
 the bitstream was succesfully created.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lösung:&#039;&#039;&#039;&lt;br /&gt;
*Verify deaktivieren, oder&lt;br /&gt;
*Bitgen erzeugt das für den Vergleich (Verify) nötige Maskfile (*.msk):&lt;br /&gt;
&lt;br /&gt;
Im Projektmanager ISE6.3  ist&lt;br /&gt;
*beim Punkt Generate Programming file&lt;br /&gt;
*properties anzuwählen&lt;br /&gt;
*dort rechts oben &amp;quot;Readback Options&amp;quot; auswählen&lt;br /&gt;
*hier Readback anschalten (oberen beide Zeilen) dann kann man ein&lt;br /&gt;
Haken bei &amp;quot;´Create mask file&amp;quot; setzen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Xilinx_ISE:_Hinweise_zu_Versionen&amp;diff=16273</id>
		<title>Xilinx ISE: Hinweise zu Versionen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Xilinx_ISE:_Hinweise_zu_Versionen&amp;diff=16273"/>
		<updated>2006-07-27T08:47:19Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: /* XILINX ISE 8.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Xilinx_ISE:_Hinweise_zu_Versionen&amp;diff=16272</id>
		<title>Xilinx ISE: Hinweise zu Versionen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Xilinx_ISE:_Hinweise_zu_Versionen&amp;diff=16272"/>
		<updated>2006-07-27T08:46:13Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: /* Zerstörunge von VHDL-Files in Projekten von Vorgängerversionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Xilinx_ISE:_Hinweise_zu_Versionen&amp;diff=16271</id>
		<title>Xilinx ISE: Hinweise zu Versionen</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Xilinx_ISE:_Hinweise_zu_Versionen&amp;diff=16271"/>
		<updated>2006-07-27T08:46:01Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: /* =Änderungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Kategorie:FPGA_und_Co&amp;diff=16270</id>
		<title>Kategorie:FPGA und Co</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Kategorie:FPGA_und_Co&amp;diff=16270"/>
		<updated>2006-07-27T08:45:36Z</updated>

		<summary type="html">&lt;p&gt;131.188.149.16: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>131.188.149.16</name></author>
	</entry>
</feed>