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?
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.
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 ...
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.