PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gibt's unter Assembler Felder oder etwas in der Art?



Bastlwastl
21.11.2005, 10:55
Tag

Ich müsste bei meinem ATmega8 einige Messwerte zwischenspeichern.

Da die Anwendung stellenweise zeitkritisch ist muß ich leider in Assembler programieren.

Weis wer von euch ob es beim Assembler Felder oder etwas in der Art giebt um ca. 100 bis 200 Messwerte im internen Ram zwischenzuspeichern?

mfg Bastlwastl

askazo
21.11.2005, 10:57
Nein, sowas gibt es definitiv nicht. In Assembler musst Du das alles per Hand machen....

askazo

Bastlwastl
21.11.2005, 11:51
Nein, sowas gibt es definitiv nicht. In Assembler musst Du das alles per Hand machen....
Macht auch nichts.

Kannst du mir eventuell einen Tipp geben wie ich den internen Ram ansprechen kann?

Bei den Anwendungen die ich bis jetzt gehabt habe, bin ich immer mit den Registern als Zwischenspeicher ausgekommen.

(Servoansteuerung, IR-Komunikationsinterface, PC-Watchdog,...)


mfg Bastlwastl

SprinterSB
21.11.2005, 12:04
Falls du mit C vertraut bist, kannst du auch mit C arbeiten und nur die kritischen Stellen in Assembler. Das macht es um einiges besser zu proggen und weniger fehlerträchtig.

Du machst dann nur einzelne Module in Assembler oder Codeschnippsel in inline Assembler.

Bastlwastl
21.11.2005, 12:17
Ich bin mit C vertraut.
C und C++.
Bei C++ kann ich die Unterarten: Konsole, MFC, ATL, ActiveX und SDK.
Und bei C habe ich mich einwenig mit der C-Version die Mikrocontrollern verwendet wird beschäftigt.

Klar kann ich eigentlich fast alles in C machen.

Aber 1. möchte ich wenns geht alles einheitlich programieren um nicht durcheinanderzukommen.

Und 2. möchte ich wissen wie ich dieses Problem im Assembler lösen kann.
Nach dem Motto: Wieso einfach wenn's auch kompliziert geht.

Denn das Problem ist dass immer weniger Leute Assembler verwenden und wenn ich wirklich eine solche Aufgabe in Assembler verwirklichen muß, weis keiner mehr wie's geht.

mfg Bastlwastl

Klaus_0168
21.11.2005, 12:54
Hi all,

ich kenne jetzt nicht den Assemblercode des ATmega8, jedoch hat meines Wissens nach jeder Proz die Möglichkeit der indirekt indizierten Adressierung der Transferbefehle. Damit wird im Allgemeinen die Programmierung der Felder für die Hochsprachen realisiert.

Datenblatt ( www.atmel.com/dyn/resources/prod_documents/doc2486.pdf ) Seite 287

Die Idee die Grundlagen wieder zu verwenden finde ich gut. Was nützen einem die hohen Wissenschaften, wenn man die Basis nicht drauf hat ? Und Assembler hat auch seinen Reiz. Da kann man noch so richtig in den Eingeweiden eines Proz rumwühlen.

Grüße Klaus

Bastlwastl
21.11.2005, 13:55
Danke.

Ich werd mir das und die Hilfe zu den Befehlen mal genauer durchlesen.
(Jetzt hab ich mir das Datenblatt schon 2 mal durchgelesen und hab immer noch einiges übersehen.)

mfg Bastlwastl

Klaus_0168
21.11.2005, 13:59
Was denn ...

Wenn man beim einmaligen durchlesen von nur 305 Seiten sich nicht mindestens 99% merken kann wird man langsam alt, oder ??

Grüße Klaus

Bastlwastl
21.11.2005, 14:05
Da muß ich dir leider zustimmen.


Eine andere Frage.

Ich bin da jetzt auf die Befehle
LDS -> Load Direct from SRAM
und
STS -> Store Direct to SRAM
gestoßen.

Steht der SRAM dem Benutzer vollkommen zur Verfügung oder muß man ihn sich mit dem "OS", den Registern,... teilen?

Ich frage desswegen weil ich mir nicht versehentlich das Programm abschießen will.

mfg Bastlwastl

JanB
21.11.2005, 14:12
Hallo,
nIcht nur LDS und STS, sondern auch die vielen
LD, ST, LDD und STD Befehle sprechen das RAM an.
(und PUSH und POP natürlich auch)

Beim Mega8 steht dir das RAM ab $60 zur Verfügung.
Von 0 bis $5F liegen wie du schon vermutest, die internen Register,
die sich übrigens auch als RAM ansprechen lassen.

Gruß Jan

voidpointer
21.11.2005, 14:17
Moin,

ich empfehle, das Dokument "AVR Instruction Set" zu lesen und möglichst die zwei Seiten Instruction Set Summary gleich auszudrucken und an die Wand zu hängen :-)

Mit den Befehlen ST und LD im indirekten Modus kann man das Verhalten von Arrays prima nachbilden. Dazu lädt man den Index in das Doppelregister X, Y oder Z und greift dann per "ST X, Rr" zu. Will man das Array schrittweise durcharbeiten, lässt sich das Indexregister sogar noch incrementieren oder dekrementieren, z.B. LD Rd, Y+.


.equ werte = 0x100
ldi YL, LOW(werte) ; initialisiere den Y-Pointer
ldi YH, HIGH(werte)

ldi temp, 0xA0 ; lade irgendeinen Wert
st Y+, temp ; speichere den Wert am Anfang des Speichers
ldi temp, 0x5B ; nächster Wert
st Y+, temp ; speichere an nächster Stelle usw.

Achim.

SprinterSB
21.11.2005, 14:20
Was läuft denn für ein OS?
Keins, vermute ich mal. Du hast also den kompletten SRAM zum drin rumwutzen.

Der Stack wächst von oben nach unten. Befehle, die den Stack benutzen, verwenden auch den SRAM: push, pop, ret, reti, rcall, icall, IRQs, etc

In den SRAM greifst du mit lds, ld, ldd, sts, st, std. Das wars auch schon.

Dein SRAM fängt an bei 0x60. Von 0x20 bis 0x5f liegt I/O und in 0x00 bix 0x1f werden die GPRs gemappt. Bei grösseren AVRs werden auch SFRs ins SRAM gemappt, dann beginnt dein nutzbares SRAM erst weiter hinten.

Die avr-Header von avr-gcc sind auch zusammen mit avr-as verwendbar. Dort gibt's auch ein define RAMEND, das du verwenden kannst, um den Stack zu initialisieren.

Bastlwastl
21.11.2005, 16:21
Danke

Wenn man erst mit dem programieren von Mikrokontroller anfängt kann man noch so oft in das Datenblatt schaun und findet nur die unwichtigen Dinge die man nicht sucht.

Jetzt hab ich wieder genug zum Lesen und zu werken für die nächsten kalten Wintertage.

@ voidpointer

Ich hab das gesamte Datenblatt ausgedruckt und mit Schustergarn gebunden.
(2 Seiten auf ein Blatt, Doppelseitig gedruckt)

Mit dem auf die Wand Pinnen sieht's bei mir nicht so toll aus.

Der Bastel-PC steht wenn's warm ist in der Werkstatt meines Bruder's, deren Wände voll mit Werkzeug sind die selbst Tim Taylor neidisch machen würden ;o).

Und im Winter steht der Bastelrechner in der gemeinsamen Hausbar.

Da hat alles Platz, nur keine Datenblätter. ;o)

Ich werd mir jetzt als 1. meine eigene Datenblatt-Mappe zusammenstellen in die ich nur die wichtigsten Dinge packe.

Prost!!!

mfg Bastlwastl