Forum: Mikrocontroller und Digitale Elektronik Zwei Programme zusammenhängen


von Philipp (Gast)


Lesenswert?

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

von Frank L. (hermastersvoice)


Lesenswert?

schreib deine Programme in Assembler.

von Rudolph (Gast)


Lesenswert?

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();
 }

}
---

von Durchblicker (Gast)


Lesenswert?

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?

von Philipp (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Und was soll dann passieren? Die beiden Programme haben doch garkeinen 
Bezug zueinander.

von Unbekannter (Gast)


Lesenswert?

Vor allem gibt es so etwas wie absolute Sprungadressen, 
Interrupt-Vektoren, Konstanten im Flash an aboluten Adressen etc.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.