mikrocontroller.net

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


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: norad (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Franjo R. (franjo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.