Forum: Mikrocontroller und Digitale Elektronik jump zu best. Memory-Adresse


von Bernd S. (mms)


Lesenswert?

Hallo,

wie kann ich in C zu einer bestimmten Speicherstelle im Memory springen?
1
void test(void)
2
{
3
   //führe code aus....
4
   
5
   //-> sprung zu einer neuen Speicherstelle
6
   "jump 0x20000000;" 
7
   return 0;
8
  
9
}



Gruß
Bernd

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Auf nem PC?? AVR / ??

avr kann z.b. asm("rjmp 0xFFAA"); resp asm("jmp 0xFFAA"); bei den 
größeren Versionen... Aber ob das nicht kuddelmuddel gibt....
Gab es in C nicht auch ein "goto"??

von Bernd S. (mms)


Lesenswert?

auf einem ARM von Atmel soll der Programmcode laufen.

goto bringt mir nichts, da der Sprung zu einer Speicherstelle im Memory 
/ Flash verweisen soll.

Gruß
Bernd

von eProfi (Gast)


Lesenswert?

Versuche mal, ob diese Notation zulässig ist:
      asm(jmp Bootloader);

Wobei "Bootloader" eine C-Funktion ist.
Muss diese unbedingt an einer fixen Adresse liegen?
Das musst Du dem Linker mitteilen.


Nebenbei:
   return 0;
Wenn der Funktionwert  void  ist, wird in der Regel nichts returned.

von Simon K. (simon) Benutzerseite


Lesenswert?

eProfi wrote:
> Versuche mal, ob diese Notation zulässig ist:
>       asm(jmp Bootloader);
Das geht so sowieso nicht. Da müssten noch Anführungsstriche drumherum. 
Dann hast du das Problem, dass zum Assemblerzeitpunkt "Bootloader" nicht 
bekannt ist.

> Wobei "Bootloader" eine C-Funktion ist.
> Muss diese unbedingt an einer fixen Adresse liegen?
> Das musst Du dem Linker mitteilen.
Ich kann da nen Trick. Der geht in etwa so:
1
Function(1, 2, 3); //<- Funktionsaufruf

Ganz ohne Assembler! :O

von Bernd S. (mms)


Lesenswert?

Hallo

folgenden Funktionspointer habe ich hier im Forum gefunden. Ich denke 
damit sollte es funktionieren.
1
void (*functionptr)( void ) = 0x20000000;
2
3
...//innerhalb der funktion
4
5
functionptr();

Gruß
Bernd

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.