Forum: Mikrocontroller und Digitale Elektronik Taugt der Startupcode von Keil für ARMs was?


von Chris (Gast)


Lesenswert?

Hallo,
es gibt ja eine kostenfreie EVAL Version von Keil, die Codegrößen von 
bis zu 16kB zulässt. Da ich zumindest in absehbarer Zeit keine größeren 
Programme plane und ich Keil eigentlich ganz nett finde, wollte ich 
fragen, ob der Startupcode den Keil automatisch generiert brauchbar ist, 
oder ob der in der Regel so großer Anpassungen bedarf, dass ich auch 
gleich selber welchen schreiben könnte? Target sind ARMs, wie im Betreff 
schon erwähnt. Vor allem auch mal "exotischere" Typen, zu denen noch 
nicht so viele Beispiele im Netz kursieren.
MfG
Chris

von norad (Gast)


Lesenswert?

Ich bin aus dem Starup-Code nie wirklich schlau geworden und es hat mich 
auch immer gestört, weil ich es nicht verstanden habe.
Deshalb hab ich es immer über Board geworfen.

sicherlich hat es seinen Sinn für den jenigen der es versteht;)

Den Startupcode braucht man, glaube ich, nicht wirklich.

von Franjo R. (franjo)


Lesenswert?

Hallo Chris,

ich hab bisher fast aussschließlich mit Keil an ARM Prozessoren 
gearbeitet und kann bisher nicht über die startup klagen solang dein 
Target auch unterstützt wird. Die Startup ist nicht für jeden µC gleich 
da sich die Speicheradressen wie zumbeispiel entryAdresse der Main 
unterscheiden.
Ebenso gilt es für den Stack der sich in den Unterschiedlichen 
Betriebsmodies also USER/SVC/ISR... unterscheidet. Wenn dir der 
jeweilige StackSpeicher zu klein ist oder zu groß kannst dies ja auch 
selbst kurz eintragen.

Die ErrorHandler Sprungadresse sind ebenfalls von der Keil Startup schon 
geschrieben doch im Fall eines Aborts oder Resets sind die 
Standartroutinen glaub eh immer ein Reset

Ansonsten werden ja nur Taktraten und PLL einstellungen vorgenommen. Das 
kannst entweder in der startup selbst ändern oder einfach wenn in der 
Main() drin bist ne Initialisierung in C schreiben.
Ich hoff das Hilft dir ein wenig weiter. CYA

von Dietmar (Gast)


Lesenswert?

Chris:

Der Keil Startup Code für LPC21xx und LPC22xx paßt komplett auf diese 
gesamte Bausteinserie und ist ausgereift. Bei den neueren LPC23xx und 
24xx hab ich allerdings keine Erfahrung.

Die Keil Startup.s in der Demo-Version ist voll in Ordnung und die selbe 
wie in der Vollversion, enthält alle Grundinitialisierungen, auch die, 
die man auf Grund der Geschwindigkeit und Änderung der Operation Modes 
in C nicht so gut bewerkstelligen kann:

Initialisierung der Stacks für alle Operation Modes
Heap Speicherreservierung (für ARM RealView)
Interrupt- und Exception- Vektoren mit Default-Labels (Endlos-Schleifen 
für die Exceptions, die man bei Bedarf anpassen kann)
PLL Initialisierung
MAM Setup
External Memory Controller

Selbst habe ich hinzu gefügt:

IRQ Surprise Interrupt Handler mit IRQ Surprise Interrupt Zähler
FIQ Surprise Interrupt Handler mit FIQ Surprise Interrupt Zähler
Diese Zähler kann man z.B. über UART an Hyperterminal ausgeben oder auf 
dem CAN-Bus an den CAN-Analyser ins Nutzdatenfeld, um zu sehen, ob der 
ARM irgendwelche Mätzchen (Unannehmlichkeiten) macht.

Und die Unannehmlichkeiten habe ich tatsächlich, bis zu 100000 FIQ 
Capture Interrupts pro Sekunde (aus hochgenauer Frequenzmessung) und 
Watchdog Feed, das konnte bisher nicht gelöst werden.

Wenn du den Startup-Code selbst erstellen wolltest, nur um den ARM erst 
mal überhaupt vernünftig ans laufen zu bekommen, wärst du eine Weile nur 
damit beschäftigt, bis dein ARM überhaupt vernünftig läuft.

Die Startup.s selbst zu erweitern, ist natürlich jedem User frei 
vorbehalten.

Ich verwende LPC2129 und 2138, die Dinger laufen mit der Keil Startup 
völlig reibungslos.

Im C-Code nach main() initialisiert man denn das was man für seine 
Anwendung noch braucht, z.B. I/O-Ports, die Peripherals und Exception 
Behandlung Funktionen (ganz normale Funktionen, nicht als IRQ o.ä. 
deklariert).

Für die Exceptions Undef, DAbt, PAbt, habe ich einen Sprung von den 
Vektoren in der Startup.s zu einer C-Funktion installiert und die 
entsprechende Endlosschleife gelöscht.

Die Exceptions behandele ich zunächst noch als schnell initialisierten 
Watchdog-Reset mit zwei falschen Feed-Befehlen, da ich mit den 
Exceptions zur Zeit noch nichts konkretes anzufangen weiß. Später in der 
richtigen Anwendung, sollte natürlich niemals mehr eine Exception 
auftreten.

Mit dem ARM Assembler wird man früher oder später etwas vertraut, 
spätestens dann, wenn man mal 2 separate unabhängige Programme im ARM 
installieren muß und die Interruptvektoren an das aktive Programm 
umleiten muß.

Gruß

Dietmar

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.