Forum: Compiler & IDEs Segger Embedded Studio, SAM-C und CMSIS 5


von Rudolph R. (rudolph)


Lesenswert?

Ich spiele gerade ein wenig mit Segger Embedded Studio herum (4.30c).
Als Target habe ich einen ATSAMC21E18A.

Im Package Manager habe ich das SAM-C CPU Support Package installiert.
Ebenso habe ich das "CMSIS 5 CMSIS-CORE Support Package" installiert.

Wie bringe ich dem Segger Embedded Studio jetzt bei, dass es CMSIS 5 
nutzen soll und nicht das ebenfalls installierte CMSIS 4 Package?
Wenn ich versuche das CMSIS 4 Package zu entfernen, dann geht das nicht 
ohne das "Atmel SAM-C CPU Support Package" ebenfalls zu entfernen.

Ich könnte auch __CM0PLUS_CMSIS_VERSION_MAIN auswerten, nur ist das in 
CMSIS 5 als deprecated geflagged.
Eigentlich würde ich mich mit CMSIS 4 gar nicht erst anfreunden wollen.

Nach etwas Graben in den Strukturen könnte man vielleicht noch die 
"project_templates.xml" in \AppData\Local\SEGGER\SEGGER Embedded 
Studio\v3\packages\SAM-C\XML von Hand anpassen.
Nur, naja, eigentlich sollte sowas ja einstellbar sein ohne die Packages 
von Hand manipulieren zu müssen.


Und noch eine Frage, setzt das Segger Embedded Studio irgend einen 
Define den man zur Compile-Zeit abfragen könnte?
1
#if defined (__Segger__)
2
 #include <SAMC.h>
3
#else
4
 #include "sam.h" // AS7
5
#endif

von Rudolph R. (rudolph)


Lesenswert?

Okay, ich habe die "project_templates.xml" von Hand geändert, das 
CMSIS_4 taucht dort an drei Stellen auf.

Dann habe ich eine neue Solution erstellt und jetzt wird CMSIS 5 
verwendet.

Das muss doch aber noch anders gehen??


Naja, mein Projekt compiliert zwar jetzt komplett ohne Warnungen durch 
und ich musste dafür nur zwei Mal "sam.h" in <SAMC.h> ändern.
Optimierungslevel ist 2, wie auch im Atmel Studio 7.
Enable All Warnings: Yes
Enforce ANSCI Checking: Yes

In AS7 habe ich -Wall, -Wextra und -pedantic an.

Der Ausgabe vom Build nach ist das im ES in etwa das gleiche.

Nur, das was aus dem ES fällt läuft noch nicht, ist auch etwas kleiner 
als das Programm aus dem AS7:

AS7: 17800 bytes
ES: "14.6KB"

Hmm, CMSIS, zwei Funktionen die ich benötige sind NVIC_SetPriority() und 
NVIC_EnableIRQ() - aber nur wenn ich den SPI per DMA bediene.

Also DMA per Define ausgeschaltet, ES: "14.5KB" und funktioniert.

-> Die "project_templates.xml" von Hand zu ändern war so für sich wohl 
nicht besonders erfolgreich.

Wenn das schon "läuft", schauen wir mal nach der Ausführungszeit.
AS7 / GCC 6.3.1 : 395µs
ES / GCC "arm-8-2019-q3-update : 400µs

Hmm, okay, das ist eher kein Grund zum Umsteigen.

Edit: ES mit CMSIS 4: 391µs und "13.6 KB"

Seltsam, vor allem ist in der ausgemessenen Funktion überhaupt nichts 
drin was auf CMSIS zugreifen sollte.

Mit DMA und CMSIS_4 läuft das Programm auch nicht.

-> wo auch immer der Fehler ist... grr

Edit2: ach so, mit DMA ist die Funktion nur 142µs unterwegs, das ist 
etwa 230 Mal weniger warten auf den SPI..

: Bearbeitet durch User
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.