mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 SRAM Offset


Autor: Boris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und Guten Abend,

ich versuche mittels des Z-Pointers (R30,R31) auf die Daten im SRAM
zuzugreifen. Laut Doku hat das SRAM einen Offset von 0x0060. Also
initalisiere ich die beiden Register folgendermaßen:

ldi r31, hi8(Table + 0x0060)
ldi r30, lo8(Table + 0x0060)

Die Daten sind im MemoryWindow (Data) herrlich anzusehen, nur wenn
ich mittels lpm das Register 0 geladen wird, steht da leider nicht der
erwartete Wert.

Benutzte ich den falschen Offset?
Danke
Gruß
Boris

Autor: Andreas Buhr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
per lpm lädst du aus dem Programmspeicher, also vom Programmcode (Load
Programm Memory).

Aus dem SRAM lädst Du mittels ld, ldd. In den SRAM schreibst Du mit st
std

Andreas

Autor: auch Boris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo boris,
du kannst mit dem befehl lpm üer das register 0 nur aus dem flash
lesen, du must den befehl ld oder lds verwenden.

ich hoffe es hilft dir weiter ??
gruss
boris

Autor: Boris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs mittlerweile auch gemerkt!
Wer lesen kann...

Trotzdem Danke! ;-)

Autor: el gig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey!

würde gerne das 1k internal sram vom atmega8 nutzen, hab aber wenig
(bis keine ahnung von asm)...

könntet ihr mir 2 routinen zum schreiben und lesen ins intere sram vom
mega8 mailen, wenn möglich in c (für den gcc, winavr2006) ?
wenn asm, bitte dazusagen wo welche adressen einzutragen sind?


vielen dank&gruss,
peter

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigend char n[1024];

... und voll!

Oder nicht?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und mit n[x] =   kannst du dann sogar geziehlt auch eine Adresse
zugreifen :-)

Autor: el gig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...bedeutet das, dass ich, wenn ich ganz normale variablen verwende
(bzw. arrays) schon das interne sram nutze?
schade.
hatte gehofft, noch ca 900 chars irgendwo ablegen zu können... der
mega8 hängt sich nämlich bei (sonst kleinem programm) bei einem
char-array von ca 500 werten auf.

das heisst, ich muss auf die etwas umständliche lösung eines ext. rams
zurückgreifen, oder?

aber danke,
peter

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Mega8 hat neben seinen 32 Registern 1024 Bytes SRAM (das ist schon
recht viel).
Da du in C programmierst, werden alle deine Variablen im SRAM abgelegt.
Jedes Char braucht ein Byte, jedes Int zwei Bytes, bei Arrays schlägt es
richtig zu.
Dann gibt es noch den Stack, der natürlich auch im SRAM liegt und bei
jedem Interrupt oder Funktionsaufruf Platz braucht. Und wenn ich mich
nicht irre, dann führt C noch einen weiteren Stack zur
Parameterübergabe bei Funktionsaufrufen. Auch das braucht SRAM.

Ich würde mal sagen, dass dein SRAM knapp wird und daher dein Stack in
den Variablenbereich wächst, was natürlich zu undefiniertem Verhalten
des Controllers führt. Ein AVR ist kein PC mit unendlichen Ressourcen,
man sollte also effizient mit den wenigen vorhandenen Ressourcen
umgehen und die Programme so schreiben, dass sie nicht mehr Speicher
brauchen als zur Verfügung steht.

Du suchst noch Platz für Chars. Was soll das werden? Sind das
Konstanten (die sich zur Laufzeit nicht ändern, z.B. Menütexte)?
Dann kann man diese im Flash ablegen, das spart SRAM.

...

Autor: Andreas Buhr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ganz normale Variablen werden im internen SRAM abgespeichert.

Die Lösung mit dem externen RAM ist sehr umständlich. Nimm einfach den
nächstgrößeren Atmel, dann hast Du Platz :-)

viele Grüße

Andreas

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dann kann man diese im Flash ablegen, das spart SRAM.

oder ins EEPROM...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> oder ins EEPROM...

Richtig...
Nur ist mir dieses im allgemeinen etwas zu schade für Konstanten, die
zur Laufzeit nicht verändert werden. Das nutze ich dann lieber für
Variablen, die auch ein Ausschalten überleben sollen (änderbare
Parameter).

...

Autor: el gig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...danke Leute für die Antworten, werd weiterprobieren...

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.