wie mehr variblen?

Gast #228046
Lesenswert?
• ▲
▼
hallo,
ich arbeite mit assembler und avr's. in bascom und c hat man so schön
viele verschiedene variablen und in assembler muss man sich mit 32
registern (mit den unteren 16 kann ich net arbeiten, weil ich nich weiß
wie das geht :( ) abmühen. gibt es in asm vielleicht auch solche
variablen die dann im flash gespeichert werden? wann ja wie geht das
dann und wenn das nicht geht wie kann ich mit den unteren 16 registern
arbeiten?

mfg raoul
Gast #228047
Lesenswert?
• ▲
▼
Klar kann man mit den unteren 16 Registern arbeiten, nur nicht mit
Instruktionen mit "immediate"-Addressierung, d.h. die das Register
mit einer Konstante verknüpfen. Für Rechenoperationen zwischen zwei
Registern oder als MOV-Ziel sind die unteren Register durchaus
geeignet.
Und klar kann man Variablen anlegen (normalerweise im RAM) und mit
ld(s) bzw. st(s) darauf zugreifen.
Du solltest Dir mal die Assemblerbefehlsübersicht für AVRs angucken.
Gast #228048
Lesenswert?
• ▲
▼
> viele verschiedene variablen und in assembler muss man sich mit 32
> registern (mit den unteren 16 kann ich net arbeiten, weil ich nich
> weiß wie das geht :( ) abmühen.

Die unteren 16 Register können halt nicht mit jedem Befehl genutzt
werden. Sonst da nichts spezielles dran. Die Befehle, die auch
immediate-Werte annehmen (ldi, cpi, ...) gehen z.B nicht, weil da zu
wenig Bits übrig sind für die Registernummer.

> gibt es in asm vielleicht auch solche variablen die dann im flash
> gespeichert werden?

Müssen die unbedingt im Flash stehen? Warum nicht ins RAM?
Gast #228050
Lesenswert?
• ▲
▼
Hi

Wo Variablen gespeichert werden sollte vom Verwendungsweck,
Zugriffgeschwindigkeit und Lebensdauer der Variabalen (soweit man in
Assembler von Variablen sprechen kann) abhängen. Ausserdem ist der der
Speicherbedarf zu beachten.
Beispiele:
Große Datenmenge: Speicherort RAM und mit Pointer(X,Y,Z) zugreifen
Daten, die nach Ausschalten erhalten bleiben sollen:
  Speicherort: EEPROM, evtl. Kopie bei Programmstart in RAM laden und
  nur bei Veränderung im EEPROM speichern.
Übergabe an Unterprogramme (wenige,kleinere Variablen)
  Übergabe in Registern (vorzugsweise r16-r31) je nach Badarf mit
  push/pop sichern und restaurieren.

.......

Fazit: Wie 'Variablen' in Assembler angelegt werden hängt von vielen
Faktoren und auch vom Programmierstil ab.

MfG HG
Gast #228052
Lesenswert?
• ▲
▼
Um das alles mal zusammenzufassen:

Es gibt drei Arten von Speicher im AVR, Flash, RAM und EEPROM.

Im Flash steht primär der Programmcode. AVRs können Programmcode nur
aus diesem Speicher heraus ausführen. Dieser Speicher kann auch für
Daten genutzt werden, aber diese sind dann nur lesbar (schreiben geht
zwar bei den meisten AVRs auch, aber das ist etwas umständlicher,
langsam, und die Zahl an Schreibvorgängen ist stark begrenzt). Das
eignet sich für fixe Tabellen und Konstanten. Der Flash ist bei AVRs
immer der größte Speicher. Der Zugriff darauf erfolgt in Assembler mit
lpm bzw. elpm.

RAM ist der eigentliche Datenspeicher. Er kann sehr schnell und
beliebig oft gelesen und geschrieben werden. Er verliert allerdings
seinen Inhalt, wenn die Stromversorgung abgestellt wird. Er kann mit
ld, ldd, lds gelesen und mit st, std, sts geschrieben werden.

EEPROM ist der Speicher, um sich Daten über das Aus-/Einschalten hinweg
zu merken. Er ist aber relativ langsam, vor allem beim Schreiben, und
auch bei ihm ist die Zahl an Schreibzyklen begrenzt.
Der Zugriff auf diesen erfolgt über I/O-Register und ggf. Interrupts
(wird ausgelöst, wenn ein Schreibzugiff fertig ist).

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.