Forum: Mikrocontroller und Digitale Elektronik Eclipse Linux STM32


von derrene (Gast)


Lesenswert?

Hallo,
Ich habe ein Problem, nach langem erfolglosem probieren ..
Ich habe nach nach dieser Anleitung 
http://www.mikrocontroller.net/articles/STM32F4-Discovery erfolgreich
* Sourcery Toolchain
* CDT, ARM, GDB plug ins installiert
* Stlink devices erscheint beim einstecken des Boards und ich kann auch 
darauf schriben bzw lesen

Probleme habe ich mit Eclipse!! Zum Thema Beispiel-Projekte  sollte ein 
Neues Projekt angelegt werden. Zum einem finde ich keine *ARM Linux GCC 
(Sourcery G++ Lite)* sondern stattdessen *ARM Linux GCC (Sourcery Lite 
Linux)* oder *ARM Linux GCC (Sourcery Bare)* vor .. ich hoffe das ist 
kein problem

Desweiteren sollten die drei includes vorhanden sein, das ist bei mir 
nich so!
       /opt/CodeSourcery/arm-2011.09/arm-none-eabi/include
    /opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include
    /opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixed

ich habe aber die die PATH gesetzt ... in der console finde ich 
arm-none-eabi-gcc und co (mit dem selben user, mit dem eclipse gestartet 
wird)

....

nun ich habe dies alles erstmal ignoriert und am ende erhalte ich den 
fehler das arm-gnu-linux-eabi-gcc (oder so ähnlich .. ich bin mir nicht 
mehr sicher wie sich das nannte, da ich im eclipse alle einträge 
arm-gnu-linux-eabi-gcc zu arm-none-eabi-gcc gerändert habe) nicht 
gefunden werden  kann

von derrene (Gast)


Lesenswert?

**** Build of configuration Debug for project stm32l1xx_template_test1 
****

make all
Building file: ../test/main.c
Invoking: ARM Linux GCC C Compiler (Sourcery Lite Linux)
arm-none-eabi-gcc -DUSE_STDPERIPH_DRIVER -DUSE_STM32_DISCOVERY 
-D"HSE_VALUE Value=8000000" 
-I/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/CMSIS/Include/ 
-I/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/CMSIS/Device/ST/STM32L1x 
x/Include 
-I/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/STM32L1xx_StdPeriph_Driv 
er/inc/  -I"../ //home/rendeb/workspace/stm32l1xx_template_test1" -O0 
-ffunction-sections -fdata-sections -Wall -Wa,-adhlns="test/main.o.lst" 
-c -fmessage-length=0 -MMD -MP -MF"test/main.d" -MT"test/main.d" 
-mcpu=cortex-m3 -mthumb -g3 -o "test/main.o" "../test/main.c"
/bin/sh: 1: arm-none-eabi-gcc: not found
make: *** [test/main.o] Error 127

**** Build Finished ****

von derrene (Gast)


Lesenswert?

So jetzt habe ich ein anderes Problem und zwar beim compilieren eines 
example-programms erhalte ich folgende meldung:


**** Build of configuration Debug for project t ****

make all
Building file: 
/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/STM32L1xx_StdPeriph_Driver 
/src/misc.c
/bin/sh: 1: arm-none-eabi-gcc: not found
Invoking: ARM Linux GCC C Compiler (Sourcery Lite Linux)
make: *** [StdPeriph/misc.o] Error 127
arm-none-eabi-gcc -DUSE_STDPERIPH_DRIVER -DUSE_STM32_DISCOVERY 
-DHSE_VALUE=8000000 
-I/opt/CodeSourcery/arm-2011.09/arm-none-eabi/include 
-I/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include 
-I/opt/CodeSourcery/arm-2011.09/lib/gcc/arm-none-eabi/4.6.1/include-fixe 
d  -I/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/CMSIS/Include 
-I/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/CMSIS/Device/ST/STM32L1x 
x/Include 
-I/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/STM32L1xx_StdPeriph_Driv 
er/inc  -O0 -ffunction-sections -fdata-sections -Wall 
-Wa,-adhlns="StdPeriph/misc.o.lst" -c -fmessage-length=0 -MMD -MP 
-MF"StdPeriph/misc.d" -MT"StdPeriph/misc.d" -mcpu=cortex-m3 -mthumb -g3 
-o "StdPeriph/misc.o" 
"/opt/STM32L1xx_StdPeriph_Lib_V1.2.0/Libraries/STM32L1xx_StdPeriph_Drive 
r/src/misc.c"

**** Build Finished ****

von Jim M. (turboj)


Lesenswert?

PATH stimmt nicht, denn

> /bin/sh: 1: arm-none-eabi-gcc: not found

heisst, dass er das Binary nicht gefunden hat. Kannst Du es an der 
Konsole ausführen (z.B. "arm-none-eabi-gcc -v")?

Bei Eclipse kann man PATH in den Einstellungen (Preferences) umsetzen. 
Da könnte also durchaus was verstellt sein.

von derrene (Gast)


Lesenswert?

>PATH stimmt nicht, denn
>
> /bin/sh: 1: arm-none-eabi-gcc: not found
>
>heisst, dass er das Binary nicht gefunden hat. Kannst Du es an der
>Konsole ausführen (z.B. "arm-none-eabi-gcc -v")?

arm-none-eabi-gcc -v ist erreichbar, ich hab die PATH Variable in 
.profiles meines user gesetzt mit dem ich elcipse starte.

Folgendes hab ich in die Profile reingesetzt:
1
EABI_PATH="/opt/gcc-arm-none-eabi"
2
if [ -d "$EABI_PATH/bin" ] ; then
3
    PATH="$EABI_PATH/bin:$PATH"
4
fi


rendeb@rendeb-virt:~/Downloads$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm-none-eabi-4_7-2013q3/bin/../lib/gcc/arm 
-none-eabi/4.7.4/lto-wrapper
Target: arm-none-eabi
Configured with: /home/build/work/GCC-4-7-build/src/gcc/configure 
--target=arm-none-eabi 
--prefix=/home/build/work/GCC-4-7-build/install-native 
--libexecdir=/home/build/work/GCC-4-7-build/install-native/lib 
--infodir=/home/build/work/GCC-4-7-build/install-native/share/doc/gcc-ar 
m-none-eabi/info 
--mandir=/home/build/work/GCC-4-7-build/install-native/share/doc/gcc-arm 
-none-eabi/man 
--htmldir=/home/build/work/GCC-4-7-build/install-native/share/doc/gcc-ar 
m-none-eabi/html 
--pdfdir=/home/build/work/GCC-4-7-build/install-native/share/doc/gcc-arm 
-none-eabi/pdf  --enable-languages=c,c++ --disable-decimal-float 
--disable-libffi --disable-libgomp --disable-libmudflap 
--disable-libquadmath --disable-libssp --disable-libstdcxx-pch 
--disable-nls --disable-shared --disable-threads --disable-tls 
--with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes 
--with-python-dir=share/gcc-arm-none-eabi 
--with-sysroot=/home/build/work/GCC-4-7-build/install-native/arm-none-ea 
bi  --build=i686-linux-gnu --host=i686-linux-gnu 
--with-gmp=/home/build/work/GCC-4-7-build/build-native/host-libs/usr 
--with-mpfr=/home/build/work/GCC-4-7-build/build-native/host-libs/usr 
--with-mpc=/home/build/work/GCC-4-7-build/build-native/host-libs/usr 
--with-ppl=/home/build/work/GCC-4-7-build/build-native/host-libs/usr 
--with-cloog=/home/build/work/GCC-4-7-build/build-native/host-libs/usr 
--with-libelf=/home/build/work/GCC-4-7-build/build-native/host-libs/usr 
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic 
-lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' 
--with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r
Thread model: single
gcc version 4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 
202601] (GNU Tools for ARM Embedded Processors)


Und Path ist:
gcc version 4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 
202601] (GNU Tools for ARM Embedded Processors)
rendeb@rendeb-virt:~/Downloads$ echo $PATH
/opt/gcc-arm-none-eabi/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games 
:/usr/games

von Martin (Gast)


Lesenswert?

Hallo Rene,

ich habe gerade das gleiche Problem. Ich denke die HOWTO hier braucht 
ein update.
Ich habe es jetzt soweit bekommen das ich einen link erstellen musste:
ln -s /opt/CodeSourcery/arm-2011.09/bin/arm-none-eabi-gcc 
/usr/bin/arm-none-linux-gnueabi-gcc

damit wird mir bei einem neuen projekt (ich wähle Sourcery Lite Linux).
diese include dateien reinkopiert.

allerdings scheitere ich dann beim kompilieren:
make: *** [test.hex] Fehler 127


viel erfolg ;-)

von Juergen G. (jup)


Lesenswert?

Welche Linux Distros verwendet Ihr denn?

die meisten neuen Distros haben den arm-none-eabi in den Packetquellen

debian basiert zum Bsp.

sudo apt-get install gcc-arm-none-eabi

dann klappt das mit dem arm-eclipse plugin ohne Frickelei.

Wenn Ihr wollt kann ich ein paar Templates fuer die Discovery's posten.

: Bearbeitet durch User
von derrene (Gast)


Lesenswert?

Hallo Juergen,

Ich nutze Debian wheezy 7.0.1, ich konnte leider nicht fetstellen das 
gcc-arm-none-eabi im Debian repo vorhanden ist.

von Juergen G. (jup)


Lesenswert?

in wheey 7 ist der arm-none-eabi im Packet

gcc-arm-embedded

von derrene (Gast)


Lesenswert?

dieses paket ist bei mi rnicht vorhanden, weder mit apt-get noch mit 
aptitude.

liegt es etwas daran, das ich ein debian wheezy 64bit verwende?

von Juergen G. (jup)


Lesenswert?

Dann versuche es mal mit der alternativen Packet-Quelle.


       "sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded"


       "sudo apt-get update"


       "sudo apt-get install gcc-arm-none-eabi"

von Martin (Gast)


Lesenswert?

ich nutze Ubuntu. Die Pakete habe ich. werde es damit mal versuchen.

was für templates meinst du?

von Martin (Gast)


Lesenswert?

also ich kann die toolchain zwar auch mit apt-get installieren.
die bins sind dann unter /usr/bin und fangen mit:
arm-none-eabi-*
an.

so lege ich jetzt ein neues C Projekt in Eclipse mit der Toolchain 
"Sourcery Lite Linux" an sucht er aber nach binarys die mit 
"arm-none-linux-gnueabi-*"
anfangen, ergo funzt es natürlich wieder nicht!

von Cyblord -. (cyblord)


Lesenswert?

Man kann in Eclipse die Aufrufe der Toolchain auch anpassen.

von Martin (Gast)


Lesenswert?

ok, wenn ich als toolchain "Sourcery Lite Rare" nehme geht es..

von Martin (Gast)


Lesenswert?

ok projekt templates sicher?

da hänge ich jetzt auch, die aktuelle version der Std. Libs von ST ist 
1.2.0 die howto bezieht sich auf 1.0.0, da hat sich auch wieder einiges 
getan.
durchkompilieren ist nicht drin mit den einstellungen die man dort 
erklärt werden.

vielleicht kannst du uns doch deine templates schicken? (sofern diese 
auch schon für die 1.2.0 libs sind)

von Juergen G. (jup)


Lesenswert?

Verwendet Ihr alle die STM32L1xx

Diesen Type habe ich noch nicht verwendet.
Gebt mir mal ein paar Minuten, dann poste ich ein Template.

von Juergen G. (jup)


Lesenswert?

Koennt Ihr mir mal einen Link auf die von Euch verwendete StdLib posten.

Auf der ST Page finde ich unter den STM32L1 nur aeltere Versionen als 
1.2

von Juergen G. (jup)


Angehängte Dateien:

Lesenswert?

Hier jetzt ein eclipse Projekt.

Vorab, da ist nicht die von Euch gewollte StdPerphLib drin sondern eine 
fuer einen cm0.
Das laesst sich aber ganz leicht aendern.
Dazu aber weiter unten mehr.


1. Die Datei irgendow im Dateisystem ausserhalb des eclipse Workspaces 
entpacken.

2. eine Kopie davon in das eclipse Workspace Directorie machen und das 
Projekt-Directorie nach belieben umbenennen.

Dann in eclipse

3. File->Import->General->existing project into workspace

next

unter "Select root Directory" den Projectordner auswaehlen (die Kopie im 
Eclipse Workspace"

Das sollte dann so aussehen wie im Bild oben

Finish

Damit ist das Projekt im Workspace

4. Im Projekt Explorer den Ordner "Release" des aktuellen Projectes 
loeschen, damit keine Geister Dateien vom Original Projekt im aktuellen 
Projekt rumfliegen.

5. dann mit dem Hammer(Symbol) neu kompilieren.


Aendern der verwendeten StdPerphLib

Der Ordner Libraries ist der selbe Ordner mit selben Namen wie er 
innerhalb der von ST kommenden StdPerphLib zu finden ist.
 zBsp.:
$DownloadOrdner/STM32F0-Discovery_FW_V1.0.0/Libraries

Also den im Projekt befindlichen Ordner Libraries loeschen und durch den 
Ordner aus dem ST-Download ersetzen

nochmal den Ordner Release loeschen und neu Kompilieren.

von Martin (Gast)


Lesenswert?

Hallo Jürgen,

also die stdlib habe ich aus dem Link der im Artikel

http://www.mikrocontroller.net/articles/STM32F4-Discovery#Eclipse_IDE

ist und der geht da hin:

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901

Version 1.2.0

dein Template werde ich nachher mal ausprobieren und schauen ob es bei 
mir tut. danke erstmal.

grüße

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jürgen,

ich habe jetzt dein template ausprobiert das kompliert auch soweit.

du hast ja dem stm32f0 und ich den stm32f4.
Habe also die StdLib von dir gelöscht, die für den f4 rein kopiert, die 
pfade unter den ProjectProperties angepasst, Release ordner gelöscht und 
mit Hammer neu kompiliert.

leider ohne erfolg 200 error meldungen wegen fmc..

das kann doch nicht so schwierig sein mit eclipse unter linux einen 
stm32f4 zu programmieren grrrr

von Juergen G. (jup)


Angehängte Dateien:

Lesenswert?

Asche auf mein Haupt.

In den Original Quellen von ST sind auch Beispiele mit in dem Library 
Tree.

Ob Beispiele in einen Lib Tree gehoeren oder nicht ist Ansichtssache in 
meinen Augen nicht, also habe ich die Beispiele aus dem Lib Tree von ST 
entfernt und verwende in meinen Projekten eine Kopie die nur das zu 
Begin Notwendigste enthaelt.
Den Rest Kopiere ich dann bei Bedarf in das Projekt.

Die USB Geschichten die da noch in dem ST Tree drin sind habe ich auch 
nicht in meinem Template Tree, die kann man je nach Bedarf aus den 
Original Quellen in sein Projekt kopieren.

Im Anhang ein minimal Projekt fuer den F4.

von Martin (Gast)


Lesenswert?

kein problem :-)

kompilieren tut jetzt soweit, jetzt nur noch programmieren und debuggen 
dann hab ichs geschaft :-D

st-link hab ich installiert, gibts da auch die möglichkeit aus eclipse 
heraus den mc zu programmieren (nicht debuggen)

von Juergen G. (jup)


Angehängte Dateien:

Lesenswert?

Ja geht beides, flashen und debuggen

Die Dateien zum flashen findest Du in dem Ordner openocd im jeweiligen 
Projekt

um das zu benutzten musst Du die Pakete openocd und libnet-telnet-perl
installiert haben

sudo apt-get install openocd libnet-telnet-perl

danach dann in eclipse einige externe tools configurieren

Schau Dir die Bilder oben an.

Das sind die extern tool configs um

OpenOCD zu starten
den uC zu flashen
einen Reset im uC zu veranlassen
OpenOCD zu stoppen

Stelle sicher das in allen Tools unter dem Reiter Build

Build before launch deaktiviert ist.

Wenn Du die tools eingerichtet hast kannst Du unter
Organize Favorits
die Tools in das Menu integrieren

: Bearbeitet durch User
von Juergen G. (jup)


Lesenswert?

Fehler in der openocd.cfg

fuer den STM32F4

muss die openocd.cfg

so aussehen

#
# Flash programming script for stm32f4 discovery
# Using the swd transport
#

source [find interface/stlink-v2.cfg]
source [find target/stm32f4x_stlink.cfg]

: Bearbeitet durch User
von Juergen G. (jup)


Angehängte Dateien:

Lesenswert?

Noch was zum STLink auf den Discovery boards

in dem Verzeichnis

/etc/udev/rules.d/

muss die Datei XX-stlinkv2.rules

vorhanden sein

wenn nicht, die im Anhang befindlichen Dateien dahin Kopieren und

sudo service udev restart

aufrufen

von Martin (Gast)


Lesenswert?

Wow cool du bist ja ein eclipse Linux stm crack :-)
Danke schon mal für deine !! werd es morgen mal testen.

Wie ist das mit dem flash tools? du nutzt ja nicht st-flash, ist deine 
eingesetzte Variante besser wie die st-flash?

von Juergen G. (jup)


Lesenswert?

Es ist openocd, also eigentlich ein Debug-Tool.

Damit kann man nicht nur flashen sondern auch gleich debuggen wenn mans 
braucht.

Meiner Erfahrung nach ist es auch schneller als st-flash.

von Martin (Gast)


Lesenswert?

ok, gerade gelesen das die F4 auch die F2 treiber nutzt... schade :-/

von Martin (Gast)


Lesenswert?

also das funktioniert (fast) soweit.

mit dem flash gibt es noch ein problem irgendwie läuft es nicht aber
ohne erkennbaren grund, außer das das programm nicht läuft. der ganze
flash vorgang dauert auch nur 1-2 sek. so viel schneller kann das mit
openocd ja auch nicht sein ;-)

was mir auffällt:
Info : device id = 0x10016413
Info : flash size = 1024kbytes
flash 'stm32f2x' found at 0x08000000
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x20000042 msp: 0x4c06b510
wrote 16384 bytes from file
/home/martin/eclipseworkspace/vorlage/Release/vorlage.bin in 0.994898s
(16.082 KiB/s)

von Juergen G. (jup)


Lesenswert?

Ja und die letzte Zeile der Ausgabe ist

Info : dropped 'telnet' connection

das heisst alles ist OK und Dein Programm ist im Flash des uC's

Was ist jetzt das Problem?

Blinken die Led nicht?

von Martin (Gast)


Lesenswert?

nein blinken nicht, aber wenn du sagst die ausgabe sieht "normal" aus 
dann schaue ich mir lieber noch mal mein program an! vielleicht hab ich 
da etwas übersehen..

von Juergen G. (jup)


Lesenswert?

nimm einfach das Projekt fuer den F4 was ich oben gepostet habe, das ist 
das Standard blinky (IO_Toggle im Ordner Peripheral_Examples) aus der ST 
FirmwareLib fuer das F4-Discovery.

bei mir blinken die vier Led auf dem F4-Discovery.

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Ja das läuft, war also noch ein fehler im programm..

wenn ich jetzt noch das debugging hinbekommen würde :-)


hab das mal konfiguriert so das er den arm gdb immt und sich auf den 
port 4444 von openocd verbindet. kommt aber nur ne cryprische 
fehlermeldung.. habs mal angehängt, vielleicht weißt du noch rat..

danke schon mal

von Martin (Gast)


Lesenswert?

ok habs hinbekommen, musste bei PORT den 3333 nehmen nicht 4444.

geschaft :-)

von Juergen G. (jup)


Lesenswert?

Gratulation.

Eclipse ist wie ein Schweizer Taschenmesser.
Kann vieles, man muss sich aber damit befassen um es zu verstehen, erst 
dann kann man es richtig anwenden.

Einfach drauflosklicken und hoffen es kommt was vernuenftiges dabei raus 
is bei eclipse nich.

von Martin (Gast)


Lesenswert?

ja das stimmt wohl ;-)
danke für den support!

von Sebastian (Gast)


Lesenswert?

Vielen Dank für die Bereitstellung des Beispiels mit der 1.0er 
Bibliothek. Ich habe es mit der 1.2er auch nicht geschafft, die 
FMC_BANK-Fehler zu beseitigen. Warum die (sehr wohl vorhandenen) defines 
nicht übernommen werden, habe ich noch nicht verstanden.

von Juergen G. (jup)


Lesenswert?

Ich glaube nicht das es an der Version liegt.

Gib mir mal einen Link auf die Version 1.2, wie weiter oben geschrieben 
habe ich diese auf der ST Webseite nicht gefunden.

Wenn ich diese Version habe kann ich auch ein Template dafuer erstellen 
und hier posten.

von Sebastian (Gast)


Lesenswert?

Sehr gern; unter http://www.st.com/web/en/catalog/tools/PF257901 sollte 
die Version 1.2 der StdPeriph-lib für den STM32F4 liegen.
Dort bekam ich immer FMC_BANKx not defined, obwohl ich defines dafür 
händisch gefunden habe.
Ich glaube ebenfalls, dass der Fehler eher vor dem Bildschirm zu suchen 
ist, habe ihn allerdings noch nicht gefunden.

von Juergen G. (jup)


Angehängte Dateien:

Lesenswert?

OK, ich hab die V1.2 in das von mir gepostete Template eingebaut.

Ja, da hat es einige Aenderungen, auch einige wo ich noch nicht ganz 
durchsteige.

Aber ich kann das Problem eingrenzen.
Es liegt ganz klar an den Definitionen die den verwendeten Chip 
beschreiben.

Ich hab mir jetzt nicht alle Datenblaetter der einzelnen Chips 
angesehen, aber ich sehe in den Definitionen das es da grosse 
Unterschiede gibt und die header files definieren Peripherie in 
Abhaengigkeit von den entsprechenden Chip Definitionen.

Ein Problem ist, dass die Header Files zwar Peripherie definieren oder 
nicht, eclipse aber immer alle *.c files kompilieren will.

Da knallt's dann natuerlich.


Ein workaround so auf die Schnelle ist.

1. die Chip definition in eclipse vorzunehmen.
Also in den Symbols den richtigen Chip zu definieren,
!NICHT im entsprechenden Header file (aus)kommentieren.

2. nur die wirklich benoetigten .c Files der StdPeriph_Lib in das 
Projekt zu kopieren.

von Juergen G. (jup)


Lesenswert?

Um eines noch mal zu Unterstreichen.

Das gilt fuer alle STM's und LPC's mit den jeweiligen vom Hersteller 
bereitgestellten Lib's.

Wenn Ihr mit dem Standard eclipse CDT und den jeweiligen Lib's vom 
Hersteller arbeiten wollt, versucht moeglichst keine Aenderungen in den 
original Header files vorzunehmen.

Alle Symbole lassen sich in eclipse, wie oben im Bild gezeigt, 
definieren.
Damit haben wir dann in eclipse auch die Moeglichkeit .c files in 
Abhaengigkeit der .h files zu kompilieren oder wegzulassen.

Ich muss nur einen Weg finden wie man das am einfachsten direkt im 
eclipse build-system unterbringen kann.

Die angebotenen auf eclipse basierenden IDE's machen das auch nicht 
anders. Nur haben die Programmierer dieser IDE's ein anders Verhaeltnis 
zu java als ich es habe. ;-)

von Sebastian (Gast)


Lesenswert?

Ja, ich handhabe es auch so, dass ich alles über Symbole in Eclipse 
belege, aber ich komm mit der neuen Version noch nicht klar.
Ich finde es etwas schade, dass auf freie Entwicklungsumgebungen seitens 
ST nicht wirklich eingegangen wird (oder habe ich etwas übersehen?).
Auch wäre es schön gewesen, wenn die Änderungen in der Lib besser 
beschrieben wären.
Naja, das Projekt pressiert und dann muss das eben erstmal mit der 
älteren Version erstellt werden.

von Juergen G. (jup)


Lesenswert?

Das Problem ist groesser als es aussieht.

Die Hardwareentwickler stehen an einer Schwelle.

Die groesseren Microcontroller stellen mittlererweile Microprozessoren 
vom Umfang her in den Schatten. Immer mehr und komplexere Peripherie 
kommt auf die Chips. Das heisst die Komplexitaet steigt um ein 
vielfaches.

Es gibt aber noch kein Tool das die Charakteristiken des uC's erkennt so 
wie autoconf heute die Eigenheiten eines Betriebssystems erkennen kann.
Da bleibt es in der Verantwortung des Entwicklers dem Build-System zu 
sagen was er auf seinem Chip hat und was nicht.

Das war vor 20 Jahren bei den Betriebssystemen genauso, da gab es auch 
noch keine auto-tools und der Programmierer musste die verwendeten Libs 
haendisch auswaehlen, in sein Projekt uebernehmen und im Makefile 
eintragen.

Auf der anderen Seite steht die Kurzlebigkeit der Chips und der 
Time-To-Market Druck bei den Geraete-Herstellern welche die Chips 
verwenden.

Die Loesung fuer Chiphersteller und Applications-Entwicklung ist, sich 
auf vorgefertigte Tools zu konzentrieren.

ST und NXP zBsp. versuchen zumindest den Entwicklern die deren uC's 
verwenden Werkzeuge in die Hand zu geben die unabhaengig von 
Kompiler/IDE-Herstellen sind.
Auch versucht ST und NXP auf die Open-Source Welt Ruecksicht zu nehmen 
und zumindest ein paar der freien Kompiler oder IDE's zu unterstuetzen.

Microchip zBsp. macht das nicht.

Desweiteren fehlen den Chipherstellern die festen Ansprechpartner in der 
Open-Source Welt.
Somit koennen Sie auch keine Ruecksicht auf alles nehmen was da geboten 
wird.

Was ich speziell bei ST zu beanstanden habe ist, dass Sie (bis jetzt) 
nur Microsoft basierte Betriebssysteme unterstuetzen.

von Cyblord -. (cyblord)


Lesenswert?

Juergen G. schrieb:

> Was ich speziell bei ST zu beanstanden habe ist, dass Sie (bis jetzt)
> nur Microsoft basierte Betriebssysteme unterstuetzen.

Ja, wieviele Leute gibt es denn, die im prof. Embedded/Automation Umfeld 
unter Linux entwickeln? Die ideologischen Grabenkämpfe der pubertären 
Linux-Frickel-Fraktion (nette Alliteration gell), interessieren dort 
nichts und niemanden.

gruß cyblord

von Malte (Gast)


Lesenswert?

cyblord ---- schrieb:
> Juergen G. schrieb:
>
>> Was ich speziell bei ST zu beanstanden habe ist, dass Sie (bis jetzt)
>> nur Microsoft basierte Betriebssysteme unterstuetzen.
>
> Ja, wieviele Leute gibt es denn, die im prof. Embedded/Automation Umfeld
> unter Linux entwickeln?

Viele. Nämlich diejenigen, die heute mal was für ein embedded Linux (du 
würdest dich wundern wo überall eins drin ist) auf ARM, und morgen für 
einen nackten ARM Mikrocontroller entwickeln. Die dabei nicht alle Nase 
lang ihre gewohnte Umgebung verlassen wollen und erwarten, dass 
Hersteller ihre Kunden ernst nehmen.

Die gewohnte Umgebung ist dabei ein Desktop-Linux, da man dort am 
sinnvollsten für ein embedded Linux entwickeln kann.


> Die ideologischen Grabenkämpfe der pubertären
> Linux-Frickel-Fraktion (nette Alliteration gell), interessieren dort
> nichts und niemanden.

Das Problem bei ST ist, dass in diesem Fall ST aus ideologischen Gründen 
nichts anderes als Windows unterstützt. Da werden einem Steine in den 
Weg gelegt, die wirklich nicht sein müssen. Etwas Wohlwollen oder 
wenigstens Neutralität statt Boshaftigkeit würde ST wesentlich besser 
aussehen lassen.

von Sebastian (Gast)


Lesenswert?

Ist es eigentlich schon jemand gelungen, die USB-Bibliotheken in einem 
Eclipse-Projekt zu verwenden? Ich bekomme immer Probleme. Es kompiliert 
durch, aber willkürliche Funktionen haben dann "undefined references" 
beim Linken. Darunter so sachen wie GPIO_Init, die bei bisherigen 
Projekten (vor dem Versuch der Einbindung von USB-CDC) immer 
funktionierten.
Ein Makefile-Projekt, worauf hier im Froum verwiesen wurde, funktioniert 
dagegen problemlos und dient mir vorerst als Krücke, aber die 
Entwicklung dauert da für jede neue Funktion des Prozessors doch schon 
recht lang, wenn man ständig auf solche Probleme stößt.
Wenn ich weiter so machen muss, dann werde ich wohl den Hersteller 
wechseln. Wahrscheinlich bin ich zu doof für die erweiterten Funktionen 
(StdPeriph ging bisher problemlos)...

von Juergen G. (jup)


Lesenswert?

versuch es mal das linkerscript und die startups aus Deinem Makefile 
Project  in eclipse zu verwenden.

von Jan (Gast)


Lesenswert?

Hallo zusammen!

Bin auch gerade dabei eclipse für die Entwicklung auf dem 
STM32F4Discovery zu installieren, habe gestern den ganzen Tag verbracht 
es mit der StdLib V1.2.0. zum kompilieren zu bekommen, bin aber auch an 
dem 'FMC_Bank1' Fehler gescheitert... Meine ersten Versuche auf Linux 
und STM32F4 - keine Zeile geschrieben und schon kurz vor dem Aufgeben 
:-(
Zum Glück habe ich den thread hier gefunden, habe Juergens Template 
heruntergeladen und es kompiliert, jetzt gehts mir schon etwas besser 
:-)
Bin jetzt dabei openocd wie von Jürgen beschrieben in eclipse zu 
konfigurieren, habe es auch alles so gemacht wie o.g., aber es 
funktioniert leider nicht... wo müssen denn die ganzen STM32_*.pl 
Dateien sein? Wenn ich das richtig verstehe in einem Ordner 'openocd' im 
Projektverzeichnis, oder? Wenn ja, wo bekomme ich die her? Wenn das 
klappt sollte es ja recht einfach sein den debugger zum laufen zu 
bekommen :-)

Vielen Dank, besonders and Jürgen (jup)!

Jan

von Jan (Gast)


Lesenswert?

Ok, bin schon ein Stückchen weiter: stm32_flash.pl findet man im Netz, 
die anderen beiden für reset und shutdown leider nicht...
Die Verbindung zum ST-Link klappt auch schon zum Teil, debugging 
scheitert aber noch:

Open On-Chip Debugger 0.7.0 (2013-11-06-10:29)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v14 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.915303
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'gdb' connection from 3333
Info : device id = 0x10016413
Info : flash size = 1024kbytes
Warn : acknowledgment received, but no packet pending
undefined debug reason 6 - target needs reset
Error: Target not halted
Error: failed erasing sectors 0 to 0
Error: flash_erase returned -304
Info : dropped 'gdb' connection

Was geht denn hier schief?

von Juergen G. (jup)


Angehängte Dateien:

Lesenswert?

Die openocd files sind im ersten von mir geposteten Projekt template.

das zweite Template war eigentlich nur um zu zeigen wie man die 
abgespeckte STDLib fuer den F4 compilieren kann.

Im Anhang dann nochmal ein F4 Projekt template mit den openocd files.

von Juergen G. (jup)


Lesenswert?

Zum allgemeinen Verstaendnis.

Openocd ist komplett unabhaengig von eclipse und laeuft normalerweise in 
einer separaten shell als server.

ueber Telnet in einer anderen shell kann man sich dann mit dem openocd 
server verbinden.

telnet localhost <PORT>

wobei default-maessig (openocd install defaults)
Port 3333 der debug Port ist
und
Port 4444 der Port zum algemeinen "schwatzen" mit der MCU (oder zum 
flashen)

Es ist natuerlich laestig, das immer alles einzutippen.
So kann man jede beliebige scriptsprache nehmen um das zu 
"automatisieren"
Diese scripte kann man dann natuerlich in eclipse einbinden.

Wer einen anderen microcontroller oder anderes Board verwendet muss das 
in der openocd.cnf entsprechend anpassen.

fuer den F4 mit dem STLink-V2 sieht  openocd.cnf zBsp. so aus
1
#
2
# Flash programming script for stm32f0 discovery
3
# Using the swd transport
4
#
5
6
source [find interface/stlink-v2.cfg]
7
source [find target/stm32f4x_stlink.cfg]

die entsprechenden config files findet man zum grossen Teil forgefertigt 
in den Verzeichnissen
openocd/interface
und
openocd/target

Die Dateien in diesen Ordnern sind Kopien aus dem openocd Projekt und 
nur in meinem Ordner damit ich sie schneller zur hand habe

Wer irgendetwas exotisches verwendet kann sich mit der openocd Doku auch 
selbst seine eigenne cfg files zusammenbauen.

von Jan (Gast)


Lesenswert?

Hallo Jürgen, vielen Dank für das Template! Funktioniert soweit, aber 
die rot/gruene LED auf dem ST-Link Teil des discovery bleibt gruen, ich 
kann daher den ST-Link nicht nochmal starten nach einem shutdown:

Open On-Chip Debugger 0.7.0 (2013-11-06-10:29)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v14 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.915608
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'telnet' connection from 4444
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800026c msp: 0x2001c000
Info : device id = 0x10016413
Info : flash size = 1024kbytes
Info : device id = 0x10016413
Info : flash size = 1024kbytes
flash 'stm32f2x' found at 0x08000000
auto erase enabled
wrote 16384 bytes from file 
/home/jan/workspace/STM32F4_StdPerphLib_Eclipse_Template/Release/STM32F4 
_StdPerphLib_Eclipse_Template.bin  in 0.760251s (21.046 KiB/s)
Info : dropped 'telnet' connection
Info : accepting 'telnet' connection from 4444
Info : dropped 'telnet' connection
Info : accepting 'telnet' connection from 4444
shutdown command invoked

Wenn ich dann wieder starte passiert folgendes:

Open On-Chip Debugger 0.7.0 (2013-11-06-10:29)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Error: read version failed
in procedure 'transport'
in procedure 'init'

Muss das board abstecken und wieder einstecken um es wieder nutzen zu 
können... Woran mag das liegen?

von Juergen G. (jup)


Lesenswert?

Den shutdown musst Du nicht immer machen, er beendet den openocd server.

nur einmal de openocd server starten, dann viele male flashen oder den 
uC resetten und bevor Du das projekt verlaesst dann einen shutdown, 
damit eclipse ohne meckern beendet.

von Jan (Gast)


Lesenswert?

Das debugging scheitert auch noch leider (port 3333 fuer gdb ist 
richtig, oder?):

Error in final launch sequence
Failed to execute MI command:
load 
/home/jan/workspace/STM32F4_StdPerphLib_Eclipse_Template/Debug/STM32F4_S 
tdPerphLib_Eclipse_Template.elf

Error message from debugger back end:
Error erasing flash with vFlashErase packet
Error erasing flash with vFlashErase packet


Und dazu die Ausgabe von der Konsole:

Open On-Chip Debugger 0.7.0 (2013-11-06-10:29)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v14 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.913574
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'gdb' connection from 3333
Info : device id = 0x10016413
Info : flash size = 1024kbytes
Warn : acknowledgment received, but no packet pending
undefined debug reason 6 - target needs reset
Error: Target not halted
Error: failed erasing sectors 0 to 0
Error: flash_erase returned -304
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection from 3333
Warn : acknowledgment received, but no packet pending
undefined debug reason 6 - target needs reset
Error: Target not halted
Error: failed erasing sectors 0 to 0
Error: flash_erase returned -304
Info : dropped 'gdb' connection

von Jan (Gast)


Lesenswert?

Hab jetzt mal auf telnet localhost 4444 mitgehört:

Open On-Chip Debugger
accepting 'gdb' connection from 3333
acknowledgment received, but no packet pending
Target not halted
failed erasing sectors 0 to 0
flash_erase returned -304
dropped 'gdb' connection

von Juergen G. (jup)


Lesenswert?

Du musst einmal am Anfang Deiner Arbeit den openocd starten

Wenn Du Deinen eclipse workspace so konfiguriert hast wie weiter oben 
mit den Bildern beschrieben kannst Du einfach auf
start_STLink in den Faforiten im extern tool menu klicken

dann kannst du so oft flashen und resetten wie Du willst
jeweils mit
flash
oder
reset
im extern tool menu

und nur wenn Du eclipse verlassen willst oder den openocd nicht mehr 
brauchst auf

shutdown

klicken

von Juergen G. (jup)


Lesenswert?

Zum flashen nicht den debug Port nehmen sondern den algemeinen port 4444

von Jan (Gast)


Lesenswert?

Hi Jürgen!

Flashen klappt, reset auch :-) Nur debugging klappt nicht, da ist noch 
irgendwo ein Problem:

Error in final launch sequence
Failed to execute MI command:
load 
/home/jan/workspace/STM32F4_StdPerphLib_Eclipse_Template/Debug/STM32F4_S 
tdPerphLib_Eclipse_Template.elf

Error message from debugger back end:
Error erasing flash with vFlashErase packet
Error erasing flash with vFlashErase packet


Kann es an einem Verstaendigungsproblem zwischen debugger und openocd 
liegen?

von Juergen G. (jup)


Lesenswert?

Ich verwende den Debugger kaum, besser gesagt nur zum probieren ob 
openocd anspringt, fuer meine Projekte gar nicht.
Aber schau mal weiter oben, Martin hat das am laufen mit dem F4 und er 
hat uns da auch seine Bilder rangehaengt.

von Juergen G. (jup)


Lesenswert?

hast Du in den Extern Tool Eistellungen den Haken bei Build before xxx 
im Build Tab deaktiviert?
Sollte deaktiviert sein in allen Tools.

Es erschein mir etwas rar, das der Debugger den Flash erasen will.

Wenn Du nach dem Flashen mit dem Debugger auf den uC gehst sollte das 
Programm gestoppt und vor dem Anfang, also vor dem Startup stehen.

von JensH (Gast)


Lesenswert?

>die meisten neuen Distros haben den arm-none-eabi in den Packetquellen
Dann braucht man unter Ubuntu das ganze Paket von CodeSourcery überhaupt 
nicht ?

von Juergen G. (jup)


Lesenswert?

JensH schrieb:
> Dann braucht man unter Ubuntu das ganze Paket von CodeSourcery überhaupt
> nicht ?

Das ist richtig.

Die Compiler in den Paketquellen sind zZ. auch aktueller als die 
OpenSource Version von CodeSourcery.

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.