ext. SRAM benutzen

Gast #63429
Lesenswert?
• ▲
▼
Hi

nachdem ich das nun nicht auf die Reihe krieg , frag ich mal um Hilfe.
so siehts aus:
ext SRAM Samsung K6T1008c2e; Addr. Latch 74HC373;
beides angeschlossen und elektr. geprüft.

Code:
#define SRAM __attribute__((section(".noinit")))
.
uint16_t la[4000] SRAM;
.
MCUCR |=(1<<SRE);
.
for(uint16_t i=0;i<4000;i++){la[i]=i;}
.
for(uint16_t i=0;i<4000;i++)
       printf("Platz : %5d Wert : %5d \n\r",i,la[i]);

Probleme:
-geht nicht :-) d.h. geht schon aber.....
-geht das auch anders ?
-der versuch :
EXTMEMOPTS = -Wl,-Tdata=0x801000,--defsym=__heap_end=0x80ffff
,-Wl,--change-section-address=.noinit=0x801100

führt ja zu:

Size after:
lader.elf  :
section     size      addr
.data          6   8392704
.text       4946         0
.bss           6   8392710
.noinit     8000   8392716
.eeprom        0   8454144
.stab       1572         0
.stabstr    2340         0
Total      16870

Errors: none
-------- end --------

sollte da nicht
.noinit     8000   8392960
stehen ? ist das nun im ext. ram oder wie versteh ich das?
Und wenn ja , wo genau. bei 0x801100 oder bei 0x80100C.

Kann mich bitte mal jemand aufklären.

Danke
Uwe Seidel
Gast #63430
Lesenswert?
• ▲
▼
1.) Ist die .noinit-Section denn wirklich, was Du willst?

2.) Klar geht das auch anders.  Einfach den externen RAM am
    Compiler vorbei gehen lassen und dann

    uint16_t *la = (uint16_t *)0x1000;

    setzen.

3.) Hast Du Dir das Kapitel über malloc() in der Doku
    durchgelesen?  Dort steht ein bißchen was über die
    Anordnung im Speicher drin.

Warum verschiebst Du eigentlich den Anfang von .data?  Wenn überhaupt,
siet mir 0x801000 ein bißchen daneben aus.  Das müßte doch (je nach
MCU) 0x800100 oder 0x800060 sein.
Gast #63431
Lesenswert?
• ▲
▼
Hi,
danke erstmal.

zu 1.
ja , ist ein persönlicher Wunsch , die großen Datenarray´s im ext. RAM
abzulegen. Es sollten auch nur diese sein.
In der Doku steht noch , dass der Heap dort auch hin sollte, wenn ext.
RAM vorhanden , warum eigentlich ?

zu 2.
ja genau. aber noch was anderes nicht?

zu 3.
ja.

woher das .data verschieben kommt , ist mir jetzt echt ein Rätsel. Ist
mir garnicht aufgefallen. Hab das manuell gerichtet. Die "komische"
Adresse 0x801000 war mein Tippfehler, ist eine "0" weniger.

Jetzt:

.
.
Linking: lader.elf
avr-gcc -mmcu=atmega128 -I. -g   -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=lader.o  -std=gnu99
-Wp,-M,-MP,-MT,lader.o,-MF,.dep/lader.elf.d lader.o    --output
lader.elf -Wl,-Map=lader.map,--cref
-Wl,--section-start=.noinit=0x801100    -lm

.
.
Size after:
lader.elf  :
section     size      addr
.data          0   8388864
.text        380         0
.noinit     8000   8392960  <--- AHA !
.bss           2   8388864
.eeprom        0   8454144
.stab       1572         0
.stabstr    2340         0
Total      12294

Errors: none
-------- end --------

Also ist die Adresse jetzt richtig.
Sieht wohl so aus, also ob ich den Wald vor lauter Bäumen nicht gesehen
hab.
Deswegen hab ich mich ja hierher gewandt...

Also dann mal DANKE
Uwe
Gast #63432
Lesenswert?
• ▲
▼
> ja , ist ein persönlicher Wunsch , die großen Datenarray´s im
> ext. RAM abzulegen. Es sollten auch nur diese sein.

OK.  .noinit ist ein Weg dafür, sicher gar nicht mal ein schlechter
(weil dafür schon alles ,,vorgekocht'' ist).

> aber noch was anderes nicht?

Es führen immer sehr viele Wege nach Rom, aber diese beiden sind
sicher die praktikabelsten, insofern würde ich jetzt keinen
Gehirnschmalz in was anderes stecken.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.