Daniel schrieb:
> Leider geht das nicht habe einen großteil meiner Unterprogramme schon
> fertig.
Dann hast du dein Projekt schlecht geplant.
ZU früh mit dem Coden angefangen, zu wenig Überlegung in die
Vorbereitung gesteckt.
Lehrgeld, das wir alle zahlen mussten und müssen.
Jetzt bist du drann mit Lehrgeld zahlen.
> Alles in Assembler (mit Keil uVision3). Hatte mir das am Anfang
> mit C überlegt. Da ich meine Datenerfassung am Port zeitlich an ein paar
> Steuersignale koppeln musste und das Timing ziemlich eng ist habe ich
> mich für Assembler entschieden weil ich nicht wußte wie das C Programm
> umgesetzt wird und ob die laufzeit dann passt damit ich kein Signal
> verpasse.
Das wäre mit einiger Sicherheit in C genauso machbar gewesen. Warum hast
du keine Vorversuche in C gemacht?
Aber selbst dann hättest du dein Programm in C machen sollen und die
eventuell zeitkritischen Dinge, so sie in C tatsächlich nicht machbar
wären, in Assembler auslagern.
> Jetzt muß ich versuchen mit einem C File eine A51 Datei zu
> erstellen die ich dann einbinden kann und mit LCALL aufrufen kann.
> Weiß nicht genau wie das geht. Muß ja irgendwo im C File was stehen
> haben
> das mein Hauptprogramm findet und dorthin springt. Also so wie bei den
> anderen Unterprogrammen name: und dann mit ret beendet.
Du zäumst das Pferd falsch auf.
C ist darauf angewiesen, dass der µC beim Hochfahren bestimmte Dinge
tut. Da müssen Sachen initialisiert werden. Da müssen
Funktionsaufrufkonventionen eingehalten werden, da müssen
Registerkonventionen eingehalten werden.
Unter der Motorhaube muss der Compiler für Ordnung in seinem
Abreitsbereich sorgen. Er tut dies, indem er sich streng an gewissen
Konventionen hält. Es ist schon unangenehm genug, sich an diese
Konventionen zu halten, wenn Assembler Routinen von C aus aufgerufen
werden. Aber umgekehrt, von einem Assemblerprogramm aus die Umgebung zu
herzustellen, dass die C-Funktion übernehmen kann, das kann sich zu
einer Sysiphusarbeit ausarten.