Hallo zusammen.
Ich bin gerade dabei, ein wenig mit einem AT91SAM7S256 zu "spielen", und
habe soweit mein erstes "Minimalprojekt" am laufen (Die Grundlage, auf
der alle anderen später aufbauen sollen).
Allmählich begreife ich auch die Struktur des Programmaufbaus,
allerdings hätte ich da noch einige Fragen zu der Umsetzung:
1.) Bei vielen Beispielanwendungen ist als erste zu linkende Datei immer
eine "CRT.S" Datei enthalten. Soweit ich es verstanden habe dient diese
Datei dazu, direkt auf Position 0x0000000 die System Interrupts per
Sprungkommando einzubinden ( bedeutet "_vec_reset: b _init_reset"
Sprung nach Funktion _init_reset? Oder ist das ein "b" ein define? Ich
habe "b" nirgends als assemlberbefehl finden können)
2.) Könnte man die Datei crt.s auch als normales C-File anlegen?
Prinzipiell müsste ich ihm ja nur sagen, dass auf Adresse 0x0000 direkt
eine Sprungoperation auf eine Funktion reset_event_handler ausgeführt
werden soll. Aber wie macht man sowas in C? Wenn ich in dieser Datei
einfach nur
1 | void reset_event_handler(void)
|
2 | {
|
3 | init_frequency();
|
4 | ....
|
5 | main();
|
6 | }
|
schreibe, dann kommt der Debugger durcheinander. Ist ja auch
verständlich, da alle anderen System Interrupts des Vectors mit teilen
dieser Funktion belegt sind.
3. Bin ich auf dem Holzweg, wenn ich eine Datei MIN_CRT.s schreibe, die
nichts anderes enthält als:
1 | .global _vec_reset
|
2 | .global _vec_undef
|
3 | <...>
|
4 | .text
|
5 | .arm
|
6 | .align
|
7 | <...>
|
8 | _vec_reset: b reset_event_handler
|
9 | _vec_undef: b undefined_event_handler
|
10 | <...>
|
dass ich von dort aus direkt die C-Funktionen anspringen könnte? Wenn
ich "_vec_reset: b main" schreiben würde, wäre dann alles so, wie
man es bei einem Standard C-Projekt erwarten würde, nämlich dass der
Prozessor im Defaultzustand in die void main(void) Funktion springt?
Oder sollte man sowas unterlassen?