Hallo Ich möchte auf einen AVR zwei Programme laden. Ich möchte folgendes machen: Nach einem Reset liest der AVR einen Schalter ein und springt dann entweder zum ersten oder zum zweiten Programm. Kann der AVR-GCC anstelle einer hex Datei nur Assembler machen? Dann könnte ich den Programmstart in ASM schreiben und das ganze so zusammenhängen. Oder hat jemand einen anderen Vorschlag? Danke für eure Hilfe
So etwa? --- main_one(void) { while(1) { } } main_two(void) { while(1) { } } int main(void) { uint8_t x=0; DDRA = 0x00; x = PINA; x &= 0x01; if(x == 0) { main_one(); } else if(x == 1) { main_two(); } } ---
Was meinst Du mit zwei Programmen? Zwei Projekte, die beide in den AVR sollen? Oder nur einen Aufruf von zwei unterschiedlichen Unterprogrammen in ein- und demselben Projekt?
Es sind unabhängige Projekte. Aber ich habe eine Lösung: Ich disassembliere die HEX Datei, die mir der GCC gemacht hat, und bau die zwie ASM Files zusammen.
Und was soll dann passieren? Die beiden Programme haben doch garkeinen Bezug zueinander.
Vor allem gibt es so etwas wie absolute Sprungadressen, Interrupt-Vektoren, Konstanten im Flash an aboluten Adressen etc.
Philipp wrote: > Es sind unabhängige Projekte. Aber ich habe eine Lösung: Ich > disassembliere die HEX Datei, die mir der GCC gemacht hat, und bau die > zwie ASM Files zusammen. Viel Spass. Da dürfte es wesentlich einfacher sein ein drittes Projekt aufzusetzen, welches die Teile aus den beiden vorhandenen Projekten in Quellcodeform wiederverwendet. Dazu müssen wahrscheinlich die beiden Originalprojekte etwas verändert werden, vorallem wirst du in main() etwas aufräumen müssen und möglicherweise eine Zwischenfunktion so wie das oben schon mal gezeigt wurde, einbauen, aber das hat wenigstens Zukunft und ist zum Laufen zu bringen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.