ARM Embedded

Antworten
mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: ARM Embedded

Beitrag von mischi »

CROSSOPT: -Cpavr5 passt eigentlich nicht zu arm. Valide subarchs für arm sind: armv7m, armv7em, armv4t, armv4 , armv6m, armv7a

Die Information bekommt man aus der Datei: rtl/embedded/Makefile.fpc

Wenn ich das richtig verstehe, steht da auch drin, welche subarch zu welchem Board passt.

MiSchi
MiSchi macht die fink-Pakete

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

CROSSOPT: -Cpavr5 passt eigentlich nicht zu arm. Valide subarchs für arm sind: armv7m, armv7em, armv4t, armv4 , armv6m, armv7a
Das scheint sich von ATMega328 eingeschlichen zu haben. Vielleicht wurde dies mit embeddes Verknüpft anstelle mit AVR.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: ARM Embedded

Beitrag von kupferstecher »

Mathias hat geschrieben:habe ich mehrere kleine Wandler gekauft nur wird kein einziger von Linux erkannt.

Was für ein Programmieradapter hast du denn? Ich benutze den STLinkV2, allerdings unter Windows. Dafür gibt es auch Linux-Treiber, such mal nach "texane st-link".

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

So einen habe ich auch, wen ich mal Lust habe probiere ich ihn nochmals.
Ich werde dann nach deinem Suchbegriff googeln.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

siro hat geschrieben:Dann brauchst Du nur irgend eine blödsinnige Zeile Code dahinter schreiben
und das Problem ist verschwunden.

Das einzig Richtige ist der Einbau einer "memory barrier" ( __DSB()-Funktion in gcc) vor dem Verlassen der IRQ Routine.
"memory barriers" sind auch sonst manchmal im Zusammenhang mit den Memory Management- und anderen Hardware Elementen notwendig.
https://en.wikipedia.org/wiki/Memory_barrier
http://infocenter.arm.com/help/index.js ... 14041.html
http://infocenter.arm.com/help/index.js ... EDAAF.html

Im Moment scheint infocenter.arm.com nicht richtig zu funktionieren...
Zuletzt geändert von mse am Sa 31. Mär 2018, 11:14, insgesamt 1-mal geändert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

kupferstecher hat geschrieben:Ein Debugger wäre wohl hilfreich gewesen (wegen der Chrashs unter Optimierung), GDB-Remote könnte auch funktionieren. Mir fehlt aber das Wissen, diesen (unter Lazarus) einzurichten.

Ich arbeite häufig mit Cortex M3 Chips und dem Segger J-Link Debug Interface mit gcc und MSEide. Ein typisches Debugger Setup sieht so aus:
http://mseide-msegui.sourceforge.net/pi ... bugger.png
und liesse sich sicher auch mit Free Pascal verwenden.

Das "${jlinkdir}startgdbserver" Script initialisiert die Debugger-Interface Einstellungen und startet das JLinkGDBServer Programm.
"${MAKETOOLDIR}start.gdb" sieht z.B. so aus:

Code: Alles auswählen

 
monitor speed 4000
monitor endian little
monitor flash download = 1
monitor flash device = EFM32TG210F32
monitor reset 0
 

Edit:
Für ST-Link könnte man vermutlich die Tools von hier
https://github.com/texane/stlink
verwenden.
https://github.com/texane/stlink/blob/master/README.md

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: ARM Embedded

Beitrag von kupferstecher »

Hallo MSE,

danke für Infos. Es ist schon wieder eine Weile her, dass ich mich damit beschäftigt habe, damals hab ich den Debugger nicht zum Laufen gebracht. Wenn ich mit dem STM32 wieder zu tun habe, werd ichs nochmal probieren.

Viele Grüße

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

kupferstecher hat geschrieben:
Mathias hat geschrieben:habe ich mehrere kleine Wandler gekauft nur wird kein einziger von Linux erkannt.

Was für ein Programmieradapter hast du denn? Ich benutze den STLinkV2, allerdings unter Windows. Dafür gibt es auch Linux-Treiber, such mal nach "texane st-link".


Ich versuche gerade folgende Anleitung durchzuarbeiten. https://github.com/texane/stlink/blob/m ... mpiling.md

Nun habe ich eine Gerät

Code: Alles auswählen

$ls /dev/stlinkv2_1 
/dev/stlinkv2_1


Nachtrag: Ich konnte nun den ersten Blink-Sketch mit der Arduino-IDE hochladen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:Nachtrag: Ich konnte nun den ersten Blink-Sketch mit der Arduino-IDE hochladen.

Dann solltest du auch das Debuggen mit MSEide/Lazarus schaffen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Dann solltest du auch das Debuggen mit MSEide/Lazarus schaffen.

Wen du mit Debuggen das erstellen von Programmen meinst, dann muss zuerst mal einen funktionierenden Cross-Compiler her.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mit Debuggen meine ich das Laufenlassen und Beobachten (Einzelschritt, Breakpoints, Variablen, Register...) eines bestehenden Programms. Kannst du mit gcc ein Minimalprogramm als *.elf-Datei erzeugen und in den uP übertragen?
Was liefert das Programm st-util für ein Ergebnis? st-util ist der gdb-Server für stlink.
Hast du einen entsprechenden ARM gdb? Vorkompiliert gibt es die toolchain hier:
https://developer.arm.com/open-source/g ... /downloads
Aus readme.md:

Code: Alles auswählen

 
Then, in your project directory, someting like this... (remember, you need to run an ARM gdb, not an x86 gdb)
 
$ arm-none-eabi-gdb fancyblink.elf
...
(gdb) target extended-remote :4242
...
(gdb) load
Loading section .text, size 0x458 lma 0x8000000
Loading section .data, size 0x8 lma 0x8000458
Start address 0x80001c1, load size 1120
Transfer rate: 1 KB/sec, 560 bytes/write.
(gdb)
...
(gdb) continue
 

Falls das funktioniert kann der Start von st-util und arm-none-eabi-gdb in den MSEide Projektoptions eingetragen werden. Ich würde zuerst mit MSEide ein einfaches gcc Programm machen, da gibt es bestimmt Beispiele.
Wenn es reibungslos funktioniert kann dann der ARM Free Pascal Compiler in Angriff genommen werden.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Kannst du mit gcc ein Minimalprogramm als *.elf-Datei erzeugen und in den uP übertragen?
Wie gesagt, mit der Arduino-IDE konnte ich den ersten Blink-Versuch hochladen.
Ich dachte, gcc sei um PC-Programme zu kompilieren oder hast du arm-none-eabi-gcc gemeint ?
Ob es eine *.elf mit Arduino gibt, habe ich nicht probiert.

Du scheibst da was von Debuggen.
Kann man den STM32 zur Laufzeit über den "ST-LINK V2" debuggen ?

Falls das funktioniert kann der Start von st-util und arm-none-eabi-gdb in den MSEide Projektoptions eingetragen werden.
Das wird wohl ähnlich sein, wie bei den AVR.
Aber brauche ich nicht zuerst eine Cross-Compiler, wen das Ganze mit FPC laufen soll ? :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:Du scheibst da was von Debuggen.
Kann man den STM32 zur Laufzeit über den "ST-LINK V2" debuggen ?

Ja, MSEide ist dafür eingerichtet. Man kann auch das Programm direkt via gdb in den Chip übertragen.
Falls das funktioniert kann der Start von st-util und arm-none-eabi-gdb in den MSEide Projektoptions eingetragen werden.
Das wird wohl ähnlich sein, wie bei den AVR.
Aber brauche ich nicht zuerst eine Cross-Compiler, wen das Ganze mit FPC laufen soll ? :roll:

Darum der Vorschlag zuerst mit MSEide und gcc ein Minimalprogramm zu machen. MSEide funktioniert sowohl mit gcc als auch mit FPC. Wenn dann die Debug-Entwicklungsumgebung steht, kann man das FPC-ARM-embedded Abenteuer angehen.
Vorkompilierte cross-gcc und binutils sind hier:
https://developer.arm.com/open-source/g ... /downloads

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: ARM Embedded

Beitrag von Mathias »

Ich habe es hingekriegt, mit Eclipse Sloeber den STM32 zu programmieren.
Einziges Manko, gegen deinen Vorschlag mit MSEide, wird wohl sein, das es Arduinolastig ist. Es hat ein setup und loop.

Ich habe mal kurz MSEide angeguckt, so wie es scheint, muss man dort sehr viel konfigurieren.

So wie es scheint, kann man nicht mit einem einfachen PORTD = 123 auf eine Port zugreifen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: ARM Embedded

Beitrag von mse »

Mathias hat geschrieben:Ich habe es hingekriegt, mit Eclipse Sloeber den STM32 zu programmieren.
Einziges Manko, gegen deinen Vorschlag mit MSEide, wird wohl sein, das es Arduinolastig ist. Es hat ein setup und loop.

Mit Eclipse Sloeber kannst du kaum Free Pascal Programme machen. Mit MSEide schon.
Ich habe mal kurz MSEide angeguckt, so wie es scheint, muss man dort sehr viel konfigurieren.

Ich werde ein Beispielprojekt mit einem STM32L100C-DISCO board machen.
Für normale FPC PC-Entwicklung muss lediglich das MSEgui Verzeichnis konfiguriert werden (Punkt 5). Aus README.TXT.

Code: Alles auswählen

 
Installation:
*************
1. Download and install FPC 3.0.2 or 3.0.4, you can get it from
   http://www.freepascal.org/download.var
2. Download mseide_msegui_src_4_6.zip and the mseide_* archive
   for your system.
   http://sourceforge.net/projects/mseide- ... segui/4.6/
3. Extract them to a directory of your choice ('yourdirectory') .
4. Run 'yourdirectory/bin/mseide' on linux and freebsed or
   'yourdirectory\bin\mseide.exe' on windows.
5. In 'Settings'-'Configure MSEide'-'${MSEDIR}' select 'yourdirectory/msegui'.
6. In 'Project'-'Open' select 'yourdirectory/msegui/apps/demo/demo.prj'.
7. 'Target'-'Continue'.
 

So wie es scheint, kann man nicht mit einem einfachen PORTD = 123 auf eine Port zugreifen.

Worauf bezieht sich das? Auf FPC? Dazu sind zum Controller passende Register-Definitions-Units notwendig.

Antworten