ARM Embedded

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Re: ARM Embedded

Beitragvon Mathias » 5. Apr 2018, 17:22 Re: ARM Embedded

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

Auf die GPIO-Zugriffe des AVR. http://wiki.freepascal.org/AVR_Embedded_Tutorial_-_Simple_GPIO_on_and_off_output/de
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 5. Apr 2018, 17:39 Re: ARM Embedded

Sind die AVR Register (z.B. "PORTD") in FPC definiert oder in einer in uses gelisteten unit?
So wie das Wechselblinker Demoprogram aussieht vermutlich direkt in FPC. Das ist mit den ARM-Chips kaum machbar, die sind zu komplex und es gibt viel zu viele verschiedene Derivate.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 5. Apr 2018, 17:52 Re: ARM Embedded

Nein, sie sind in einer Unit. Die GPIO-Ports, werden im Speicher abgebildet.
Ausschnitt aus der Unit ATmega328P.
Code: Alles auswählen
  PORTB : byte absolute $00+$25; // Port B Data Register
  DDRB : byte absolute $00+$24; // Port B Data Direction Register
  PINB : byte absolute $00+$23; // Port B Input Pins


Einen einfachen Blinker kann ich auch so machen:
Code: Alles auswählen
var
  mem  : array[0..$7fff-1] of byte absolute $0;
begin
  DDRB := DDRB or (1 shl BP5);
  repeat
//    PORTB := PORTB or (1 shl BP5);
    Mem[$25] := Mem[$25] or (1 shl BP5);
    mysleep(sl);
 
    Mem[$25] := Mem[$25] and not (1 shl BP5);
//    PORTB := PORTB and not (1 shl BP5);
    mysleep(sl);
  until 1 = 2;
end.


Aus dem STM13 habe ich den Blinker folgendermassen hingekriegt:
Code: Alles auswählen
void loop() {
 
// Pin PC13 einschalten
        //  gpio_write_bit(GPIOC, 13, 1);
        //  GPIOC->regs->BSRR = (1U << 13) << (16 * 0l);
   GPIOC->regs->BSRR = 0b10000000000000;
 
   delay(100);
// Pin PC13 ausschalten
        //  gpio_write_bit(GPIOC, 13, 0);
        //  GPIOC->regs->BSRR = (1U << 13) << (16 * 1l);
   GPIOC->regs->BSRR = 0b100000000000000000000000000000;
 
   delay(100);

Macht eigentlich nicht viel Sinn, aber ich will den STM32 Kennenlernen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon FPK » 5. Apr 2018, 19:52 Re: ARM Embedded

Macht eigentlich nicht viel Sinn, aber ich will den STM32 Kennenlernen.


FPC für arm-embedded bauen:

make clean all OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7m

Je nach persönlichem Setup installieren.

Code: Alles auswählen
 
begin
  PortC.BSRR:=%10000000000000;
end.
 


mit

<neu gebauter fpc> -Tembedded -Cparmv7m -WpSTM32F103X4 test.pp

übersetzen (STM32F103X4 ist ein willkürlich gewählter Typ).
FPK
 
Beiträge: 50
Registriert: 21. Mai 2008, 18:38
Wohnort: Erlangen

Beitragvon Mathias » 5. Apr 2018, 22:18 Re: ARM Embedded

FPC für arm-embedded bauen:

make clean all OS_TARGET=embedded CPU_TARGET=arm SUBARCH=armv7m
Ist wohl doch nicht so einfach.
Code: Alles auswählen
system.pp(325) Error: Assembler arm-embedded-as not found, switching to external assembling
Da muss ich wohl die der Pfad zu der Datei "arm-embedded-as" einbinden, diese befindet sich irgendwo im Arduino-Ordner.

Auf einem Atmega328p habe ich den Port-Zugriff auf das Minimum optimiert.
Code: Alles auswählen
void loop() {
   (*(char *)(0x25)) |= 0b100000;
  delay(1000);
   (*(char *)(0x25)) &= ~0b100000;
  delay(100);
}
Dies funktioniert sogar. :shock:

Dies habe ich auf dem STM32 auch probiert, und siehe das es funktioniert auch.
Code: Alles auswählen
void loop() {
   //   gpio_write_bit(GPIOC, 13, 1);
   //  GPIOC->regs->BSRR = (1U << 13) << (16 * 0l);
   //  GPIOC->regs->BSRR = 0b10000000000000;
 
   (*(__uint32_t *) (0x40011000 + 16)) = 0b10000000000000;
 
   delay(100);
   //  gpio_write_bit(GPIOC, 13, 0);
   //   GPIOC->regs->BSRR = (1U << 13) << (16 * 1l);
   //   GPIOC->regs->BSRR = 0b100000000000000000000000000000;
   (*(__uint32_t *) (0x40011000 + 16)) = 0b100000000000000000000000000000;
 
   delay(10);
}

Nur komischerweise, wen das delay > 255 ist, dann hängt sich der STM32 auf, wieso auch immer.
Was aber der Mini-Code aussagt, das der STM32 die GPIOs auch im Memmory abbildet, ähnlich des AVRs.

Das +16 habe ich aus dieser struct berechnet.
Code: Alles auswählen
typedef struct gpio_reg_map {
    __IO uint32 CRL;      /**< Port configuration register low */
    __IO uint32 CRH;      /**< Port configuration register high */   + 4
    __IO uint32 IDR;      /**< Port input data register */           + 8
    __IO uint32 ODR;      /**< Port output data register */          + 12
    __IO uint32 BSRR;     /**< Port bit set/reset register */        + 16
    __IO uint32 BRR;      /**< Port bit reset register */
    __IO uint32 LCKR;     /**< Port configuration lock register */
} gpio_reg_map;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 6. Apr 2018, 19:03 Re: ARM Embedded

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/m ... mpiling.md
 
- Download the ARM toolchain:
https://developer.arm.com/open-source/g ... /downloads
 extract it to a directory of your choice (<toolchaindir>).
 
- Download the ST firmware STM32CubeL1:
http://www.st.com/content/st_com/en/pro ... are-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: 16. Okt 2008, 09: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
Nach oben

Beitragvon mse » 7. Apr 2018, 09:56 Re: ARM Embedded

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/m ... mpiling.md
 
- Download the ARM toolchain:
https://developer.arm.com/open-source/g ... /downloads
 extract it to a directory of your choice (<toolchaindir>).
 
- Download the Free Pascal ARM-embedded cross compiler:
https://sourceforge.net/projects/mseide ... membedded/
 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
 
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 7. Apr 2018, 19:26 Re: ARM Embedded

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 8. Apr 2018, 06:57 Re: ARM Embedded

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: 16. Okt 2008, 09: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
Nach oben

Beitragvon mse » 8. Apr 2018, 08:55 Re: ARM Embedded

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.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 8. Apr 2018, 12:58 Re: ARM Embedded

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 8. Apr 2018, 14:27 Re: ARM Embedded

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.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 8. Apr 2018, 15:44 Re: ARM Embedded

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 8. Apr 2018, 16:05 Re: ARM Embedded

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 8. Apr 2018, 16:35 Re: ARM Embedded

'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.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron
porpoises-institution
accuracy-worried