Forum: Mikrocontroller und Digitale Elektronik AVR32: Heap in SDRAM und großen Datenbereich festlegen.


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.
von Godi S. (godi22)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe den heap in den SDRAM verschoben,
damit freeRTOS den stack für die Tasks aus dem SDRAM zugewiesen bekommt.
Dies funktioniert auch.

Mein SDRAM hat 256MBit = 32MB.
2MiB möchte ich für den Heap verwenden.
Der Rest soll für's Datenloggen zur Verfügung stehen.

Mein Probleme sind:
Wie lege ich den Speicherbereich für das Datenloggen im linker richtig 
an?
Im linker script bezeichnet als SDRAM_SAVE_DATA.
Stimmt das so wie in dem zum Schluss stehenden Skript?

Wie greife ich auf die Startadresse von .save_data im C-Programm zu?
Mein Versuch:
__attribute__((__section__(".save_data"))) static unsigned long test;
static unsigned long *sdram = &test;

Jedoch bricht mir dann der Compiler mit den folgenden 2 Fehlern ab:
Error  MotorControl.elf: warning: allocated section `.save_data' not in 
segment
Error  Program Memory Usage   :  30012098 bytes   5724,4 % Full  (Memory 
Overflow)

Wobei ich zu dem ersten Fehler im Handbuch AVR32795 Seite 18 einen 
Hinweis gefunden habe das dieses Warning (bei mir Fehler?) ignoriert 
werden kann.
Den zweiten Fehler kann ich mir nicht erklären.

Wäre super wenn mir da wer weiterhelfen kann und mich ein wenig darüber 
aufklären kann! :)


Meine Änderungen im Linker Script: (link_uc3a0512.lds)
MEMORY 
{ 
  FLASH      (rxai!w)  : ORIGIN = 0x80000000, LENGTH = 0x00080000 
  INTRAM    (wxa!ri)  : ORIGIN = 0x00000004, LENGTH = 0x0000FFFC 
  /*SDRAM total size = 256MBit = 32MB => length = 0x01E84800; start = 0xD0000000; end = 0xD1E84800 */
  SDRAM_HEAP    (wxa!ri)  : ORIGIN = 0xD0000000, LENGTH = 0x00200000 /*2MiB*/
  SDRAM_SAVE_DATA  (wxa!ri)  : ORIGIN = 0xD0200000, LENGTH = 0x01C84800 /*32MB - 2MiB*/
  USERPAGE        : ORIGIN = 0x80800000, LENGTH = 0x00000200 
} 

PHDRS
{
  FLASH          PT_LOAD;
  INTRAM_ALIGN        PT_NULL;
  INTRAM_AT_FLASH      PT_LOAD;
  INTRAM        PT_NULL;
  SDRAM_HEAP_AT_FLASH      PT_LOAD;
  SDRAM_HEAP        PT_NULL;
  SDRAM_SAVE_DATA_AT_FLASH    PT_LOAD;
  SDRAM_SAVE_DATA      PT_NULL;
  USERPAGE        PT_LOAD;
}

SECTIONS /* Nur die veränderten hinzugefügten Zeilen*/
{
  

  /* Use a default heap size if heap size was not defined. */  
  __heap_size__ = DEFINED(__heap_size__) ? __heap_size__ : LENGTH(SDRAM_HEAP);

  /* Use a default save data size if save data size was not defined. */
  __save_data_size__ = DEFINED(__save_data_size__) ? __save_data_size__ : LENGTH(SDRAM_SAVE_DATA);  


/* Hier stehen jede Menge andere Anweisungen */


  . = ORIGIN(SDRAM_HEAP);
  .heap :
  {
    __heap_start__ = .;
    *(.heap)
    . = __heap_size__;
    __heap_end__ = .;
  } >SDRAM_HEAP AT>SDRAM_HEAP :SDRAM_HEAP
  
  . = ORIGIN(SDRAM_SAVE_DATA);
  .save_data :
  {
  __save_data_start__ = .;
    *(.save_data)
    . = __save_data_size__;
    __save_data_end__ = .;
  } >SDRAM_SAVE_DATA AT>SDRAM_SAVE_DATA :SDRAM_SAVE_DATA
 

  /*.userpage... */  
}

: Bearbeitet durch User
von Peter M. (skybiker)


Bewertung
0 lesenswert
nicht lesenswert
Hallo godi S
ich habe auch das gleiche Problem mit dem Memory overflow,
aber nur mit dem Atmel Studio 6.0 und 6.1
mit dem AVR32 Studio klappt es richtig.
Welche oberfläche benutzt du zum entwickeln ?
Siehe dazu Beitrag "AT32UC3C mit Ateml Studio 6.1 Program memory usage memory overflow"
Gruß von Peter

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.