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