mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Do L. (dotile)
Datum:

Bewertung
0 lesenswert
nicht 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:
float prediction[365][12];

Das gibt mir den folgenden Fehler.
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.
//prediction array (save to flash)

#pragma NOINIT (prediction);

#pragma LOCATION( prediction , 0x10000 );

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!

Autor: Erik (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Mach es doch const, dann sollte es von alleine im Flash landen.

Autor: Do L. (dotile)
Datum:

Bewertung
0 lesenswert
nicht 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
const float prediction[365[12];
 lassen sich Werte in meinem array ja nicht mehr ändern/ neu 
beschreiben.

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.