Re: AVR Assembler

news:3ef994d8$0$74857$ snipped-for-privacy@newscene.com...

> "Peter Schumacher" schrieb im Newsbeitrag > news:bdc1ht$r8vun$ snipped-for-privacy@ID-179587.news.dfncis.de... > > > > "Joerg Wunsch" schrieb im Newsbeitrag > > news:bdc08b$2c03$ snipped-for-privacy@innocence.interface-business.de... > > > "Peter Schumacher" schrieb: > > > > > > > .include "m8515def.inc" > > > > > > > > .equ Tabelle = 0x0100 > > > > > > > > .org Tabelle > > > > .db 16,17,'A' > > > > .db 18,19,'B' > > > > > > Und wie denkst Du, gelangen diese Bytes zur Laufzeit in den RAM? > > > > Darf/kann ich sie auch im EEPROM lassen? > > Da die bisherigen Kommentare eher fragmentarisch waren, hier eine > hoffentlich knackige Zusammenfassung :-) > > Peter, > > Datenblatt durch. Die AVRs haben eine sogenannte Harvard-Architektur, im > Gegensatz zur Von-Neumann Architektur deines PCs/Mac/Amiga/Atari... Der > Unterschied liegt in der Trennung von Programm- und Datenspeicher bei der > Harvard-Architektur. > > Dein AVR hat einen Programmspeicher, das sog. FLASH, einen Datenspeicher > SRAM und einen Festspeicher EEPROM. Die in diesen Bereichen stehenden

Bytes

Befehlen gelesen und geschrieben werden. > > SRAM ist am einfachsten. Man verwendet die LD und ST-Befehle unter Angabe

Z.

angesprochen werden. Die Idee ist, die Adresse des Bytes in den EEARX

dazu

im Datenblatt oder in einem gutem Buch deiner Wahl. Auf den Atmel-Seiten >
formatting link
findest du

dass

man das Z-Register mit der Adresse beschreibt und dann den LPM-Befehl
16-bit
Speicher im Gegensatz zu den 8-bittigen SRAM und EEPROM. Eine Adresse

zeigt

Adresse in Z ablegst und das unterste Bit legt fest, ob du das untere oder > > CSEG legt die folgenden Daten im FLASH ab. Das hast du implizit gemacht. > kannst > > Meine Empfehlung: lass die Tabelle im FLASH und schau dir mal den

LPM-Befehl

genauer an. EEPROM ist eine kreuzlahme Angelegenheit. > Alternativ: pack die Daten ins EEPROM und kopiere sie nach dem Reset ins > SRAM.

Geht nicht, SRAM ist schon voll!! Ich darf gar nicht an den Stack denken.

> Andreas >

Danke Andreas und den Anderen,

als AVR-NewBe gleich einen mehrfachen Protokollumsetzer anzugehen ist sicher gewagt und bringt mich nicht nur an meine, sondern auch an die Leistungsgrenzen eines ATmega8515. Wenn ich es geschafft habe, bin ich glaube firm. Dank Eurer Hilfen.

ATmega8515 kann den LPM-Befehl nicht nur zu r0, sondern auch in andere Register (AT90s kann dies nicht).

der Datenstruktur, wenn pro "Datensatz" eine ungeradzahlige Anzahl von Bytes enthalten ist.

Also danke noch mal.

Peter

-- > =================================================================== > Georg Heeg eK * Informatikleitung > mailto: snipped-for-privacy@heeg.de *
formatting link
> phone x49 231 9 75 99 0/36 * fax x49 231 9 75 99 20 > ------------------------------------------------------------------- > Privat: mailto: snipped-for-privacy@t-online.de *
formatting link
> >
Reply to
Peter Schumacher
Loading thread data ...

Bei den neueren AVRs kann man auch direkt

lpm r16,Z

benutzen.

Reply to
jetmarc

Hi!

Wo wir grade dabei sind: Ist es möglich den Flash voll auszunutzten und trozdem nur ein Byte in eine Zeile des Codes zu schreiben? Also wenn man .dw 0x1234 schreibt hat man ja den Speicher voll genutzt, aber ne 16 bit Zahl is nötig. .db 0x12 0x34 ist glaube ich auch möglich und generiert ebenfalls einen 16 Bit Wert. Der Übersicht halber würde ich aber gerne sowas machen: .db 0x12 .db 0x34 .db 0x56 .db 0x78 Aber ohne, dass mit da jedesmal ein Byte ungenutzt bleibt. Geht das irgndwie?

Cu, Michael

Reply to
Michael Dreschmann

"Michael Dreschmann" schrieb im Newsbeitrag news: snipped-for-privacy@news.rhein-zeitung.de...

in

Bytes

Mit dem AVR-Assembler: nein! Du erhälst eine Warnung und es wird automatisch ein Pad-Byte eingefügt. Ist aber auch ein bisserl wiedersprüchlich, in Assembler zu programmieren und dann von Übersichtlichkeit zu reden. ;-)

Andreas

--
===================================================================
Andreas Tönne @ home
mailto:atoenne@t-online.de * http://www.atoenne.de
phone x49 231 52 97 00 * mobile 0179 5457 222
===================================================================
Dipl.Inform. Andreas Tönne * Prokurist
Georg Heeg eK  * Informatikleitung
mailto:atoenne@heeg.de * http://www.heeg.de
phone  x49 231 9 75 99 0/36 * fax x49 231 9 75 99 20
Reply to
=?iso-8859-1?Q?Andreas_T=F6nne

Das geht sogar ganz automatisch. Assembler und LPM nehmen automatisch ab- wechselnd Lo- und Hi-Byte wobei ungerade Adressen im Pointer dann das Lo- und gerade das Hi-Byte selektieren. Es geht auf jeden Fall kein Byte ver- loren - es sei denn die Gesamtzahl der .dbs ist ungerade - dann wird *ein* Padding-Byte eingefügt.

cu,

Aguja

::Update::

formatting link
==> Free AVR-, PIC- & 8051-Programmers, Apps & Tips

Reply to
Aguja

"Aguja" schrieb im Newsbeitrag news:Vji++ snipped-for-privacy@despammed.com...

Mit welchem Assembler?

File:

.db 1 .db 2

Ausgabe des Assemblers von Studio 4: (Assembler Version 1.57)

Building project... ....... G:\Test.asm(2): warning: A .db segment with an odd number of bytes is detected. A zero byte is added. G:\Test.asm(3): warning: A .db segment with an odd number of bytes is detected. A zero byte is added. ....... Assembly complete with no errors. Deleting 'test.eep'

Der AVR-Assembler erzeugt bei jedem einzelnen Statement Vielfache von Worten. Er ist nicht in der Lage, DB-Statementes intelligent zusammen zu fassen.

Ciao,

Andreas

--
===================================================================
Andreas Tönne @ home
mailto:atoenne@t-online.de * http://www.atoenne.de
phone x49 231 52 97 00 * mobile 0179 5457 222
===================================================================
Dipl.Inform. Andreas Tönne * Prokurist
Georg Heeg eK  * Informatikleitung
mailto:atoenne@heeg.de * http://www.heeg.de
phone  x49 231 9 75 99 0/36 * fax x49 231 9 75 99 20
Reply to
=?iso-8859-1?Q?Andreas_T=F6nne

Andreas Tönne schrieb:

Mit einem richtigen. :-)

j@ida 816% cat > foo.s .text rjmp begin mydat: .byte 1, 2, 3 .align 2 begin: ldi r30, lo8(mydat) ldi r31, hi8(mydat) ld r16, Z .end ^D j@ida 817% avr-as -o foo.o foo.s j@ida 818% avr-ld -o foo foo.o j@ida 819% avr-objdump -d foo

foo: file format elf32-avr

Disassembly of section .text:

00000000 : 0: 03 c0 rjmp .+6 ; 0x8

00000002 : 2: 01 02 muls r16, r17 4: 03 00 .word 0x0003 ; ???? ...

00000008 : 8: e2 e0 ldi r30, 0x02 ; 2 a: f0 e0 ldi r31, 0x00 ; 0 c: 00 81 ld r16, Z ...

(Das ».align 2« sollte man nicht vergessen. ;-)

--
Jörg Wunsch

"Verwende Perl. Shell will man können, dann aber nicht verwenden."
				Kristian Köhntopp, de.comp.os.unix.misc
Reply to
Joerg Wunsch

"Joerg Wunsch" schrieb im Newsbeitrag news:bdefoo$8p4$ snipped-for-privacy@innocence.interface-business.de...

Mal ein konstruktiver Vorschlag an alle, die sich an diesem Thread beteiligt haben:

warum gebt ihr diese fragmentarischen und aus dem Kontext gerissenen Antworten? ZB. Der OP hat eindeutig mit dem AVR Studio gearbeitet. Was nützt es ihm, wenn er Tips erhält, die damit nicht funktionieren und dann ihm nicht gesagt wird, dass er dafür einen anderen Assembler benötigt? Oder auch die Antworten auf sein Verständnissproblem zur Unterscheidung zwischen Datenbytes im FLASH und SRAM.

Auch wenn die Antworten richtig sein mögen, sind sie so gegeben, dass es dem Fragenden unnötig schwierig gemacht wird, sie zu verstehen und umzusetzen. Wenn das Ziel ist, Fragende abzuschrecken, nochmals mit 'trivialen' Fragen zu kommen, so sind hier einige auf dem besten Weg. :-(

Eine gute Antwort geht in drei Schritten vor: Auf die Fragestellung eingehen und eventuell rekapitulieren, die Fragestellung analysieren und die Grundlagen der Frage darstellen, eine Lösung anbieten. Das ist keine Pflicht aber es kommen dann einfach qualitativ hochwertigere Antworten raus.

Für die Fragenden: liefere Hintergrundwissen und Details zur Frage. Die hier lesenden Elektroniker sind neugierig und möchten auch gerne wissen, für welchen Zweck die Lösung dienen soll (auch wenn man dann Gefahr läuft, dass die Antwort pauschal von oben lautet 'So macht man das auch nicht').

Vielleicht können wir uns auf einen Frage/Antwort-Knigge einigen, der dann in der FAQ an prominenter Stelle verewigt wird?

Andreas

--
===================================================================
Dipl.Inform. Andreas Tönne * Prokurist
Georg Heeg eK  * Informatikleitung
mailto:atoenne@heeg.de * http://www.heeg.de
phone  x49 231 9 75 99 0/36 * fax x49 231 9 75 99 20
-------------------------------------------------------------------
Privat: mailto:atoenne@t-online.de * http://www.atoenne.de
Reply to
Andreas Tönne

Echt? Was ist an PORTB = 0x40; ein Fremdkörper? Beim AVRGCC hat sich einiges getan.

-- Matthias Weißer snipped-for-privacy@matwei.de

formatting link

Reply to
Matthias Weißer

einiges

In dem Fall, mea culpa! Bin halt mit ICC so zufrieden, dass ich schon einige Zeit nicht mehr beim GCC reingeschaut habe.

Ich kannte noch den Umweg über outb(....) und das war nicht so prickelnd.

Andreas

--
===================================================================
Dipl.Inform. Andreas Tönne * Prokurist
Georg Heeg eK  * Informatikleitung
mailto:atoenne@heeg.de * http://www.heeg.de
phone  x49 231 9 75 99 0/36 * fax x49 231 9 75 99 20
-------------------------------------------------------------------
Privat: mailto:atoenne@t-online.de * http://www.atoenne.de
Reply to
Andreas Tönne

Am 26 Jun 2003 06:08:37 -0500 schrieb Andreas Tönne:

Du bist selbst Informatiker und weisst zweifellos, dass der wesentliche Teil der Arbeit bei der Erstellung eines Programms erledigt sein sollte, wenn man den Code hinschreibt. M.a.W.: alles, was du bis dahin an Dokumentation geleistet hast, ist unabhaengig von Assembler oder Hochsprache vorhanden und unabhaengig davon.

Ein Ansatz, der sich bei mir gut bewaehrt hat, um dann zu einem uebersichtlichen (soweit moeglich) und wartbaren Programm zu kommen: Das Programm wird in einem Pseudocode hingeschrieben. Dieser Code sollte mindestens so lesbar sein wie C - das bedeutet schliesslich nicht viel. Wenn man dann diesen Code mit Kommentarzeichen versieht und die Assembleranweisungen hinter die entsprechenden Pseudocodezeilen schreibt, kriegt man ein ordentlich strukturiertes Programm. Wenn man stattdessen die entsprechenden C-Statements hinschreibt, kriegt man ein ordentlich strukturiertes C-Programm.

Gruss Michael

Reply to
Michael Linnemann

"Andreas Tönne" schrieb:

Ein Stück Kontext ist dabei, für den Rest hast Du einen Newsreader. Warum soll ich hier alles nochmal zitieren, was Du Dir mit einem Mausklick oder einer Betätigung der Taste auch nochmal ansehen kannst (bzw. sich jemand anders ansehen kann)?

Außerdem war da natürlich ein Smiley dahinter, den Du erfolgreich ignoriert hast. Was kann ich denn dafür, wenn AVR für ihren Chip einen völlig paranoiden Assembler baut (bauen läßt), der den Programmierer mehr am Arbeiten hindert als ihn zu unterstützen?

Ansonsten schließ ich mich Matthias an: das Usenet ist zum Lernen da. Auch ich habe dabei gelernt, daß der ureigene Atmel-Assembler halt nicht alles machen will, was ein Programmierer können wollte.

--
Jörg Wunsch

"Verwende Perl. Shell will man können, dann aber nicht verwenden."
				Kristian Köhntopp, de.comp.os.unix.misc
Reply to
Joerg Wunsch

Völlig richtig, Deine fundierte Einführung in zielführendes Antworten.

Falls jemand sich an diese naheliegenden Regeln nicht hält, hat er womöglich - neben dem Anliegen, eine Antwort auf eine Frage zu geben - weitere Motivationen zum Schreiben:

- weiterführende Aspekte zum Thema vortragen,

- die Fragestellung selbst in Frage stellen oder einen Vorschlag zu einer effektiveren Sichtweise liefern,

- einfach nur diskutieren wollen, um des (lehrreichen) Unterhaltungs- wertes willen. (Unvollständige und nicht wertende Aufzählung)

Grüße, Thomas.

--
Zum Thema "prägnant formulierter Sourcecode" für embedded control:
"Schon klar: wer nichts davon versteht kompakte Binaries zu generieren,
 der will wenigstens den Sourcecode optimieren." (A.S.)
Reply to
Thomas Rehm

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.