ARM Embedded

Antworten
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 »

Ein Beispiel zum debuggen mit ST-Link ist hier:
https://gitlab.com/mseide-msegui/mseuni ... inkerdebug
http://mseide-msegui.sourceforge.net/pics/armdebug.png

Code: Alles auswählen

 
Debug demo project for STM32L100C-Discovery board    2018-04-06 mse
-------------------------------------------------
 
- clone, build and install the texane ST-Link tools:
https://github.com/texane/stlink
see
https://github.com/texane/stlink/blob/master/doc/compiling.md
 
- Download the ARM toolchain:
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
 extract it to a directory of your choice (<toolchaindir>).
 
- Download the ST firmware STM32CubeL1:
http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-mcu-packages/stm32cubel1.html#getsoftware-scroll
 extract it to a directory of your choice (<firmwaredir>).
 
- Run MSEide.
- 'Project'-'Open'-"blinkerdebug.prj".
- 'Project'-'Options'-'Macros', update <toolchaindir> and <firmwaredir>.
- 'Target'-'Download' in order to flash the program.
- 'Target'-'Continue' in order to run the program.
 
Have a lot of fun!
 
Martin
 

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 »

Hier ein Beispiel Free Pascal ARM-embedded:
https://gitlab.com/mseide-msegui/mseuni ... stm32l100c
http://mseide-msegui.sourceforge.net/pi ... bedded.png

Code: Alles auswählen

 
Free Pascal demo project for STM32L100C-Discovery board    2018-04-07 mse
-------------------------------------------------------
 
- clone, build and install the texane ST-Link tools:
https://github.com/texane/stlink
see
https://github.com/texane/stlink/blob/master/doc/compiling.md
 
- Download the ARM toolchain:
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
 extract it to a directory of your choice (<toolchaindir>).
 
- Download the Free Pascal ARM-embedded cross compiler:
https://sourceforge.net/projects/mseide-msegui/files/fpccrossarmembedded/
 extract it to a directory of your choice (<crossfpcdir>).
 
- Run MSEide.
- 'Project'-'Open'-"stm32l100c.prj".
- 'Project'-'Options'-'Macros', update <toolchaindir> and <crossfpcdir>.
- 'Target'-'Continue' in order to run the program.
 
Have a lot of fun!
 
Martin
 

Mathias
Beiträge: 6972
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 heiute ein wenig mit den GPIO-Registern rum gespielt.
Dafür habe ich an die Pins A0-A7 LEDs angeschlossen.

Code: Alles auswählen

#include <stddef.h>
#include <stdlib.h>
 
#define LEDPin 13
 
void setup() {
	GPIOA->regs->CRH = 0x33333333;
	GPIOA->regs->CRL = 0x33333333;
 
	GPIOC->regs->CRH = 0x33333333;
	GPIOC->regs->CRL = 0x33333333;
}
 
void loop() {
//	GPIOA->regs->BRR = 0B01010101;
//	GPIOA->regs->BSRR = 0B10101010;
	GPIOA->regs->ODR = 0B10101010;
	GPIOC->regs->BSRR = 1 << LEDPin;
//	(*(__uint32_t *) (0x40011000 + 16)) = 0b10000000000000;
 
	delay(500);
//	GPIOA->regs->BRR = 0B10101010;
//	GPIOA->regs->BSRR = 0B01010101;
	GPIOA->regs->ODR = 0B01010101;
	GPIOC->regs->BSRR = 1 << LEDPin << 16;
//	 (*(__uint32_t *) (0x40011000 + 16)) = 0b100000000000000000000000000000;
 
	delay(500);
}
Da sieht man, das der STM32 einiges moderner als der AVR ist. Es gibt sehr viele Möglichkeiten um die GPIOs zu beschreiben. Man kann sich die or und and not. Verknüpfungen sparen, aber möglich wäre es immer noch.

Jetzt muss ich mal bei Gelegenheit gucken, ob ich den Cross-Compiler mit deinem Links hinkriege.
Am liebsten hätte ich es, wen es mit Lazarus laufen würde.
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 »

Dann verwende zuerst meine MSEide Beispiele. Wenn es in MSEide funktioniert kannst du nach Lazarus portieren.
Wobei MSEide auch für Mikrocontroller als Entwicklungsziele entworfen wurde und für Embedded Entwicklungen speziell geeignet ist.

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:Jetzt muss ich mal bei Gelegenheit gucken, ob ich den Cross-Compiler mit deinem Links hinkriege.
Falls st-util mit der Fehlermeldung

Code: Alles auswählen

 
st-util: error while loading shared libraries: libstlink.so.1: cannot open shared object file: No such file or directory
 
abbricht ist vermutlich
https://github.com/texane/stlink/issues/700
das Problem. Kopiere die libstlink.* Dateien von
/usr/local/lib/lib/
nach
/usr/local/lib/
und rufe

Code: Alles auswählen

 
sudo ldconfig
 
auf.

Mathias
Beiträge: 6972
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 »

Der Fpc-Crodd-Pfad habe ich jetzt mal richtig.

Aber jetzt habe ich folgenden Fehler:

Code: Alles auswählen

Free Pascal Compiler version 3.1.1 [2018/04/07] for arm
Copyright (c) 1993-2018 by Florian Klaempfl and others
Target OS: Embedded
Compiling stm32l100c.pas
stm32l100c.pas(6,13) Warning: Variable "testvar" does not seem to be initialized
Assembling stm32l100c
stm32l100c.pas(9) Error: Assembler arm-embedded-as not found, switching to external assembling
stm32l100c.pas(9) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Da er die as-Datei nicht gefunden hat, habe ich sie umbenannt, hat aber nichts genutzt.
/home/acer/Schreibtisch/arm/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi-as --> /home/acer/Schreibtisch/arm/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-embedded-as

Bei Macro steht folgendes:

Code: Alles auswählen

TOOLCHAINDIR	/home/acer/Schreibtisch/arm/gcc-arm-none-eabi-7-2017-q4-major/bin
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 »

Code: Alles auswählen

 
TOOLCHAINDIR   /home/acer/Schreibtisch/arm/gcc-arm-none-eabi-7-2017-q4-major
 
Bitte mache die as-Umbenennung wieder rückgängig.

Mathias
Beiträge: 6972
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 die Ordner ein wenig aufgeräumter gemacht.
Diese Datei habe ich jetzt.

Code: Alles auswählen

/home/tux/Schreibtisch/MSEgui_arm/gcc_arm/bin/arm-none-eabi-as
Bei Macros folgendes, wie du schreibst ohne bin.

Code: Alles auswählen

TOOLCHAINDIR	/home/tux/Schreibtisch/MSEgui_arm/gcc_arm
Habe ich noch was vergessen ?

Wieso kommt beim Fehler "arm-embedded-as", obwohl er nach deiner Meinung "arm-none-eabi-as" braucht ?
Das sieht so aus:
Bild
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6972
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 im Ordner

Code: Alles auswählen

/home/tux/Schreibtisch/MSEgui_arm/gcc_arm/arm-none-eabi/bin
bei gewissen Dateien umbenannt, auf arm-embedded-xx.
Jetzt läuft der Compiler durch.
Hochladen tut er noch nichts, auch versucht er es nicht, ansonsten würde die LED am ST-LINK V2 kurz aufflackern.
Dafür habe ich ein Fehlermeldung oberhalb des grünen Start-Pfeiles.

Code: Alles auswählen

gdb server start error 127.
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 »

'Project'-'Options'-'Make'-'Show Commandline' zeigt bei mir:

Code: Alles auswählen

 
/home/mse/test/crossfpc-x86_64_linux_eabi_embedded_3_1_1//lib/fpc/3.1.1/ppcrossarm -Fu/home/mse/test/crossfpc-x86_64_linux_eabi_embedded_3_1_1/lib/fpc/3.1.1/units/arm-embedded/* -Fi/home/mse/test/crossfpc-x86_64_linux_eabi_embedded_3_1_1/lib/fpc/3.1.1/units/arm-embedded/* -Fl/home/mse/test/crossfpc-x86_64_linux_eabi_embedded_3_1_1/lib/fpc/3.1.1/units/arm-embedded/* -Fo/home/mse/test/crossfpc-x86_64_linux_eabi_embedded_3_1_1/lib/fpc/3.1.1/units/arm-embedded/* -g -Tembedded -Cparmv7m -WpSTM32F103X4 -e/home/mse/download/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/bin stm32l100c.pas
 
Vor allem interessant

Code: Alles auswählen

 
-e/home/mse/download/arm/gcc-arm-none-eabi-7-2017-q4-major/arm-none-eabi/bin
 
Wenn du in deinem entsprechenden Verzeichnis schaust, siehst du, dass dort die Tools ohne Prefix "arm-none-eabi" gelistet sind. Mit der original "gcc-arm-none-eabi-7-2017-q4-major" cross-toolchain und dem korrekten TOOLCHAINDIR Macro sind keine Umbenennungen notwendig.

Code: Alles auswählen

 
gdb server start error 127.
 
Das ist vermutlich das bereits erwähnte Problem
https://github.com/texane/stlink/issues/700
Bitte gib in einem Teminal

Code: Alles auswählen

 
st-util
 
ein. Falls eine Fehlermeldung

Code: Alles auswählen

 
st-util: error while loading shared libraries: libstlink.so.1: cannot open shared object file: No such file or directory
 
erscheint, kopiere die libstlink.* Dateien von
/usr/local/lib/lib/
nach
/usr/local/lib/
und rufe

Code: Alles auswählen

 
sudo ldconfig
 

auf.

Mathias
Beiträge: 6972
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 jetzt lädt er hoch.
'Project'-'Options'-'Make'-'Show Commandline' zeigt bei mir:
Dies sieht bei mir etwa gleich aus.
Wenn du in deinem entsprechenden Verzeichnis schaust, siehst du, dass dort die Tools ohne Prefix "arm-none-eabi" gelistet sind. Mit der original "gcc-arm-none-eabi-7-2017-q4-major" cross-toolchain und dem korrekten TOOLCHAINDIR Macro sind keine Umbenennungen notwendig.
Ohne umbenennen geht es bei mir immer noch nicht.
Das ist vermutlich das bereits erwähnte Problem
Das war es.

Ich wollte mal probieren, ob ich es auf die gleiche weise fertig kriege, die LEDPC13 einzuschalten, so wie ich es mit Arduino gemacht habe.
Aber die LED bleibt dunkel. :roll:

Code: Alles auswählen

program stm32l100c;
var
  PortC : record 
    CRL, CRH, IDR, ODR, BSRR, BRR, LCKR: uint32;
  end absolute $40011000;
 
begin
  PortC.CRL := $33333333;
  PortC.CRH := $33333333;
 
 while true do begin
  PortC.BSRR := $0000FFFF;
 end;
end.
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:Ohne umbenennen geht es bei mir immer noch nicht.
Es sollte. Oder hast du irgend etwas spezielles in .fpc.cfg? Bitte ändere

Code: Alles auswählen

 
-g ${FPCPARAMS}
 
in 'Project'-'Options'-'Make'-'Make Options' zu

Code: Alles auswählen

 
-n -g ${FPCPARAMS}
 
damit keine Konfigurations-Datei geladen wird.
Das ist vermutlich das bereits erwähnte Problem
Das war es.
Gratuliere! :-)
Ich wollte mal probieren, ob ich es auf die gleiche weise fertig kriege, die LEDPC13 einzuschalten, so wie ich es mit Arduino gemacht habe.
Aber die LED bleibt dunkel. :roll:

Code: Alles auswählen

program stm32l100c;
var
  PortC : record 
    CRL, CRH, IDR, ODR, BSRR, BRR, LCKR: uint32;
  end absolute $40011000;
 
begin
  PortC.CRL := $33333333;
  PortC.CRH := $33333333;
 
 while true do begin
  PortC.BSRR := $0000FFFF;
 end;
end.
Passt die Prozessor Einstellung in 'Project'-'Options'-'Macros' FPCPARAMS (-Wpxxxxxxx)? Breakpoints und Watches funktionieren?
Das Arduino Projekt macht möglicherweise weitere notwendige Initialisierungen.

Mathias
Beiträge: 6972
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 »

damit keine Konfigurations-Datei geladen wird.
Jetzt geht es ohne Umbenennung.
An der fpc.cfg habe ich nichts geändert.
Passt die Prozessor Enstellung in 'Project'-'Options'-'Macros' FPCPARAMS (-Wpxxxxxxx)? Breakpoints und Watches funktionieren?
Ich besitze einen STM32F103C.
Ist diese Zeile falsch dafür ?

Code: Alles auswählen

FPCPARAMS	-Tembedded -Cparmv7m -WpSTM32F103X4 -e${TOOLCHAINDIR}/arm-none-eabi/bin
Im Ordner Units hat es mehrere stm32f10x.
Das Arduino Projekt macht möglicherweise weitere notwendige Initialisierungen.
Dies wäre möglich.
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 besitze einen STM32F103C.
Ist diese Zeile falsch dafür ?

Code: Alles auswählen

FPCPARAMS	-Tembedded -Cparmv7m -WpSTM32F103X4 -e${TOOLCHAINDIR}/arm-none-eabi/bin
Im Ordner Units hat es mehrere stm32f10x.
Das weiss ich nicht. Vielleicht kann Florian Auskunft geben.
Funktionieren Breakpoints und Watches?

Mathias
Beiträge: 6972
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 »

Funktionieren Breakpoints und Watches?
So wie es scheint ja.
Was mich dort merkwürdig dunkt, dort hat es ganz andere Adressen.
Im Editor habe ich $40..... und dort wird 0x80..... angezeigt.

So nebenbei, hast du mal ein Blinker hingekriegt ?

Bild

PS: Es wäre mal schön, wen der Admin das Forum mal richten würde, so das die Anhänge wider funktionieren. :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten