Funktionen mit fester Adresse im Flash aufrufen

Gast #759494
Lesenswert?

Hallo,

ich brauch mal dringend Hilfe, quäle mich schon zwei Tage mit dem 
Problem:

Ich möchte mit C (oder Inline-Assembler) Funktionen ausführen, die sich 
an einer bestimmten Adresse im Flash-Speicher befinden.

Meine bisherigen Versuche hatten mindestens die Folge, dass die UART 
ihren Dienst versagt hat. Ich habe 0 Ahnung warum.

  asm volatile("push 16\n"
         "push 17\n"
         "call 0x2000\n"
         "call 0x2100\n"
         "call 0x2200\n"
         "call 0x2300\n"
         "call 0x2400\n"
         "call 0x2500\n"
         "call 0x2600\n"
         "call 0x2700\n"
               "call 0x2800\n"
         "call 0x2900\n"
         "pop 17\n"
         "pop 16\n"::);

ist einer meiner Versuche.

Wäre echt dankbar, wenn da jemand ne Idee hat :)

Liebe grüße, enrico
Gast #759642
Lesenswert?

Interessant wäre sicherlich noch die Architektur. Was für ein Prozessor? 
Warum stehen eigentlich die Funktionen an festen Adressen? In GCC kannst 
du Funktionen an einer bestimmten Adresse aufrufen mit:
1
((void(*)(void))0x2000)();
2
((void(*)(void))0x2100)();
3
[C]
4

5
Oder etwas übersichtlicher:
6

7
[C]
8
typedef void (*funcptr)(void);
9
((funcptr)0x2000)();
10
((funcptr)0x2100)();

Oder noch übersichtlicher:
1
typedef void (*funcptr)(void);
2
funcptr func1 = (funcptr)0x2000;
3
funcptr func2 = (funcptr)0x2100;
4
func1();
5
func2();
Gast #762569
Lesenswert?

Danke erstmal für den Beispielcode, werde ihn mal ausprobieren.
Mein MC ist ein AVR, genauer ein ATMEGA32.
Die Funktionen stehen an festen Adressen, da sie währen des Betriebes 
von einem Computer aus geschrieben werden sollen, der bereits fertigen 
hex-Code sendet.
"Weiß" C eig. automatisch, dass das Adressen im Flash sind?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren