Forum: Mikrocontroller und Digitale Elektronik [gesucht] Olimex SAM7-EX256 Minimalbeispiel


von Benjamin L. (pilsmoehre)


Lesenswert?

Hallo Zusammen,

nachdem ich lange am suchen und vergleichen war habe ich mich für das 
SAM7-EX256 Board von Olimex entschieden. Im Moment bin ich auf der Suche 
nach einem Minimalbeispiel für das Board.
Bitte versteht mich nicht falsch. Ich habe schon einige Erfahrung mit 
uCs, allerdings nur mit einem C166-Board unter Keil uVision (habe daher 
Null Erfahrung mit GCC, Makefiles, Linking).

Für Olimex-Board würde ich allerdings gerne WinArm, Yagarto und für den 
Anfang gerne die Kommandozeile verwenden. Doch leider suche ich mir seit 
Stunden die Finger wund nach einem wirklich minimalem Ausgangpunkt für 
das Board.

- Das Beispiel von Olimex kann nicht mit GCC kompiliert werden (keine 
Angabe über die verwendete IDE, kein Makefile, keine Informationen, wie 
es gelinkt werden soll
- Die Beispiele von Yagarto ("Using Open Source Tools for AT91SAM7S 
Cross Development revision C" von der Atmel-Seite)
- und die Beispiele von WinArm beziehen sich leider nicht auf das Board

und ich weiß nicht, an welcher Stelle ich eigentlich anfangen müsste, um 
die Projekte anzupassen.

Was suche ich also genau?

Ein Minimalbeispiel bis hin zu:
1
...
2
init();
3
...
4
void main (void)
5
  while(1){
6
    // put your Code here
7
  };

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ist zwar kein Minimalbeispiel, aber ein funktionierender Ausgangspunkt:
http://www.mikrocontroller.net/articles/Olimex_AT91SAM7X256-Board_und_Ethernut

von Benjamin L. (pilsmoehre)


Lesenswert?

Da weiß ich überhaupt nicht, was zu tun wäre.
Ethernut installiert, die Änderungen aus dem Wikiartikel eingetragen 
erhalte ich das hier auf der Ausgabe:
1
13:05:55: Nut/OS Configurator Version 1.3.1
2
13:05:55: Linked to wxWidgets 2.6.3
3
13:05:55: Running on Windows XP (build 2600, Service Pack 2)
4
13:05:55: Working in c:\ethernut-4.2.1\nut\conf
5
13:05:59: Loading ../conf/repository.nut
6
13:05:59: Loading C:/ethernut-4.2.1/nut/conf/at91sam7x-ek_eigene.conf
7
13:05:59: OK
8
13:06:05: Creating Makefiles for (Select) in nutbld
9
13:06:05: Creating header files in nutbld
10
13:06:05: OK
11
13:06:06: ----- Running 'make clean' -----
12
13:06:06: Located c:\ethernut-4.2.1\nut\tools\win32\make.exe
13
make: *** No rule to make target `clean'.  Stop.
14
13:06:06: ----- 'make clean' failed with error 2 -----
15
13:06:11: ----- Running 'make all' -----
16
13:06:11: Located c:\ethernut-4.2.1\nut\tools\win32\make.exe
17
make: *** No rule to make target `all'.  Stop.
18
13:06:11: ----- 'make all' failed with error 2 -----
19
13:06:12: ----- Running 'make install' -----
20
13:06:12: Located c:\ethernut-4.2.1\nut\tools\win32\make.exe
21
make: *** No rule to make target `install'.  Stop.
22
13:06:12: ----- 'make install' failed with error 2 -----

Hier weiß ich dann auch wieder nicht, wo ich ansetzen muss, um 
weiterzukommen.

von Sebastian (Gast)


Lesenswert?

Also, wenn du dich zum 1. mal in die Welt von ARM bewegst ;-), gibt es 
ein sehr gutes Buch, dass auch in pdf-Form kostenlos erhältlich ist (in 
einer druckbaren Version ist es nicht mehr kostenlos - gebunden kostet 
es noch mal etwas mehr). Geht zwar nicht um nen Atmel-Controller, wie 
bei dir, aber ist sehr zu empfehlen:
Das Hitex-Buch über ARM-7 based uController von Philips findest du hier. 
Da dein Sam7 ja auch ein ARM7 ist, ist es meiner Meinung nach ein Blick 
wert.

http://www.cecs.csulb.edu/~brewer/347/lpc-ARM-book_srn.pdf

von Benjamin L. (pilsmoehre)


Lesenswert?

Die beiden Programme, die im Shop aufgelistet 
sind(http://www.olimex.com/dev/sam7-ex256.html), wurden mit dem IAR 
Workbench erstellt. Doch da tauchen gleich die nächsten Probleme auf.

Bei dem ersten Projekt ist die erforderliche Headerdatei nicht im 
Verzeichnis, und wenn ich mir die entsprechende besorge, bricht der 
Compiler immer noch mit einer Fehlermeldung ab.
Das RTOS-Projekt lässt sich auch nicht fehlerfrei kompilieren.

Hat denn niemend einen lauffähigen Startpunkt für das Board?

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Im Anhang findest du die lwIP_Demo_Rowley_ARM7 von FreeRTOS, angepasst 
für das Olimex-Board. FreeRTOS 4.4.0 runterladen, Datei aus dem Anhang 
in den Demo-Ordner entpacken und make eingeben.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


von Benjamin L. (pilsmoehre)


Lesenswert?

Ok, das RTOS-Projekt lässt sich fehlerfrei kompilieren.
Bei Atmel habe ich die Application Note "Getting Started with AT91SAM7X 
Microcontrollers" gefunden.

Ich versuche mal beides so zu verwurschteln, dass mein gewünschtes 
Startprojekt dabei herauskommt.

Danke so weit mal.

von Benjamin L. (pilsmoehre)


Angehängte Dateien:

Lesenswert?

So,

ich habe die Application Note "Getting Started with AT91SAM7X
Microcontrollers" von Atmel so weit abgeändert, dass nur noch das 
nötigste/sinnvollste darin ist.

Wer will kann hier natürlich seinen Senf dazugeben.

Gruß

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Danke, ich habe die Datei im Artikel verlinkt:
Olimex AT91SAM7X256-Board SAM7-EX256

von Harald Kipp (Gast)


Lesenswert?

1
13:06:05: Creating Makefiles for (Select) in nutbld
Unter Edit/Settings auf der 2ten Notebookseite die Platform wählen.
Besser die letzte Beta 4.3.3 für SAM7 verwenden.

von Dennis L. (Gast)


Lesenswert?

Hi,

ich habe ein Problem ich bekomme es irgendwie nicht hin das das 
angepasste LWIP Demo mit FreeRTOS läuft.

das Minimal beispiel läuft ohne probleme und auch das von der Olmex 
seite mit dem LCD per tasten an und ausschalten läuft aber wenn ich das 
LWIP demo aufs Board Flashe bekomme ich keine Netzwerk verbindung die 
LED´s am RJ45 Port blinken nur.

ich setzte die Entwicklungs umgebung ein die beim Olimex ARM-USB-OCD 
dabei war.

mein Board ist Rev.B. hat jemand einen Tipp für mich wie ich es zum 
laufen bekomme ??

Gruß
Dennis

von Enttäuschter (Gast)


Lesenswert?

Also, nach zahlreichen AVR Projekten habe auch ich mir so ein Olimex 
SAM7-EX256 zugelegt. Es ist nun bereits der 3. Anlauf auch nur 
irgendetwas was damit zu tun hat zum laufen zu bekommen, ich hatte es 
jeweils nachdem nach Stunden nicht mal ein Primitivprojekt dafür erzeugt 
werden konnte abgeblasen. 1000 Webseiten mit 1000 Codeschnipseln etc, wo 
nix funktioniert oder zusammenpasst, auf der mitgelieferten CD zu dem 
Board sind nur Codebeispiele für die LPC Dinger drauf... kotz. Es ist 
wirklich deprimierend!

Also der 3. Anlauf sah bisher folgendermaßen aus:

- WinARM installiert (und das PATH Gedöne gesetzt)

- Das Minimalbeispiel heruntergeladen:
http://www.mikrocontroller.net/attachment/25724/Olimex_SAM7_EX256_StartupMinimal_2007.08.17.zip

 Verzeichnis von C:\temp

20.11.2007  20:07    <DIR>          .
20.11.2007  20:07    <DIR>          ..
17.08.2007  20:11             8.562 cstartup.S
17.08.2007  20:11               623 elf32-littlearm.lds
20.11.2007  20:07    <DIR>          include
17.08.2007  20:11             7.502 lowlevel.c
17.08.2007  20:11             6.795 main.c
20.11.2007  22:02             3.865 Makefile
17.08.2007  20:11                85 prog_flash.bat
17.08.2007  20:11               655 prog_flash.tcl
17.08.2007  20:11                84 prog_sram.bat
17.08.2007  20:11               460 prog_sram.tcl
               9 Datei(en)         28.631 Bytes
               3 Verzeichnis(se), 44.071.317.504 Bytes frei

C:\temp>make
del /F *.o *.bin *.elf *.map
/usr/bin/sh: del: command not found
make: *** [clean] Error 127

Hm, woher habe ich das nur gewusst dass das nicht hinhaut ?



Also, nächster Versuch. Das Projekt hier runtergeladen.
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/at91sam7s_e1_20060825.zip
make, und siehe da, es wird compiliert und gelinkt, Wahnsinn, ich kann 
es nicht glauben, unfassbar. Jetzt habe ich ein absolut Nutzloses 
Compilat, weil ja falscher Controller. Die Headerdatei für den 256er ARM 
ist sonstwo.
Na gut, erstmal zur Seite legen...



So, nächster Versuch: Ich hole mir RTOS, gehe auf den Demoordner und 
versuche einfach mal das Projekt
C:\FreeRTOS\Demo\ARM7_AT91FR40008_GCC
zu kompilieren. Und, uuuuuund ? klaro, geht natürlich nicht:

C:\FreeRTOS\Demo\ARM7_AT91FR40008_GCC>make
arm-elf-gcc -c -Wall -D  -D GCC_AT91FR40008 -I. -I../../Source/include 
-I../Common/include  -mcpu=arm7tdmi -T -Wcast-align  -fomit-fram
e-pointer ../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c -o 
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.o
arm-elf-gcc: GCC_AT91FR40008: No such file or directory
<command line>:1:1: error: macro names must be identifiers
In file included from ../../Source/include/FreeRTOS.h:53,
                 from 
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:53:
../../Source/include/portable.h:222: error: expected '=', ',', ';', 
'asm' or '__attribute__' before '*' token
../../Source/include/portable.h:235: error: expected '=', ',', ';', 
'asm' or '__attribute__' before 'xPortStartScheduler'
In file included from ../../Source/include/task.h:47,
                 from 
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:54:
../../Source/include/list.h:83: error: expected specifier-qualifier-list 
before 'portTickType'
../../Source/include/list.h:93: error: expected specifier-qualifier-list 
before 'portTickType'
../../Source/include/list.h:104: error: expected ':', ',', ';', '}' or 
'__attribute__' before 'uxNumberOfItems'
In file included from 
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:54:
../../Source/include/task.h:75: error: expected specifier-qualifier-list 
before 'portBASE_TYPE'
../../Source/include/task.h:217: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskCreate'
../../Source/include/task.h:312: error: expected ')' before 
'xTicksToDelay'
../../Source/include/task.h:371: error: expected ')' before '*' token
../../Source/include/task.h:418: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'uxTaskPriorityGet'
../../Source/include/task.h:460: error: expected ';', ',' or ')' before 
'uxNewPriority'
../../Source/include/task.h:580: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskResumeFromISR'
../../Source/include/task.h:770: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskResumeAll'
../../Source/include/task.h:786: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskGetTickCount'
../../Source/include/task.h:800: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'uxTaskGetNumberOfTasks'
../../Source/include/task.h:827: error: expected ';', ',' or ')' before 
'*' token
../../Source/include/task.h:848: error: expected ';', ',' or ')' before 
'*' token
../../Source/include/task.h:861: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'ulTaskEndTrace'
../../Source/include/task.h:901: error: expected declaration specifiers 
or '...' before 'portTickType'
../../Source/include/task.h:918: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskRemoveFromEventList'
../../Source/include/task.h:957: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskCheckForTimeOut'
../../Source/include/task.h:969: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'xTaskGetSchedulerState'
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:61: error: expected 
'=', ',', ';', 'asm' or '__attribute__' before 'ulCriticalNest
ing'
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c: In function 
'vPortISRStartFirstTask':
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:79: warning: 
implicit declaration of function 'portRESTORE_CONTEXT'
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c: In function 
'vPortYieldProcessor':
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:99: warning: 
implicit declaration of function 'portSAVE_CONTEXT'
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c: In function 
'vPreemptiveTick':
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:144: error: 
expected '=', ',', ';', 'asm' or '__attribute__' before 'ulDummy'
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:144: error: 
'ulDummy' undeclared (first use in this function)
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:144: error: (Each 
undeclared identifier is reported only once
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:144: error: for 
each function it appears in.)
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:147: error: 
'portTIMER_REG_BASE_PTR' undeclared (first use in this function)
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c: In function 
'vPortEnterCritical':
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:216: error: 
'ulCriticalNesting' undeclared (first use in this function)
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c: In function 
'vPortExitCritical':
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:221: error: 
'ulCriticalNesting' undeclared (first use in this function)
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:221: error: 
expected ')' before 'portLONG'
../../Source/portable/GCC/ARM7_AT91FR40008/portISR.c:228: error: 
expected ')' before 'portLONG'
make: *** [../../Source/portable/GCC/ARM7_AT91FR40008/portISR.o] Error 1





Also, nochmal ein Projekt von mthomas gezogen, der ehrenwerte Mann weis 
offenbar was er macht, ist fähig seine Sachen zu dokumentieren (obgleich 
mich das alles gerade noch erschlägt) und stellt keine unausgegorene 
Grütze zum download bereit. Aaaaalso:

AT91SAM7S256 and FreeRTOS Example application
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/at91sam7s256_FreeRTOS_Spaude_20060925.zip
make: Ja Wahnsinn, auch das wird erzeugt, ich ejakuliere!

So, wie ich das Beispiel nun so abändere dass ich eine dämliche LED auf 
dem Board blinken lasse kann (ach herje, ist ja keine drauf. Na 
vielleicht dann das LCD Backlight oder sowas) werde ich wohl irgendwie 
herausbekommen.

So, wenn ich das auf die Reihe bekommen habe, habe ich ein wohl "Dings", 
bei dem einen Projekt war das main.hex, bei dem anderen main.bin, das 
ich irgendwie in diese schwarze Plastikdings auf der Platine kriegen 
muss. Normalerweise würde ich sagen das .bin binary ist, und .hex Intel 
Hex, zumindest war das mein WinAVR so, aber mir düngt... egal

Nun habe ich auch noch von Olimex einen USB Tiny JTAG Programmer. Wie 
kann ich nun meinem Rechner befehlen dass er mir mein hex/bin mit Hilfe 
dieses Gerätes auf mein Board bekommt ?




So, erstmal genug für heute, sorry für den langen "aggresiven" zynischen 
Inhalt, aber meine Nerven sind mittlerweile etwas strapaziert... 
Vielleicht erbarmt sich ja trotzdem jemand mir ein paar Tips zu geben. 
Einen 4. Anlauf  werde ich wohl aus meiner momentanen emotionalen 
Verfassung heraus verhindern, indem das Board als Weitwurfsportartikel 
seinen Einsatzzweck ändern wird.

Grüße

(sehr) Enttäuschter

von Marius S. (lupin) Benutzerseite


Lesenswert?

> So, erstmal genug für heute, sorry für den langen "aggresiven" zynischen
> Inhalt, aber meine Nerven sind mittlerweile etwas strapaziert...

Die gleichen Erfahrungen habe ich auch gemacht... Habe vorher mit AVRs 
experimentiert und die WinAVR Toolchain hat mir nie Probleme gemacht, da 
man sich um das meiste nicht kümmern braucht.

Ich habe die Yagarto IDE installiert und bin enttäuscht wie 
"zusammengebastelt" das ganze funktioniert (vor allem der Debugger). 
Außerdem habe ich so meine Probleme ein vernünftiges Makefile zu 
finden/bauen.

Einfaches runter laden und mal eben kompilieren ist meistens nicht drin. 
Ich denke kommerzielle Toolchains hätten da große Vorteile.

Oder vielleicht liegt es auch einfach nur an Windows (bzw. die 
Windows-User)...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Schau dir das an, da hast du drei verschiedene Beispielprojekte:
Olimex AT91SAM7X256-Board SAM7-EX256

Von denen hast du gerade mal eines ausprobiert, und bei der ersten 
Kleinigkeit das Handtuch geschmissen:
> del /F *.o *.bin *.elf *.map
> /usr/bin/sh: del: command not found

Was macht diese Zeile im Makefile? Wie könnte man sie korrigieren, oder 
kann man sie vielleicht erstmal einfach auskommentieren? Wenn du solche 
Fragen nicht beantworten kannst oder willst, dann brauchst du mit den 
Open-Source-Tools (das nächste wäre OpenOCD) gar nicht erst weiter 
machen. Kauf dir lieber Crossworks oder IAR, da geht das alles einfacher 
- kostet dafür aber ein paar Euro.

von tom (Gast)


Lesenswert?

Ich kann Marius Schmidt und Enttäuschter nur zu Stimmen, die 
Dokumentation und die Wiki-Einträge hier und auch generell im Netz sind 
das reinste Flickwerk, ein vernünftiges Tutorial wäre sicher mal 
angebracht...

@Andreas Schwarz:
Wenn man mit make und dessen Aufbau noch nix zu tun hatte, dann lassen 
Anfänger lieber mal die Finger von Änderungen. Außerdem weiß man als 
Anfänger noch nicht mal wie man in make auskommentiert.
Als Anfänger kann man nur so gut sein wie sein Lehrer, Tutor bzw. die 
Doku! Oder weshalb hat man sich z.B. in der Schule über die Lehrer 
aufgeregt, meist nur weil sie den Stoff nicht Vernünftig vermitteln 
konnten, oder?

Mich hält es übrigens immer noch davon ab mit den ARM anzufangen, ich 
will mein Geld nicht unbedingt in den Sand setzen

von etwas weniger Enttäuschter (Gast)


Lesenswert?

@Andreas

So, bin inzwischen etwas "runtergekommen". Vielen Dank für den 
"Seitenhieb", das hat mir wohl ganz gut getan ;-) Mit dem Kaufen von 
Crossworks etc. hätte ich keine Probleme, neben Delphi, Eagle, Paradigm 
C++ uvm. macht das das Kraut auch nicht mehr fett. Aber ich denke dass 
selbst die die sich da durchgezwungen haben zugeben müssen dass das 
ganze schon noch ziemlich unausgegoren und durcheinander ist, aber das 
war ja bei WinAVR wohl auch mal so ähnlich. Naja, also mal weiter sehen. 
Sollte diesmal die Gedult ausreichen werde ich, wenn es die Zeit 
zulässt, ein neues "Getting startet..." schreiben, wäre auch nicht mein 
erster Beitrag zu den Artikeln oder zur Codesammlung.
Bis dahin hoffe ich hier noch auf etwas Unterstützung.
Jedenfalls finde ich es für den Start am Schwierigsten den Überblick zu 
wahren was was ist und was mit was zusammenarbeitet, weil das ganze 
Zeugs auch recht durcheinander geschmissen ist.

Noch ein paar Kommentare:

>Was macht diese Zeile im Makefile? Wie könnte man sie korrigieren, oder
>kann man sie vielleicht erstmal einfach auskommentieren?
Die soll eigentlich alle o/bin/elf/map Dateien löschen, so das alles 
komplett neu erzeugt wird. Wenn man mal in seine eigenen 
(funktionierenden) makefiles reinschaut kommt man drauf dass das mit 
"rm" gehen könnte. Warum hier del benutzt wird weis ich nicht, 
vielleicht anderes make ?

>Oder vielleicht liegt es auch einfach nur an Windows (bzw. die
>Windows-User)...
Bitte keine Pauschalisierungen/Wertungen, sonst bricht hier wieder so 
ein sinnbefreiter Glaubenskrieg aus.

Um noch eine konkrete Frage loszuwerden:
Womit kann ich mit meinem JTAG Tiny USB Apparat nun mein Comilat in den 
ARM auf dem o.g. Board bringen ? Da gibt's warscheinlich wieder 95 
Möglichkeiten, wie es bei AVR auch Programmer & Programmersoftware gibt, 
aber ein Hinweis wie "Nimm Peng3000, das funktioniert mit Deinem 
Programmer und funktioniert" würde gerade schon helfen.

E

von Joachim Müller (Gast)


Lesenswert?

Zunächstmal würde ich auch gleich mit RTOS und Pipapo anfangen, ein 
neues Board bzw. eine neue Programmierumgebung zu testen :-))
Wie wär's mit "Hello World"?
Zum Zweiten sollte man sich schon mal etwas theoretisch mit den 
Kontrollern befassen. Dann würde man merken, dass AT91SAM7S64 /S256 
/X128 und /X256 prinzipiell schonmal registerkompatibel sind (bis auf 
die Peripherie, die einzelne Kontroller nicht haben..).
Also können für einfache Tests die gleichen .h Dateien genommen werden. 
Nur die Ports müssen umgebogen werden.
Habe für erste Versuche mit S256 bzw. X128 auch das S64.h File genommen.

Das Problem, dass sich die meisten "besseren" Demos nicht kompilieren 
lassen, habe ich auch. Das liegt daran, dass die für Keil oder IAR 
geschrieben wurden und deren Makefiles nicht ohne weiteres von GCC 
kapiert werden.

Wegen "WinAVR ist einfach, aber Yagarto kompliziert":
Warum nimmst Du nicht WinARM. Verhält sich fast 1:1 wie WinAVR.

Zum Programmieren über JTAG gibts nur OpenOCD. Ist relativ einfach zu 
bedienen. Allerdings benutze ich das nur zum Flashen, nicht als 
Debugger.

von etwas weniger Enttäuschter (Gast)


Lesenswert?

>Das Problem, dass sich die meisten "besseren" Demos nicht kompilieren
>lassen, habe ich auch. Das liegt daran, dass die für Keil oder IAR
>geschrieben wurden und deren Makefiles nicht ohne weiteres von GCC
>kapiert werden.

Wenn aber der Ordner in dem der Kack drin ist ".....GCC" heißt kann man 
doch davon ausgehen dass da kein Keil oder IAR Gedöne drin ist. Oder 
beschriftest du Deinen Chillistreuer mit "Puderzucker" ?

X

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Es gibt viele verschiedene ARM-GCC-Toolchains, und gerade unter Windows 
kann das Verhalten sehr unterschiedlich sein, je nachdem welche Tools in 
welcher Version enthalten sind und womit sie kompiliert sind. Deshalb 
kann es vorkommen dass man auch mal selber etwas anpassen muss.

> Wenn man mit make und dessen Aufbau noch nix zu tun hatte, dann lassen
> Anfänger lieber mal die Finger von Änderungen. Außerdem weiß man als
> Anfänger noch nicht mal wie man in make auskommentiert.

Wenn es daran schon scheitert, wie will der Anfänger mit komplexen 
Dingen wie ARM-Interrupts fertigwerden? Dafür gibt es keine 
Einsteiger-Tutorials.

> Als Anfänger kann man nur so gut sein wie sein Lehrer, Tutor bzw. die
> Doku! Oder weshalb hat man sich z.B. in der Schule über die Lehrer
> aufgeregt, meist nur weil sie den Stoff nicht Vernünftig vermitteln
> konnten, oder?

Das hier ist keine Schule, du musst dir den Stoff selber beibringen.

von Enttäuschter (Gast)


Lesenswert?

>Das hier ist keine Schule, du musst dir den Stoff selber beibringen.

Das geht aber bei solchen Sachen auch nicht durch ausprobieren, sondern 
durch lesen. Und was alles für ein unlogischer unausgegorener Kack zu 
lesen ist macht die Sache auch nicht unbedingt einfacher.

Naja, ich kann auf jedenfall inzwischen schon mal das ganze Zeugs 
kompilieren, u.a. dieses Minimalbeispiel. Und nun muss das ja wohl 
irgendwie in das schwarze Ding auf dem Board.
Aaaaalso, nachdem ja in dem Minimalbeispielbatzen eine Batch Datei zum 
hochladen dabei ist (Vermutung) schaut man da mal rein: "sam-ba". Gut, 
googeln, scheint ein USB Bootloader für den ARM zu sein. Richtig ? Das 
setzt voraus, dass man das Board via USB mit dem Rechner verbindet. 
Also, Board mit dem Rechner verbinden: Pustekuchen, war ja wieder klar. 
"USB Gerät wurde nicht erkannt". Das sagt Windows dann wenn ein USB 
Gerät eingesteckt wird dass zum USB Host per Pull Widerstand sagt dass 
ein Gerät angeschlossen wurde, aber das device ansonsten nichts macht. 
Vermutlich ist auf dem Board kein USB Bootloader installiert; beim 
einschalten zeigt das Display ein Bildchen und man kann mit den Tasten 
ein paar Töne erzeugen (out-of-the-box von Olimex).

Also gut, wir haben uns ja genau dafür einen Tiny USB ARM Programmer 
gekauft. Andreas hat mir ja schon angedroht dass man sich nach dem 
Rumschlagen mit der Toolchain die Open OCD Geschichte kommt. Und das 
klingt nicht lustig.
Also, der man von Heute googelt ja erstmal ne Runde, was natürlich bei 
dem Thema zu noch größerer Verwirrung führt. Nun haben wir die "Fetzen" 
WinARM (damit habe ich wohl alles compiliert bekommen) bei dem openocd 
dabei ist, YAGARTO, den Kack der auf der CD ist die bei dem Board dabei 
war (was ist das eigentlich alles ?! man installiert die CD, und auf dem 
Rechner ist Eclipse + Zubehör, openocd (nochmal?!), und einen Tiny USB 
JTAG rüberschiebe kasten.
Ach ja, wenn ich den JTAGTiny an das Board anschliesse startet die 
Software auf dem Board nicht, LCD bleibt dunkel. Soll das so sein ?

So, die Frustrationsgrenze ist wieder fast überschritten, vielleicht 
erbarmt sich ja jemand und gibt mir einen Fingerzeig wie's nun 
weitergeht.

Dann noch ein paar klärende Fragen:
- Was unterscheidet sich an den Toolchains von WinARM und YAGARTO ?
- Welche Toolchain bringt die Olimex CD eigentlich mit ? Ist bestimmt 
noch eine andere, was ist dann an der anders ?
Ist das nur eine Geschmacksfrage ? Wenn ja, ich persönlich neige dazu 
nicht unbedingt das einfachste, sondern das "verbreitetste" zu wählen, 
aber welche ist das hier ?



So, in der Hoffnung auf ein paar Hinweise entnervt auf den Sessel 
zurückziehend

Hannes


Gruß
Stefan

von Enttäuschter (Gast)


Lesenswert?

Also es weiß keiner weiter, wie man ein kompiliertes Programm mit dem 
o.g. Programmer in das o.g. Board bekommt ? Puh, was sagt mir das ?

Gruß
Stefan Hannes

von Chris J. (virus89)


Angehängte Dateien:

Lesenswert?

1
SAM7X256 Board mit Samba flashen:

-  AT91-ISP v1.10.exe von hier: 
http://www.atmel.com/dyn/resources/prod_documents/Install%20AT91-ISP%20v1.10.exe
 runterladen und installieren
-  Board über USB-Kabel mit Rechner verbinden (Meldung: unbekannte 
Hardware     gefunden)
-  Jumper zur Wahl der Spannungsversorgung [USB/EXT] entfernen
-  ERASE Jumper reinstecken
-  USB/EXT Jumper bei USB reinstecken (oder auch EXT wenn mit externem 
Netzteil)
-  ERASE Jumper entfernen (nach kurzer Zeit macht der Computer das 
Geräusch das Hardware gefunden wurde und eventuell erscheint ein Popup 
mit AT91xxxx Test Board Treiber installiert oder ähnliches)
-  Doppelklick auf  SAM-BA v2.6  (sollte sich auf dem Desktop oder in 
der Programmliste befinden), in dem Fenster \usb\ARM0  (kann abweichen) 
und SAM7X256-EK auswählen und auf Connect klicken
-  In dem Tab, Reiter oder der Registerkarte (wie auch immer) Flash 
auswählen (sollte standartmäßig schon ausgewählt sein)
-  In der GroupBox <<Download / Upload File>> bei <<Send File Name>> auf 
den Ordner Klicken und in dem openFileDialog die *.bin Datei auswählen 
die gefläsht werden soll
(die Olimex Boards werden mit 2 verschieden Displays ausgeliefert, auf 
einem sollte ein Kleber mit GE8 und auf dem Anderen mit GE12 sein (war 
bei mir nicht drauf deshalb hab ich einfach mit GE8 probiert und es hat 
funktioniert), jetzt einfach von der Olimex Seite 
http://www.olimex.com/dev/sam7-ex256.html die Demo runder laden die zu 
eurem Display passt, für das GE8 Display hab ich mal die Demo mit einem 
anderen Bild als *.bin rangehangen (siehe oben))
-  Wenn ihr die Datei ausgewählt habt, dann auf den Button <<Send File>> 
klicken
-  Es kommt dann nach kurzer Zeit ein Fenster mit „Do you want to lock 
involved region(s)…?“, ich hab keine Ahnung was das bedeutet, ich hab 
einfach immer auf <<No>> geklickt und es hat funktioniert
-  Dann in der GroupBox <<Scrips>> „Boot from Flash (GPNVM2)“ auswählen 
(sollte standartmäßig der schon ausgewählt sein) und auf den Button 
<<Execute>> klicken
-  Fertig
-  Samba schließen, auf den RST (Reset) Button auf dem Board drücken und 
die Demo startet (nach bissel Übung sollte das auch in 5-10 sec zu 
schaffen sein)
1
Zur Demo:
Quellcode gibt es hier: http://www.olimex.com/dev/sam7-ex256.html
Als Copiler nutze ich den IAR Embedded Workbench for ARM, v. 4.42A, 
„Evaluation Version“, hier: 
http://supp.iar.com/Download/SW/?item=EWARM-EVAL-442A  gibt es kostenlos 
die 32 Tage Testversion oder hier: 
http://supp.iar.com/Download/SW/?item=EWARM-KS32-442A eine auf 32KB 
beschränkte Version, und wem das nicht reicht muss halt mal ein bisschen 
bei Google.cn suchen, ich würde gern WinARM nutzen aber irgendwie 
funktioniert das nicht unter Vista
USART  Baud: 9600 (nach einem Reset werden par Sachen zum Testen 
gesendet (Temperatur… siehe Quellcode))
1
Meine Frage:
-  wie flashe ich das Board mit dem USB-JTAG-Tiny von Olimex (unter Suse 
10.3 oder Vista), unter Vista hab ich schon die Treiber, eclipse, 
yagarto, openocd und alles was sonst noch so auf der Olimex CD (24. 
‎September ‎2007) war installiert, am liebsten wär mir ne .bat Datei wo 
ich nur noch den Pfad zur .bin Datei, und was sonst noch so nötig ist 
eintragen muss

von Christoph K. (jakrit)


Lesenswert?

Ich bin gerade dabei die Ethernet Schnittstelle des hier besprochenen 
Boards in Betrieb zu nehmen. Dazu verwende ich das wIP_Demo_Rowley_ARM7 
aus FreeRTOS 4.4.0. mit den vom Andreas gemachten Erweiterungen.

Leider scheint die Kommunikation zur PHY nicht zu funktionieren. Beim 
auslesen der PHY ID wird nur 0xffff zurückgegeben. Hat vielleicht jemand 
von euch eine Lösung für das Problem ?

Viele Grüße
jakrit

von Chris J. (virus89)


Angehängte Dateien:

Lesenswert?

Ich hoffe ich bin nicht zu spät, war gerade am aussortieren meiner 
Bookmarks

Im Anhang ist meine Version, hab gerade noch mal compiliert und 
geflasht, sollte funktionieren, ich hatte damals die Demo von Andreas 
1:1 mit dem Original verglichen und dann die notwendigen Änderungen bei 
FreeRTOSV5.0.2 gemacht.

Also den Ordner aus dem Archiv im Anhang einfach ins Demo Verzeichnis 
kopieren und make eingeben. In dem Ordner befindet sich eine Datei 
rtosdemo.bin die sich zum Testen einfach über SAM-BA flashen lässt (um 
andere Fehler auszuschließen). Ich hoffe es lässt sich compilieren 
(erstmal rtosdemo.bin raus kopieren und make clean ausführen), ich hatte 
damals ein eclipse Projekt daraus gemacht um den Debugger leichter 
nutzen zu können.

Ip steht in SAM7_EMAC.h momentan 192.168.1.111 gateway 192.168.1.100 
nmask 255.255.0.0
(gekreutztes netzwerkkabel, ifconfig eth0 up
, ifconfig eth0 192.168.1.100)

Im Webbrowser sollte dann so ne Art Tankmanager erscheinen.

Wenn du unter Linux arbeitest kann ich dir das Programm Meld (GTK) 
empfehlen, einfach das original FreeRTOS entpacken und das von Andreas 
und dann die beiden Verzeichnisse vergleichen lassen.
Falls du unter Win arbeitest kannst du dir jeweils immer zwei Dateien 
mit Notepad++ vergleichen lassen.

Falls es dir hauptsächlich um den Webserver geht kann ich dir nur 
enthernut empfehlen, das bringt auch gleich einen Treiber für SD-Karten 
mit,
(schreiben in Dateien geht traumhaft über:
 myfile = fopen("PHAT0:/guestbook.txt", "a+");
 fprintf(myfile,"<b>%s:</b> %s<br />\r\n", name, value );)
selbst bei umfangreichen Webseiten auf SD-Karte mit  mehreren Bildern 
pro Seite (für jedes Bild wird ein neuer httpd-Thread gestartet da der 
Browser mehrere Verbindungen aufbaut) hatte der Kleine keine Probleme 
und auch 100MB große Dateien wurden fehlerfrei übertragen, auch Relais 
(bzw. Hintergrundbeleuchtung) schalten ist ohne Probleme möglich. (ich 
hab allerdings einige Änderungen vorgenommen die ich aus Zeitgründen 
jetzt nicht erklären kann, müsst mich erstmal wieder einarbeiten, aber 
Ethernet wollte erst auch nicht, ich bin dann aber in den sehr 
hilfreichen Mailinglisten fündig geworden)

Eigentlich wollte ich  (will noch) eine Philips DC-3840 Handy-Kamera 
anschließen und die Bilder auf Sd-Karte speichern und vom Webserver 
abrufbar machen (und eventuell auf dem Display anzeigen bzw. Text 
darstellen den man im Browser eingibt), ich scheitere momentan aber noch 
an der großen Datenmenge die meine UART-Buffer schneller füllt als ich 
sie lehren kann (konnte mich aber aus Zeitgründen schon länger nicht 
mehr damit beschäftigen), das Problem ist, dass ich mit meinen selbst 
erarbeiteten C Kenntnissen nicht bei den UART Treibern und Interrupts 
durchsehe um sie so zu verändern das es passt (einfache Vergrößerung der 
Buffer reicht nicht). Ich müsste die Daten mehrmals anfordern und dann 
stückchenweise speichern.

Ich hoffe mir sind keine Fehler unterlaufen, das letzte mal hab ich 
irgendwann im Sommer damit rumgespielt.

Was willst du eigentlich machen, vielleicht können wir ja auch zusammen 
was machen über chat (irc...) in irgendwelchen Ferien.

Falls du noch fragen hast einfach wieder schreiben, ich guck immer mal 
wieder rein.

von Timo B. (spida)


Lesenswert?

Chris J. schrieb:
> Im Anhang ist meine Version, hab gerade noch mal compiliert und
> geflasht

Bist du sicher, dass das mitgelieferte Compilat aus dem Source im Anhang 
entstanden ist? Das Compilat laeuft, aber wenn ich selber aus dem Source 
compile und dann flashe bleibt der ARM beim ersten Zugriff auf den 
Webserver stehen.

von Chris J. (virus89)


Lesenswert?

Ja, da bin ich mir ziemlich sicher, hast du auch FreeRTOSV5.0.2, 
ansonsten überall Debug Ausgaben über die Serielle Schnittelle 
hinzufügen und dann gegebenenfalls die Funktion auskommentieren bei der 
es stehen bleibt. Vielleicht guck ich mir in Semesterferien im März mal 
an was alles Neues zu FreeRTOS V6 hinzugekommen ist und passe das dann 
nochmal dafür an.
Es kann auch sein das es bei einer neueren Version von 
gcc/Yagarto/WinARM und der alten FreeRTOSV5.0.2 Version 
Inkompatibilitäten gibt. Ich hab hier noch einen Snapshot von der 
Virtuellen Maschine die ich damals zum Entwicken benutzt hatte mit einen 
Ordner yagarto-tools-20070303, vielleicht hilft das weiter, ansonsten 
würde ich es wirklich mit aktuellen Versionen Testen. Aus Zeitmangel 
kann ich mir das jetzt nicht genauer angucken, in 3 Jahren hat sich viel 
getan.

von Michael (Gast)


Lesenswert?

Hallo

Ich habe leider sehr wenig Erfahrung beim Programmieren von 
Mikrocontrollern, muss aber nun ein Programm schreiben, welches über 
einen Timer- gesteuerten Interrupt eine Variable (z.B. vom ADC) 
ausliest. Hat jemand vielleicht ein kleines Programm (oder 
funktionierenden Ausgangspunkt), was wirklich nur das macht? Auch mit 
Hilfe einiger Beispiele (die meistens viel zu Umfangreich sind) schaffe 
ich das nicht.

Ich arbeite an einem OLIMEX SAM7X256.

mit freundlichen Grüßen

Michael

von Daniel (Gast)


Lesenswert?

Hallo Michael,

ich kann dir etwas Schreiben bzw. Helfen, denn seit einigen Wochen 
beschäftige ich mich intensiv mit dem OLIMEX SAM7-EX256-Board(Halt nur 
Abends wenn ich Zeit habe).
Hilfreich war das Buch "C-Programming for embedded Microcontrollers"
Bisher spielte ich mit folgende Funtkionen und habe diese Verstanden:
-DebugAusgabe über DBGU-Schnittstelle
-per Jostick oder Taster auf dem Summer Töne erzeugt
-ADC->Einlesen Temperatursensor mit Wertausgabe auf DBGU-Schnittstelle
-Nokiadisplay ansteuern-> Ausgabe des Temperatursensorwert auf Display
Momentan bin ich dabei einen Webserver mit FreeRTOS zu 
programmieren/konfigurieren.

Ich nutze Eclipse mit Yagartoo-Toolchain.

Gruß Daniel

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Daniel

Danke für deine Rückmeldung. Ich würde mich sehr freuen, wenn du mich 
ein Wenig unterstützen könntest.

Ich habe bereits einen Ansatz, damit du siehst was ich in etwa benötige.
Bei dem angefügten Beispiel habe ich den oben angebotenen Ausgangspunkt 
gehalten und versucht den PIT und den AIC zu initialisieren und im 
Interupthandler das LCD Display auszuschalten.

Könntest du das einmal durchsehn und sagen ob das soweit passt bzw was 
falsch ist?

Vielen Dank im Voraus

mfg

Michael

von Michael (Gast)


Lesenswert?

Hallo!

Ich bins nochmal! Ich bin schon am verzweifeln weil ich keinen Interrupt 
zusammenbekomme! Kann mir bitte jemand helfen?

Hier ist die initialisierung:
1
// Konfigurieren des AIC
2
volatile AT91PS_AIC pAIC = AT91C_BASE_AIC; // pointer zur AIC data structure
3
4
pAIC->AIC_IDCR = (1<<AT91C_ID_TC0); // Disable Timer interrupt in AIC
5
pAIC->AIC_SMR[AT91C_ID_TC0] = (AT91C_AIC_SRCTYPE_HIGH_LEVEL | AT91C_AIC_PRIOR_HIGHEST) ; 
6
pAIC->AIC_SVR[AT91C_ID_TC0] = (unsigned int)TimerIrqHandler;   // Adresse des IRQ-Handler übergeben
7
8
pAIC->AIC_IECR = (1<<AT91C_ID_TC0); // Enable Timer interrupt in AIC
9
10
volatile AT91PS_PMC pPMC = AT91C_BASE_PMC; // pointer to PMC data structure
11
        pPMC->PMC_PCER = (1<<AT91C_ID_TC0); // enable TC0 peripheral clock
12
13
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
14
15
AT91C_BASE_TC0->TC_CMR = AT91C_TC_CLKS_TIMER_DIV5_CLOCK | AT91C_TC_CPCTRG;
16
AT91C_BASE_TC0->TC_RC = AT91B_MCK/1024/1024/5;
17
18
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;  
19
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN;

Stimmt die so?

MFG
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.