ARM Embedded

Antworten
Mathias
Beiträge: 6165
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: 6165
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: 6165
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

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: ARM Embedded

Beitrag von Socke »

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.


Welchen der vier STM32F103C-Varianten hast du denn? Nach dem C kommt noch eine Ziffer/Buchstabe, die Angibt wieviel RAM und Flash auf dem MCU eingebaut wurden.
In der RTL sind auch nur Units für STM32F103X vorhanden; zu diesem Namen konnte ich nichts im Netz finden; kann gut sein, dass die auch bei STM32F103C funktionieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6165
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 besitze einen STM32F103C, mehr weis ich nicht.
Bei Arduino steht "Generic STM32F103C series.
Dort gibt es noch ein Variant, mit folgender Auswahl:
- STM32F103C8 (20k RAM. 64k Flash)
- STM32F103CB (20k RAM. 128k Flash)

Funktionieren tun beide.

Bestellt hatte ich dazuml folgendes: 1 stücke STM32F103C8T6 ARM STM32
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

_Bernd
Beiträge: 145
Registriert: Di 13. Feb 2007, 11:16

Re: ARM Embedded

Beitrag von _Bernd »

Mathias hat geschrieben:Aber die LED bleibt dunkel. :roll:

Die peripheral clock für GPIOC müsstest Du noch aktivieren, dann sollte es gehen :-)

Code: Alles auswählen

 
 
procedure TestPC13;
var
   APB2ENR: DWord absolute $40021018; // APB2 peripheral clock enable register
   PortC : record
      CRL, CRH, IDR, ODR, BSRR, BRR, LCKR: uint32;
   end absolute $40011000;
begin
 
   APB2ENR:= APB2ENR or (1 shl 4); // Clock für GPIOC freigeben.
   PortC.CRL := $33333333
   PortC.CRH := $33333333
 
   repeat
      PortC.BSRR:= 1 shl 13; // PC13 setzen
      Delay;
      PortC.BSRR:= 1 shl (13 + 16); // PC13 zurücksetzen.
      Delay;
   until FALSE;
 
end;
 


Nachtrag: Wegen Deines Controllers, müsstest Du mal in der Datei ".../compiler/arm/cpuinfo.pas" nachschauen. Bei einem STM32F103RET6 hatte "-Cparmv7m -Wpstm32f103xe" gepasst.

Gruß, Bernd.

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:Was mich dort merkwürdig dunkt, dort hat es ganz andere Adressen.
Im Editor habe ich $40..... und dort wird 0x80..... angezeigt.

Die 0800000 sind Programm Adressen.
So nebenbei, hast du mal ein Blinker hingekriegt ?

Da müsste ich mich zuerst in die STM32-Controller einlesen. Ich verwende hauptsächlich EFM32 Chips von Silicon Labs.

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 »

Für ST-Link musste ich die Anzeige der Statusflags in MSEide anpassen, ST-Link verwendet einen anderen Namen für das PSR Register, git master eb0008b27a31b0e701c40af88abfd27c86696a8a.
https://gitlab.com/mseide-msegui/mseide-msegui
Um MSEide neu zu bauen:

Code: Alles auswählen

 
cd <mseguidir>
git pull
 

Dann MSEide starten, 'Project'-'Open' "apps/ide/mseide.prj", 'Target'-'Continue'.

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

Die peripheral clock für GPIOC müsstest Du noch aktivieren, dann sollte es gehen :-)

Das war es, jetzt geht, die LED Blinkt. 8)
Somit läuft bei Arduino noch einiges im Hintergrund.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: ARM Embedded

Beitrag von Socke »

Mathias hat geschrieben:
Die peripheral clock für GPIOC müsstest Du noch aktivieren, dann sollte es gehen :-)

Das war es, jetzt geht, die LED Blinkt. 8)
Somit läuft bei Arduino noch einiges im Hintergrund.

Nein, der AVR ist einfach viel simpler gebaut. Auf den ARM-Cortex-Controllern kannst du genau kontrollieren, wann welcher Bus oder Peripherie gerade aktiv ist und mit Strom versorgt wird. Damit kann man auf der einen Seite sehr sparsame Anwendungen realisieren. Auf der anderen Seite muss man aber jede Peripherie erst einmal studieren, wie diese verwendet wird.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6165
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 an Port A und B auch LEDs angeschlossen, die bleiben dunkel, da habe ich folgendes versucht;

Code: Alles auswählen

  APB2ENR := APB2ENR or (1 shl 4); // Clock für GPIOC freigeben.  
  APB2ENR := APB2ENR or (1 shl 3); // Clock für GPIOB freigeben. 
  APB2ENR := APB2ENR or (1 shl 2); // Clock für GPIOA freigeben. 
, jetzt brenne diese auch.

Nein, der AVR ist einfach viel simpler gebaut.
Ich sehe schon, mit dem STM32 hat man sehr viele Möglichkeiten. dies wird wohl eine Weile dauern, bis man das (fast) alles kennt.

Damit kann man auf der einen Seite sehr sparsame Anwendungen realisieren.
Ich denke, du meinst mit sparsam, den Stromverbrauch ?

Zum AVR zurück, im Prinzig, könnte man dort die GPIO-Funktionen PORTx, DDRx und PINx auch in eine Record packen. Oder auch die sonstigen Register, wie zB. die vom Timer.
Ich vermute, dies ist eine Altlast von früher, da auch nicht alle Register der Reihe nach im Speicher sind.

Wen ich mich ein wenig eingearbeitet habe, werde ich ein kleines Tutorial im Auge behalten, so wie es für den AVR/Arduino gibt.
Dann wird sich doch der eine und andere User an ARM mit FPC wagen.

Ich frage mal den Entwickler von fpcupdelux, das er ARM-Embedded auch in sein Programm einbauen kann. Wen ARM mit Lazarus funktionieren würde, wäre dies eine grosse Erleichterung gegenüber des komfortlosen Editor von MSEide. Nichts gegen MSEide, aber der Editor erinnert mich an die Anfangszeiten von Linux.
Dafür ist MESide sehr felxibel, was die Cross-Compiler anbelangt, man kann für jedes Project eigene Pfade für den Compiler festlegen.
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 »

Der MSEide Editor ist für (meine) maximale Produktivität optimiert, es ist ein fortschreitender Vorgang seit bald 20 Jahren.
Es geht hauptsächlich darum, die Mustererkennung des Gehirns zu unterstützen und den Lesevorgang nicht zu stören. Wichtig ist z.B. ein ruhiges Schriftbild das immer gleich aussieht. Sehr schlecht sind viele verschieden Farben, wechselnde Markierungen und Hilfslinien, aufpoppende Hinweisfenster und sich automatisch verändernder Text. Ebenfalls wichtig die Begrenzung der Zeilenbreite auf etwa 80 Zeichen, damit man Code blockweise lesen kann.
Dass dich das Erscheinungsbild an die Linux (Unix) Anfänge erinnert kommt nicht von ungefähr, die Unix-Macher haben sich bei der Arbeit einiges überlegt.
MSEide unterstützt Codenavigation (Ctrl+LeftClick) - es werden die in 'Project'-'Options'-'Debugger'-'Source Directories' angegebenen Verzeichnisse durchsucht -, Codevervollständigung für Klassen und die Auflistung von Prozedur- und Funktionsparameter (Shift+Ctrl+Space hinter '('). Wechsel zwischen Header und Implementation durch Ctrl+Alt+Up/Down ist ebenfalls möglich.
Nach einiger Zeit wirst du die neue Art zu programmieren nicht mehr missen wollen.

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

Nach einiger Zeit wirst du die neue Art zu programmieren nicht mehr missen wollen.

Dies ist wohl Geschmacksache, ich liebe den Editor von Lazarus. Ich liebe die Farben im Editor, so sieht man auf den ersten Blick was Kommentar ist.
Mit ist das erste Hello World viel leserlicher als das zweite.

Code: Alles auswählen

  for i := 0 to 7 do begin
    Writeln('Hello World'); // Kommentar
  end;

Code: Alles auswählen

  for i := 0 to 7 do begin
    Writeln('Hello World'); // Kommentar
  end;

Was ich mseIDE noch vermisse ist:
Ctrl + Ins --> kopieren
Shift + Ins --> einfügen
Mit Crt-C und Ctrl-V kann ich mich überhaupt nicht anfreunden, dies ist immer so eine Zielübung.

Dass dich das Erscheinungsbild an die Linux (Unix) Anfänge erinnert kommt nicht von ungefähr, die Unix-Macher haben sich bei der Arbeit einiges überlegt.
Viel anders ging es gar nicht, da die CPU-Power fehlte. Gut Turbo-Pascal konnte, auch auf einem 8088er Syntaxhiglight.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten