Forum: Compiler & IDEs Include für RP2040


von RP2040 Anfänger (Gast)


Lesenswert?

Für C-Programmierung suche ich zum RP2040 die Include Datei mit den 
Registerdefinitionen. Wo kann ich die finden?
Segger Embedded Studio unterstützt zwar den RP2040, aber die dortige 
RP2040.h enthält im Wesentlichen nur die ISR-Vektoren.

Was ich an Beispielen finde, läuft alles auf Arduino-Ebene. Damit kann 
ich nichts anfangen. SDK-Software zum pico sieht nach Linux aus; auch 
damit kann ich nichts anfangen.

von Jack V. (jackv)


Lesenswert?

RP2040 Anfänger schrieb im Beitrag #6864609:
> SDK-Software zum pico sieht nach Linux aus; auch
> damit kann ich nichts anfangen.

Du kannst das SDK auch unter Windows aufsetzen, beziehungsweise das 
Archiv dort entpacken und die Datei raussuchen. Die gesuchte Datei ist 
eine Textdatei; der ist weitgehend egal, unter welchem System sie 
angeschaut wird.

von RP2040 Anfänger (Gast)


Lesenswert?

Danke, habe ich gemacht.
Es sind viele kleine .h Dateien und nicht eine einzige große. Mal sehen, 
wie sich damit arbeiten läßt.

von Markus (Gast)


Lesenswert?

>Was ich an Beispielen finde, läuft alles auf Arduino-Ebene. Damit kann
>ich nichts anfangen.

Warum nicht? Du solltest lernen, damit umzugehen.
Man kann das System mit VS-Code aufsetzten und mit GDB debuggen. Es sind 
also alle Möglichkeiten vorhanden und zusätzlich gibt es die Möglichkeit 
zur Verwendung 1000er Arduino Bibliotheken.

von Oliver S. (oliverso)


Lesenswert?

Markus schrieb:
> Warum nicht? Du solltest lernen, damit umzugehen.

Wenn man schon laufen kann, warum soll man sich dann ans krabbeln 
gewöhnen?

Man könnte aber, wie auch schon für pico vorgeschlagen wurde, sich die 
Arduino-Sourcen anschauen. Da sollte ja auch alles gewünschte zu finden 
sein.

Oliver

von RP2040 Anfänger (Gast)


Lesenswert?

Oliver S. schrieb:
> Man könnte aber, wie auch schon für pico vorgeschlagen wurde, sich die
> Arduino-Sourcen anschauen. Da sollte ja auch alles gewünschte zu finden
> sein.

In den Quellen vom SDK findet sich zwar alles wieder, aber Dateien 
gleichen Namens in anderen Verzeichnissen haben ganz anderen Inhalt. 
Sehr unübersichtlich und verwirrend. Auch findet sich Quellcode in 
.h-Dateien.

Vielleicht ist es sinnvoll, die vielen kleinen Schnipsel in eine große 
Datei zu kopieren, die dann alles im direkten Zusammenhang enthält. In 
der Segger IDE wäre das sicher transparenter.

von c-hater (Gast)


Lesenswert?

RP2040 Anfänger schrieb im Beitrag #6865487:

> In den Quellen vom SDK findet sich zwar alles wieder, aber Dateien
> gleichen Namens in anderen Verzeichnissen haben ganz anderen Inhalt.

Ja, klar. Ein Zweig ist für die Basisadressen der Peripherie-Units und 
die Bitdefinitionen zuständig, der andere für die Offsets der Register, 
bezogen auf die Basisadressen, dargestellt als Struktur-Deklarationen.

Sowas macht immer dann Sinn, wenn es mehr als eine Unit gleicher Art 
gibt (oder zumindest geben könnte). Und von vielen Units gibt es ja 
tatsächlich mehr als nur eine.

> Sehr unübersichtlich und verwirrend. Auch findet sich Quellcode in
> .h-Dateien.

So what? Was anderes als Quelltext sollte denn deiner Meinung nach in 
*.h-Dateien stehen?

Wichtig ist doch nur, dass nur Quelltext mit rein deklarativem Charakter 
sein sollte. Und das ist der Fall (es sei denn, ich hätte was 
übersehen).

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

RP2040 Anfänger schrieb im Beitrag #6864609:
> Für C-Programmierung suche ich zum RP2040 die Include Datei mit den
> Registerdefinitionen. Wo kann ich die finden?

Alternativ könntest du dir die benötigten SFRs selber definieren. Die 
Beschreibung findest du im Device Manual. Ist ein bisschen mehr Aufwand 
aber dafür schleppt man keine riesen Header Dateien mit, von denen man 
nur eine Handvoll Defines braucht.

Das könnte z.B. wie folgt aussehen:
1
#define RCC_BASE_ADDR  ((unsigned int)(0x40023800))
2
#define RCC_AHB1RSTR   (*(volatile unsigned long*)(RCC_BASE_ADDR + 0x10))

Du kannst im Embedded Studio die RP2040_Registers.xml benutzen und dir 
damit die SFRs im Register Fenster anzeigen lassen. Das ist echt 
praktisch.

von RP2040 Anfänger (Gast)


Lesenswert?

Til S. schrieb:
>> Für C-Programmierung suche ich zum RP2040 die Include Datei mit den
>> Registerdefinitionen. Wo kann ich die finden?
>
> Alternativ könntest du dir die benötigten SFRs selber definieren.

Du hättest es eigentlich besser wissen können.
Die .h Dateien sind in der hinterletzten Ecke versteckt. Bei mir zum 
Beispiel:
C:\Users\XYZ\AppData\Local\SEGGER\SEGGER Embedded 
Studio\v3\packages\RP2040_Pico_BSP\pico-sdk\src\rp2040\hardware_structs\ 
include\hardware\structs
oder
C:\Users\XYZ\AppData\Local\SEGGER\SEGGER Embedded 
Studio\v3\packages\RP2040_Pico_BSP\pico-sdk\src\rp2040\hardware_regs\inc 
lude\hardware\regs

Danach kann man sich ja dumm und dämlich suchen :-(

von Oliver S. (oliverso)


Lesenswert?

RP2040 Anfänger schrieb im Beitrag #6866441:
> Danach kann man sich ja dumm und dämlich suchen :-(

Dafür hat man einen Editor oder eine IDE. Das darf nicht mehr als einen 
Tastendruck brauchen.

Wenn du da von Hand Dateien durchsuchen musst, nutzt du die falschen 
tools.

Oliver

von RP2040 Anfänger (Gast)


Lesenswert?

Oliver S. schrieb:
> Dafür hat man einen Editor oder eine IDE. Das darf nicht mehr als einen
> Tastendruck brauchen.

Dann zeigt mir mal den Tastendruck.
Ich würde erwarten, dass, wenn ich ein Projekt für den RP2040 anlege, 
der passende #include-Pfad gelegt wird. Ist nicht.

Und wenn ein Segger Mitarbeiter empfiehlt, seine eigenen .h/.xyz-Dateien 
anzulegen, scheint die Lösung nicht offensichtlich zu sein.

Aber gut, für einen Arduinofan muss sich sowieso alles mit einem 
Tastendruck zusammenklicken zu lassen.

von RP2040 Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Für Schnellklicker mal ein Beispiel, wie die Dateien "gpio.c" im 
RasPi-SDK und bei Segger aussehen.

Es ist Glückssache, ob man den Müll oder den Eimer erwischt.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Du kannst auch mal versuchen aus der SVD-Datei [1] mit SVDConv [2] die 
entsprechende Datei zu generieren. Da kommt manchmal was brauchbares 
raus.

[1] 
https://github.com/raspberrypi/pico-sdk/blob/master/src/rp2040/hardware_regs/rp2040.svd
[2] 
https://github.com/ARM-software/CMSIS_5/blob/develop/CMSIS/Utilities/Win32/SVDConv.exe

Matthias

: Bearbeitet durch User
von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

RP2040 Anfänger schrieb im Beitrag #6866441:
> Du hättest es eigentlich besser wissen können.

Ich bin da leider auch nur Embedded Studio Kunde ¯\_(ツ)_/¯.
Müsste ich mal die Kollegen fragen wie das gedacht ist. Kann ich gerne 
morgen machen.

RP2040 Anfänger schrieb im Beitrag #6866522:
> Für Schnellklicker mal ein Beispiel, wie die Dateien "gpio.c" im
> RasPi-SDK und bei Segger aussehen.
>
> Es ist Glückssache, ob man den Müll oder den Eimer erwischt.

Geraten würde ich ja sagen dass das pico-sdk von hier übernommen wurde, 
https://github.com/raspberrypi/pico-sdk, und die beiden gpio.c dort 
identisch aussehen. Ich habe es mir aber jetzt nicht im Detail 
angeschaut.

von Markus (Gast)


Lesenswert?

>von Oliver S. (oliverso)
>01.11.2021 09:57

>Markus schrieb:
>> Warum nicht? Du solltest lernen, damit umzugehen.

>Wenn man schon laufen kann, warum soll man sich dann ans krabbeln
>gewöhnen?

Der Spruch muss anders heißen: Besser gut gefahren als schlecht 
gelaufen.

Entwickler mit viel Erfahrung wissen, dass man mit großen 
Softwareframeworks  die Ziele schneller erreichen kann als als 
Fußgänger.

>Man könnte aber, wie auch schon für pico vorgeschlagen wurde, sich die
>Arduino-Sourcen anschauen. Da sollte ja auch alles gewünschte zu finden
>sein.

So ist es. Und es macht mehr Sinn, bestehende Umgebungen zu erweitern 
als inkompatible Dinge selbst zu entwickeln.

von Johannes S. (Gast)


Lesenswert?

Der Standard für die Header wird für die meisten Cortex bei ARM in der 
CMSIS gepflegt, nur bei RPi musste man erstmal seine eigene Wurst haben:

https://github.com/raspberrypi/pico-sdk/issues/21

https://github.com/raspberrypi/pico-sdk/pull/384

Da saß wohl erstmal ein Praktikant dran der zum ersten Mal einen CM0 in 
der Hand hatte.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> Da saß wohl erstmal ein Praktikant dran der zum ersten Mal einen CM0 in
> der Hand hatte.

Denk ich nicht. Das ist schlicht und einfach der Versuch eines Vendor 
Lock In. Das gleich was alle anderen mit ihren HALs, CUBEs oder 
MCUXpressos auch versuchen. Aber immerhin gibt es ja eine SVD-Datei.

Matthias

von Johannes S. (Gast)


Lesenswert?

aber auch die genannten haben sich beim Core auf CMSIS geeinigt, obwohl 
die alle gerne eigene Standards durchdrücken wollen.
Bei der Peripherie gibts ja genug Freiheit, die sorgt dann schon noch 
genug für Wettbewerb. Und die weite Verbreitung von z.B. STMs Tools und 
Offenheit zeigt doch wie gut das angenommen wird. Das Lock In hat man 
schon dadurch das keine Prozessoren Herstellerübergreifend gleich sind.

von RP2040 Anfänger (Gast)


Lesenswert?


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.