WIE LPC2292 Methode in RAM kopieren und dort ausführen

Gast #1923676
Lesenswert?

Verwendete Hardware: ARM uC LPC2292 von NXP
Verwendeter Compiler: Keil uVision 3.72
Programmiersprache: C zu kleinen Teilen ASM
Verwendeter Debugger: Lauterbach

Mein Vorhaben:
Ich möchte eine Methode in einen freien RAM-Bereich kopieren und dort 
dann ausführen. Ziel ist es später einmal eine ISR in den RAM zu 
kopieren und dort laufen zu lassen.

Bisher habe ich es geschafft diese Methode
1
void IRQ_im_RAM_Routine(void)__irq
2
//void IRQ_im_RAM_Routine(void)
3
{
4
  //Routine ist 79Byte groß
5
  if (IOPIN3 & WD_TRIG)
6
  {
7
    IOCLR3 = WD_TRIG;
8
  }
9
  else
10
  {
11
    IOSET3 = WD_TRIG;
12
  }
13

14
  T0IR = T0IR;
15
  VICVectAddr = 0x00000000uL; //TerminateISR
16

17
}

mittels Pointer in den RAM zu kopieren und auch aufzurufen.

Nun zu meinem Problem:
Im Debugger kann ich mir wunderbar anschauen wie der Code korrekt 
kopiert wird und auch angesprungen wird. Beim ersten LDR.... im 
Dissassembly der RAM-Routine springt der Controller allerdings in die 
Abbruch-Exception.

Ich vermute, dass die zum großen Teil relativistisch (z.B. relative 
Sprünge...) ausgelegten Assemblerbefehle für die Adresse im RAM nicht 
mehr stimmen und deshalb die Exception auftritt. Falls das so ist, wie 
kann ich dem Compiler anweisen mir die og Methode für den RAM-Bereich zu 
kompilieren? Oder liegt es noch woanders dran?

Die Methode die in den RAM kopiert sieht übrigens so aus:
1
void ISR_in_RAM_kopieren(void)
2
{
3
  uchar8* ucZielAdresse;
4
  uchar8* ucQuellAdresse;
5
  uchar8 ucByteCount = 0;
6

7
  ucZielAdresse = (uchar8*)0x40000020;
8
  ucQuellAdresse = (uchar8*)IRQ_im_RAM_Routine;
9

10
  for (ucByteCount = 0; ucByteCount < 79; ucByteCount++)
11
  {
12
    *ucZielAdresse = *ucQuellAdresse;
13
    ucZielAdresse++;
14
    ucQuellAdresse++;
15
  }
16
}

Wäre super wenn mir jemand weiterhelfen könnte oder mir Quellen für 
Beispielcode nennen könnte.

Gruß

Mandrake

P.S.: Ein andere Überlegung führt mich in Richtung Scatterfile/Linker, 
aus der Hilfe von Keil werde ich allerdings nicht so wirklich schlau. In 
Sachen Linker bin ich leider nicht sehr bewandert....

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