Startadresse vom Ram Code im Flash

Gast #4668952
Hallo,
ich habe ein STM32F7 vor mir liegen und würde gerne Code im TCM 
ausführen.
Leider fehlt mir nur noch ein Schritt zum Funktionierenden Code.
Währen des Starts muss ich den Code aus dem Flash in den Ram kopieren.
Leider fehlt mir die Information wo der Code im Flash abgelegt wurde und 
wie lang er ist.
Wie kann ich mit dem Linkerscript eine Globale erzeugen, mit der ich die 
Informationen erhalte.

Hier ein Ausschnitt aus meinen Linkerscript:
1
MEMORY
2
{
3
  FLASH (rx)       : ORIGIN = 0x08000000, LENGTH = 1024K - 128K
4
  RAM (xrw)        : ORIGIN = 0x20010000, LENGTH = 256K
5
  ITCM_MEM (xrw)   : ORIGIN = 0x00000000, LENGTH = 16K
6
  DTCM_MEM (rw)    : ORIGIN = 0x20000000, LENGTH = 64K
7
}
8
  .itcm :
9
  {
10
      . = ALIGN(4);
11
      _sitcm = .;        /* create a global symbol at data start */
12
       *(.itcm);
13
      . = ALIGN(4);
14
      _eitcm = .;        /* define a global symbol at data end */
15
  } >ITCM_MEM AT>FLASH

Hier die Funtion die im TCM ausgeführt werden soll:
1
__attribute__( ( long_call, section(".itcm") ) )
2
float iir_filter(float x)
3
{
4
  if(x != x){
5
    x = 0;
6
  }
7
  z[0] = x - Za[1] * z[1] - Za[2] * z[2] - Za[3] * z[3];
8
  y =  Zb[0] * z[0] + Zb[1] * z[1] + Zb[2] * z[2] + Zb[3] * z[3];
9
  z[3] = z[2];
10
  z[2] = z[1];
11
  z[1] = z[0];
12
  return y;
13
}

Mfg Tobi
#4668981
Die Addresse im Flash erhälst du mit LOADADDR()
1
MEMORY
2
{
3
  FLASH (rx)       : ORIGIN = 0x08000000, LENGTH = 1024K - 128K
4
  RAM (xrw)        : ORIGIN = 0x20010000, LENGTH = 256K
5
  ITCM_MEM (xrw)   : ORIGIN = 0x00000000, LENGTH = 16K
6
  DTCM_MEM (rw)    : ORIGIN = 0x20000000, LENGTH = 64K
7
}
8

9
SECTIONS
10
{
11
  _siitcm = LOADADDR(.itcm);
12

13
  .itcm :
14
  {
15
      . = ALIGN(4);
16
      _sitcm = .;        /* create a global symbol at data start */
17
       *(.itcm);
18
      . = ALIGN(4);
19
      _eitcm = .;        /* define a global symbol at data end */
20
  } >ITCM_MEM AT>FLASH

hilft dir das?
Gast #4719332
Danke .. mir hat das geholfen.
Ich ergänze dann gleich etwas...


Ich hab jetzt auch ewig gesucht warum es im debugmode zwar funktioniert
aber nach einem Reset das gerät hängen bleibt.
Der Debugger scheint die Daten direkt reinzukopieren.

Ich habe die copy-funktion in der
1
extern unsigned long _siitcm;
2
extern unsigned long _sitcm;
3
extern unsigned long _eitcm;
4

5
void SystemInit(void)
6
{
7
  // copy to ITCM RAM !!!
8
  unsigned long *pulSrc, *pulDest;
9
  pulSrc = &_siitcm;
10

11
  for(pulDest = &_sitcm; pulDest < &_eitcm; )
12
  {
13
    *(pulDest++) = *(pulSrc++);
14
  }
15
.....

im .ld
1
  _siitcm = LOADADDR(.itcm);  
2
    /* ITCM RAM for critical functions */
3
  .itcm :
4
  {
5
    . = ALIGN(4);    
6
    _sitcm = .;        /* create a global symbol at itcm start */
7
    *(.itcm)
8
    *(.itcm*)    
9
    . = ALIGN(4);
10
    _eitcm = .;        /* define a global symbol at itcm end */
11
  } >RAM4 AT> ROM

funktionen landen mit
1
__attribute__((section(".itcm")))  void foo(){
2
   // code
3

4
}

im ITCM


Gerade bei rechenintensiven Funktionen boostet das ordentlich.
Ich habe den TJpgDec von elm chan hier laufen und erreiche so fast die 
doppelte Geschwindigkeit.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.