Forum: Mikrocontroller und Digitale Elektronik SystemInit() CMSIS Cortex M: Konfigurieren?


von HabsVergessen (Gast)


Lesenswert?

Hallo,
ich schmöker mich gerade in die Cortex-Welt ein, habe aber schon früh 
ein kleines Verständnisproblem:
SystemInit() ist in der Datei system_xxxx.c, gehört zum CMSIS, dient 
überwiegend zur Einstellung der verschiedenen Clocks, wird vom 
Chip-Hersteller geliefert und schon vor main() aufgerufen.

Wie ist dann das übliche Vorgehen, wenn ich z.B. mit einem anderen 
SystemCoreClock arbeiten will: Sollte man seine projektspezifische 
system_xxxx.c abändern (stelle ich mir sehr unübersichtlich vor; zumal 
es ja ein "Standard" sein soll) oder erst den ganzen Geraffel des 
Herstellers durchlaufen lassen und dann in main() umkonfigurieren?

von Roland H. (batchman)


Lesenswert?

Ob meine Art üblich ist, weiss ich nicht. Es ist ja nicht einmal so, 
dass ich persönlich eine "übliche" Art habe.

Zuerst entferne ich den SystemInit()-Aufruf im startup, auf alle Fälle 
bis man den µC im Griff hat. Oft genug bleibt er in SystemInit() am 
Anfang hängen. Für manche Zwecke reichen die Grundeinstellungen (i. d. 
R. 8 MHz) aus.

Wenn der Code in system_xxxx für meine Zwecke ausreicht (meistens wird 
dort der max. Takt eingestellt), dann rufe ich ihn explizit auf. Es gibt 
m. W. auch von manchen Herstellern Spreadsheets, welche einem die Werte 
ausrechnen, welche man dort einfügen kann.

Teilweise passe ich die Werte für SystemInit() auch an oder nehme es als 
Vorlage für eine eigene Implementierung.

M. E. nach am einfachsten ist es, für den µC mit Google eine Alternative 
Lösung zu suchen; die bieten oft Hilfe für verschiedene Frequenzen (auch 
zur Laufzeit), per Parameter wählbar. Denn eine gut lesbare SystemInit() 
gibt's m. E. nach selten.

von HabsVergessen (Gast)


Lesenswert?

Ich habe schon fast befürchtet, daß es hier keine "übliche" 
Vorgehensweise gibt. Da man sich ja so oder so mit dem Manual 
beschäftigen muß, werde ich wohl einfach die SystemInit() im Startup 
auskommentieren, meine eigene MySystemInit() in Anlehnung an das 
Original schreiben (ist ja kein Hexenwerk) und einfach in main() als 
erstes aufrufen. Da die originale SystemInit() als letztes im Startup 
(system_xxxx.c) aufgerufen wird, sollte es so auch keine Probleme geben. 
Hoffe ich zumindest, da ich das ganze Startupgeraffel noch nicht von 
Anfang bis zu meiner main() verfolgt habe ...

von Roland H. (batchman)


Lesenswert?

> die SystemInit() im Startup
> auskommentieren, meine eigene MySystemInit() in Anlehnung an das
> Original schreiben (ist ja kein Hexenwerk) und einfach in main() als
> erstes aufrufen. Da die originale SystemInit() als letztes im Startup
> (system_xxxx.c) aufgerufen wird, sollte es so auch keine Probleme geben.

Gibt keine Probleme, so mache ich das für alle CM0/CM3/CM4, stm32/lpc.

> Hoffe ich zumindest, da ich das ganze Startupgeraffel noch nicht von
> Anfang bis zu meiner main() verfolgt habe ...

Der Startup ist i. d. R. sehr kompakt und sollte wesentlich 
verständlicher als SystemInit() sein. Oft genug ist dieser auch in C. 
Zwischen CM0, CM3 und CM4 zu 80% gleich. Ein Blick lohnt sich in jedem 
Fall wg. der Handler, aber auch um zu prüfen, ob der C++-Support 
enthalten ist.

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.