www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM L2294 ext. SRAM


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe eine Frage zum Einrichten eines statischen
Byte-Arrays im ext. SRAM eines LPC2294 (Olimex-Board
L2294-8MB, Eclipse/Yagarto):

Kann ich nach der Konfiguration der Register PINSEL2=...
und BCFGx=... in meiner main.c bereits in einer Sub-Prozedur
ein funktionierendes statisches ARRAY deklarieren
(mit fester Adresse irgendwo >= 0x8000 0000) ?

Falls ja, mit welchem GCC-Befehl geht das (
 char gdata[100000] (????) 
-> ich bin mit speziellen GCC-Befehlen noch nicht so firm ...)

Falls nein, sind da tiefere Eingriff in den startup assembly
code erforderlich ?

Über einen kleinen Denkanstoss würde ich mich freuen; ich habe
bislang nur AVR (ASM/GCC) programmiert und nachdem die
ARM-UART0-Ausgabe klappt wird der LPC immer interessanter ...

Danke vorab für jede Hilfe
und Grüße,
Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Testweise habe ich versucht, das ARRAY explizit in einem separaten
Segment unterzubringen
also lokale Deklaration in einer Prozedur mit:
  static char gdata[100000] __attribute__ ((section (".xtd"))); 
sowie Einträge im linker-skript:
unter memory
MEMORY 
{
  [... hier steht noch was]
  xtd            : ORIGIN = 0x80000000, LENGTH = 0x160000 
}
unter sections:
SECTIONS 
{
  [... hier steht noch was]
  .bss :                /* collect all uninitialized .bss sections that go into RAM  */
  {
    _bss_start = .;          /* define a global symbol marking the start of the .bss section */
    *(.bss)              /* all .bss sections  */
  } >ram                   /* put all the above in RAM (it will be cleared in the startup code */

  . = ALIGN(4);            /* advance location counter to the next 32-bit boundary */
  _bss_end = . ;            /* define a global symbol marking the end of the .bss section */
  
  .xtd :                /* hinzugefügt: extended segment */
  {
    _xtd_start = .;
    *(.xtd)
    _xtd_end = .;
  } >xtd
}
  _end = .;              /* define a global symbol marking the end of application RAM */
  
mit dem Ergebnis:
-> Abarbeitung des make-Befehl dauert dann ziemlich lange,
-> Philips Flash Utility Upload schlägt fehl ("invalid hex file" )

Ich vermute, dass ich nicht drum herum komme, meine Variable in der 
.bss-Sektion zu platzieren und alles in den ext. Sram zu verlagern; nur 
kann das ja nicht sein, oder -> Henne/Ei-Problematik, da ich den EMC ja
erst in main() konfiguriere ... verwirrt

Kennt sich jemand mit der ext. sram-Deklaration aus bzw. kann mir
eine geeignete Quelle zum Nachlesen an die Hand geben ?

Gruß,
S.

Autor: Martin Laabs (mla)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mit dem normalen lpc21isp kannst Du nur den internen Flash beschreiben. 
Das utility weiß ja nix von dem externen Ram, noch wie dieser konkret 
angeschlossen ist. Weil der Eintrag aber immer noch in der HEX-Datei 
ist, gibt es den Fehler.
Du musst also die HEX-Datei so erzeugen, dass das xtd-Segment nicht mehr 
aus der elf Datei in die hex-Datei kommt. Schau Dir mal die -j und -R 
Option von objcopy an. (-R xst sollte Dein Problem lösen.)

Viele Grüße,
 Martin L.

PS: Alternativ kannst Du auch einfach einen Pointer <static char 
*getdata=0x8000000;> deklarieren und damit arbeiten als wäre es ein 
Array. Musst Dich dann, wenn Du mehrere Daten im Speicher hast, aber 
selber um die korrekten Adressen in Abhängigkeit der Größen kümmern 
weswegen das eigentlich keine saubere Lösung ist.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin,
vielen Dank für deine Antwort. Nachdem ich entsprechend deinem
Tipp in mein makefile
 -R .xtd 
eingefügt hatte, klappte das auch mit dem Upload. Ich hab aktuell
noch ein Problem die korrekten Daten zu bekommen ... hab da aber
schon einen dringenden Verdacht ;-)

Vielen Dank nochmals für deine schnelle Antwort und Hilfe.

Gruß,
Stefan

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.