Großes Array auf CC1350 TI-RTOS

OP #5392763
Lesenswert?

Hallo zusammen,
Ich habe Probleme mit dem Verständniss wie ich große arrays auf einem 
CC1350 speichern soll, sodass ich die Daten noch lesen und speichern 
kann.

Ich möchte ein array mit floats speichern, wie fogt:
1
float prediction[365][12];

Das gibt mir den folgenden Fehler.
1
error #10099-D: program will not fit into available memory. run placement with alignment fails for section ".bss" size 0x577f

Das array ist ganz klar zu groß für den SRAM. Also habe ich versucht es 
mit #pragma directives direkt in den FLASH zu setzen.
1
//prediction array (save to flash)
2

3
#pragma NOINIT (prediction);
4

5
#pragma LOCATION( prediction , 0x10000 );
6

7
float prediction[365][12];

Doch sobald ich auf das array zugreifen will hängt sich mein µC auf.


Ich habe dann das NSV (non-volatile-storage) Beispiel von TI gefunden. 
IUnd versucht es auf meine Bedürfnisse anzupassen. Das hat aber nicht 
funktioniert. Ich verstehe nicht wie ich damit mit arrays arbeiten soll. 
Anscheinend example wird lediglich mit einem kleinen buffer gearbeitet 
der immer überschrieben wird.

Was ist der einfachste Weg ein so großes Array zu benutzen? Ich bin 
planlos wie man das anstellen soll und hoffe hier kann mich jemand auf 
die richtigen Weg/Methode weisen.

Vielen Dank schonmal!
Gast #5392796
Lesenswert?

Nun ändern kannst du das Array im Flash ja sowieso nur mittels Flash 
Funktionen (kenne es nur von anderen Prozessoren).

Also legst du das große Array mittels const ins Flash, das ist dann dein 
"init" Wert.

Du hast nun nur das Problem, dass der Compiler nicht weiß, dass sich das 
Array ändern kann.

Sollte aber so funktionieren:

const float initvalues [] = {....}

volatile float * prediction = initvalues;

Schreiben auf das Array mit Flash Funktionen.
Lesen über prediction[][]

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