Forum: Mikrocontroller und Digitale Elektronik Großes Array auf CC1350 TI-RTOS


von Do L. (dotile)


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!

von Erik (Gast)


Lesenswert?

Mach es doch const, dann sollte es von alleine im Flash landen.

von Do L. (dotile)


Lesenswert?

Erik schrieb:
> Mach es doch const, dann sollte es von alleine im Flash landen.

Ja das habe ich bei einem anderen array gemacht, damit landet es 
automatisch im FLASH.

Doch mit
1
const float prediction[365[12];
 lassen sich Werte in meinem array ja nicht mehr ändern/ neu 
beschreiben.

von Erik (Gast)


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[][]

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.