www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik wie mehr variblen?


Autor: raoul (Gast)
Datum:

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

Autor: Christian Zietz (Gast)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht, weil die AVRs bedeutend mehr Flash als SRAM haben und man
den Unterschied der verschiedenen Speicherarten noch nicht richtig
kennt?

;-)

...

Autor: Hartmut Gröger (Gast)
Datum:

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

Autor: Thomas K. (thkais)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manch aktuelle µController haben wesentlich weniger Register... Da ist
man mit den 32 Registern des AVR ziemlich verwöhnt.

Schau Dir mal die Befehle LD und ST an.
"Variablen" im Flash sind keine Variablen, sondern Konstanten - d.h.,
sie lassen sich nicht verändern.

Autor: Rolf Magnus (Gast)
Datum:

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

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.