www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sram benutzen, aber wie?


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Um eines vorweg zu nehmen, ich habe bereits gesucht in anderen Threads
bin aber leider zu doof um das alles zu verstehen. Mir reichen die
Register 16-31 bei meinem Atmega nicht mehr aus, brauche aber noch
einpaar Speicherstellen um die Daten welche ich in einem Unterprogramm
ermittelte im Hauptprogramm wieder ins Spiel zu bringen. Da dachte ich,
dass sram würde sich hier vielleicht noch gut machen. Oder was ist mit
den Reg. 1-15??
Also wieder zum sram: der Anfang kann ich nicht gebrauchen, da dort
Register r1-r31 und die I/O-Register schon vergeben sind, dann kommte
der Bereich den ich nutzen kann. Bis wohin geht der bei einem ATmega8?
Zweite Frage: Ich habe gelesen, dass man die sram Adresse in den
Z-Pointer laden muss und dann weiss ich nicht weiter. Wie lautet der
Befehl um etwas dort anzulegen und wie lautet der Befehl um es wieder
zu holen?


Danke für eure Hilfe!!!

Grüsse

Autor: Fino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Adressen sowie die Größe des SRAMs findest Du im Datenblatt im
Kapitel "SRAM Data Memory". Für die Verwendung es SRAMs dürfte
http://www.avr-asm-tutorial.net/avr_de/beginner/sram.html ganz
hilfreich sein.

Fino

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, genau sowas suchte ich, noch eine Frage, was ist an den Registern
1-15 speziell? Kann ich die nicht normal als Speicherstellen verwenden?

Autor: Fino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst r0 bis r15 genau wie r16 bis r31 benutzen, abgesehen von
einigen wenigen Befehlen wie ANDI, ORI usw, bei denen mit Konstanten
gearbeitet wird; diese sind nur für r16 bis r31 verwendbar.

Autor: Alexthbe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso nicht einfach den stack dazu bentzen? WÜrd ich jetzt mal sagen ...
is auch das SRAM, braucht man aber net immer nach den adressen zu
schaun ...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie funzt das mit dem Stack, wenn ich im Hauptprogramm in r16 etwas habe
und das nicht verlieren will, wenn ein Interrupt kommt in welchem auch
auf r16 etwas geschrieben wird, dann kann ich am anfang der
Interruptroutine mit push r16 das in den Stack tun und vor reti wieder
pop r16. Funzt das so??

Autor: Andreas Schwarz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau so, siehe auch Kapitel 3 und 4 im Tutorial.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thanks!!

Autor: el gig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey!

kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c
mailen? verwende gcc (winavr 2006) und fange mit den asm routinen oben
nix an. wie schreib ich ein byte (aus einer char-variable) ins sram und
wie krieg ichs wieder raus? (in c!)

danke und gruss,
peter

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c
> mailen?

Beispiel:

x = 5;

> wie schreib ich ein byte (aus einer char-variable) ins sram

Indem du eine weitere char-Variable anlegst und den Wert einfach in die
Variable schreibst.

> und wie krieg ichs wieder raus? (in c!)

Indem du den Wert einfach wieder aus der Variable liest.
Variablen sind nichts weiter als Speicherstellen im internen SRAM. Die
Adressvergabe passiert automatisch.
In einigen Fällen können sie durch Optimierungen durch Register ersetzt
werden oder gar ganz wegfallen.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für Variablen in ASM mach ich das so, ich muss mich dann garnicht drum
kümmern wo das ganze im SRAM liegt, für ein Array müsste man das aber
mit den Pointern machen.

.DSEG                     ;Reserve jeweils 1 Byte / Variable im SRAM
Steuerbyte1:    .byte 1
Steuerbyte2:    .byte 1
Temperatur:     .byte 1
....
....

.CSEG
.ORG  0x00
Reset:
lds temp, Steuerbyte1     ;Lade Steuerbyte1(SRAM) nach temp
sts Steuerbyte1, temp     ;Speichere temp ins Steuerbyte1(SRAM)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c
> mailen? verwende gcc


Unter C geht Dich das überhaupt nichts an, das ist nämlich Sache des
Linkers. Und der wird sehr ärgerlich, wenn man ihm ins Handwerk
pfuscht.


Jede Variable wird allein über ihren Namen referenziert.


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.