www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ext. SRAM benutzen


Autor: Uwe Seidel (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: Uwe Seidel (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

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.