Gast
#729293
Hallo,
ich sitze gerade an einem mini Task-Sheduler und stehe vor einem
Problem.
Und zwar bekomme ich es nicht hin, einen einer c-Funktion übergebenen
Funktionspointer aus dem Inline Assembler aufzurufen.
Folgendes führt zu einem Reset:
void start_user_thread(callback_t thread)
{
asm volatile(
"pop r3 \n\t"
"call #activate_sheduler \n\t"
"call r15 \n\t"
"call #disable_sheduler \n\t"
...
}
wenn ich den "call r15" durch "thread()" in c ersetze, funktioniert
alles wunderbar. Das Disassemblieren der funktionierenden Funktion
zeigt: gcc setzt es genauso um, nur dass er den Pointer aus r15 nach r11
verschiebt und darauf den call macht. Das will ich aber gerade
vermeiden, da ich das gesicherte r11 nicht auf dem stack haben will.
Weiss jemand wo hier der Fehler ist?