Gast
#3184543
Hallo, Ich nutze für ein Projekt mit einem dsPIC den C30-Compiler von Microchip, welcher auf dem GCC basiert. Folgendes Problem habe ich: Ich möchte etwas Code (I/O-Initialisierungen usw.) vor der RAM-Initialisierung ausführen. Wie kann ich hier am einfachsten vorgehen? Folgendes habe ich bereits versucht: 1. Ich habe eine eigene Section im Linker-Script geschaffen "io_init" und versucht eine Methode in diese Section per Attribut abzulegen. Dies funktioniert auch soweit, scheitert allerdings daran, dass der Compiler zum Ende der Methode einen "return"-Befehl erzeugt. Das Programm kann dadurch nicht funktionieren, da der Stack zu diesem Zeitpunkt noch gar nicht verfügbar ist. Ich habe keine Möglichkeit gefunden, den Compiler an der Erzeugung dieses Befehls zu hindern. (Eine Möglichkeit wie "naked" beim avr-gcc scheint es beim C30 nicht zu geben.) 2. Ich habe versucht meine I/O-Initialisierung direkt in Maschinensprache selbst zu schreiben. Dabei kann ich natürlich nach Belieben Befehle weglassen. Aber hier kommt das nächste Problem: Der Assembler erlaubt nur ".section .text". Schreibe ich jedoch ".section .io_init" gibt er mir zu verstehen, dass er Code nicht im Datenbereich ablegen könne. Wer weiß Rat? Am besten würde es mir gefallen, wenn ich die Initialisierung selbst auch gleich in C schreiben könnte und nur die Erzeugung des "return"-Befehls irgendwie umgangen würde. Microchip hat eine Section "user_init" vorgesehen. Diese ist allerdings Unsinn, da sie unmittelbar vor "main" aufgerufen wird. Die ganzen statischen Variablen usw. sind dann allerdings schon initialisiert. Liebe Grüße, Michael