Forum: Mikrocontroller und Digitale Elektronik AVR MCU - Warum 8-bit?


von Daniel R. (dan066)


Lesenswert?

Meine Verständnisfrage lautet:
Warum werden die Atmel MCUs (atmega) 8-bit Prozessoren genannt?

Im debugger sieht es so aus, als wenn auch 16 bit pro Takt verarbeitet 
werden. Ich weiß, dass bei der Harvard-Architektur in die versch. 
Speicher parallel gelesen/geschrieben werden kann, aber dennoch:

Beispiel: C012  RJMP  PC+0x0013  benötigt zwei Takte. Logisch, denn es 
muss das erste Byte gelesen werden um den Befehl zu erkennen und das 
zweite um den Parameter zu lesen? und/oder den Sprung auszuführen? 
(bitte erklären)

EC0D  LDI  R16,0xCD  benötigt nur einen Takt. Warum? Es müssen doch zwei 
Byte gelesen werden und etwas in den SRAM geschrieben werden.

95C8  LPM  benötigt drei Takte. Denn es muss: der zwei Byte große Befehl 
gelesen werden und ein Byte von Adresse r30:r31 aus dem Flash in r0 
gespeichert werden. Welche Aktion davon benötigt wieviele Takte?

2000  TST  R0  benötigt nur einen Takt. Dabei müssen die zwei Byte des 
Befehls gelesen werden, r0&r0 gerechnet werden und ggf. das Zero-Flag 
gesetzt werden. Warum werden dafür nicht vier, sondern nur ein Takt 
gebraucht?

Ich hoffe jemand kann mir das erklären;)

von Max H. (hartl192)


Lesenswert?

Daniel R. schrieb:
> Warum werden die Atmel MCUs (atmega) 8-bit Prozessoren genannt?
Weil der Datenbus interne 8bit Breit ist.

von (prx) A. K. (prx)


Lesenswert?

Daniel R. schrieb:
> Beispiel: C012  RJMP  PC+0x0013  benötigt zwei Takte. Logisch, denn es
> muss das erste Byte gelesen werden um den Befehl zu erkennen und das
> zweite um den Parameter zu lesen? und/oder den Sprung auszuführen?

Nein. Der erste Takt führt den Befehl aus, der zweite liest das erste 
Befehlswort an der Zieladresse. Bei sequentiellem Code wird während der 
Ausführung eines Befehls das erste Wort des Folgebefehls gelesen, 
weshalb die Ladezeit des Codeworts nicht separat in der Laufzeit 
auftaucht. Bei Sprungbefehlen sieht das natürlich anders aus.

Aus dieser Überlegung heraus ergibt sich auch mühelos, weshalb nicht 
ausgeführte Sprungbefehle beim AVR schneller sind als ausgeführte.

> EC0D  LDI  R16,0xCD  benötigt nur einen Takt. Warum? Es müssen doch zwei
> Byte gelesen werden und etwas in den SRAM geschrieben werden.

Das ROM arbeitet beim AVR in Codeworten von 16 Bits Breite, die 
Befehlslänge geht also wortweise in die Laufzeit ein, nicht byteweise.

> 95C8  LPM  benötigt drei Takte. Denn es muss: der zwei Byte große Befehl
> gelesen werden und ein Byte von Adresse r30:r31 aus dem Flash in r0
> gespeichert werden. Welche Aktion davon benötigt wieviele Takte?

Datenbefehle über Busgrenzen sind nur wirklich verständlich, wenn man 
die Internstruktur des Prozessors analysiert. Dieser Befehl muss den 
Datenbus mit dem Befehlsbus koppeln, was den Ablauf etwas ins Stocken 
bringt.

> 2000  TST  R0  benötigt nur einen Takt. Dabei müssen die zwei Byte des
> Befehls gelesen werden, r0&r0 gerechnet werden und ggf. das Zero-Flag
> gesetzt werden. Warum werden dafür nicht vier, sondern nur ein Takt
> gebraucht?

Das Z-Flag ist ebenso das Ergebnis der ALU-Operation wie das hier 
verworfene Ergebnis vom AND, trägt also nicht separat zur Laufzeit bei.

: Bearbeitet durch User
von Daniel R. (dan066)


Lesenswert?

A. K. schrieb:
> Aus dieser Überlegung heraus ergibt sich auch mühelos, weshalb nicht
> ausgeführte Sprungbefehle beim AVR schneller sind als ausgeführte.

Also, im Falle wenn der pc z.B auf  F7E1  BRNE  PC-0x03  steht, wäre das 
Byte 0xF7 schon geladen. Führt man diesen Befehl nun aus, wird:
-Byte 0xE1 gelesen
- -0x03 (Einerkomplement) auf den pc addiert und gleichzeitig 1 Byte des 
Folgebefehls gelesen
-pc += 1 gerechnet
-Das erste Byte des Befehls auf den pc zeigt gelesen (fällt bei 
nicht-ausgeführtem Sprung weg)

Welche dieser vier Schritte finden im ersten und welche im zweiten Takt 
statt? Wird nicht gesprungen, braucht der Befehl nur einen Takt. Ich 
nehme an, während der pc auf das Sprungziel gesetzt wird, wird auch das 
erste Byte des Folgebefehls gelesen (des Befehls der direkt hinter BRNE 
steht). Wenn gesprungen wurde ist der nächste auszuführende Befehl dann 
aber der an der Sprungzieladresse, also muss dessen erstes Byte 
nachträglich noch geladen werden, was das zusätzliche benötigte Byte 
erklären könnte.

> Das ROM arbeitet beim AVR in Codeworten von 16 Bits Breite, die
> Befehlslänge geht also wortweise in die Laufzeit ein, nicht byteweise.

Das klingt, als wenn du meintest es würde Wortweise gelesen werden. Wie 
ist das gemeint?

> Datenbefehle über Busgrenzen sind nur wirklich verständlich, wenn man
> die Internstruktur des Prozessors analysiert. Dieser Befehl muss den
> Datenbus mit dem Befehlsbus koppeln, was den Ablauf etwas ins Stocken
> bringt.

Ja das war ein schlechtes Beispiel von mir, das war mir klar. Ich habe 
es nur gewählt, weil es das einzige Beispiel war, dass zu meiner 
Vorstellung der zu benötigenden Takte gepasst hatte.

> Das Z-Flag ist ebenso das Ergebnis der ALU-Operation wie das hier
> verworfene Ergebnis vom AND, trägt also nicht separat zur Laufzeit bei.

Ok, das Byte 0x20 ist bereits geladen, deswegen ist schon gekannt 
welcher Befehl ausgeführt werden soll. Aber der kann ja nicht ausgeführt 
werden bevor das zweite Byte mit dem benötigten Parameter 
(Registernummer) geladen wurde. Dass die SREG Bits gleichzeitig mit dem 
Rechenergebnis von der ALU geschrieben werden leuchtet ein.
Doch ist es wirklich so, dass der Befehl ausgeführt wird, während noch 
nicht gekannt ist mit welchem Registerinhalt gerechnet werden soll?
Welche Ereignisse finden dazu parallel/sequentiell innerhalb eines 
Taktes statt?

Wann innerhalb eines Taktes wird denn der pc hochgezählt? Zu irgendeinem 
Zeitpunkt muss ja anscheinend ein nebenläufiger Prozess (VHDL-Denkweise) 
gestartet werden, der  1)pc++  2)lade ein Byte von (pc)  ausführt.


Vielen Dank für die ausführliche Antwort;)

von Rolf Magnus (Gast)


Lesenswert?

Daniel R. schrieb:
> A. K. schrieb:
>> Aus dieser Überlegung heraus ergibt sich auch mühelos, weshalb nicht
>> ausgeführte Sprungbefehle beim AVR schneller sind als ausgeführte.
>
> Also, im Falle wenn der pc z.B auf  F7E1  BRNE  PC-0x03  steht, wäre das
> Byte 0xF7 schon geladen.

Beide Bytes sind geladen. Der Code wird immer wortweise geladen.

 Führt man diesen Befehl nun aus, wird:
> -Byte 0xE1 gelesen
> - -0x03 (Einerkomplement) auf den pc addiert und gleichzeitig 1 Byte des
> Folgebefehls gelesen

Der Folgebefehl wird komplett gelesen, nicht nur zur Hälfte. Falls der 
Sprung nicht ausgefürt wird, bringt das natürlich nichts, und der 
gelesene Befehl muß verworfen werden. Deshalb dauert es einen Takt 
länger, weil nun der Befehl an der neuen Adresse erst geladen werden 
muß.

> Welche dieser vier Schritte finden im ersten und welche im zweiten Takt
> statt?

Zusammengefasst:

Im ersten Takt wird der Sprungbefehl ausgewertet und je nach Flags 
entweder gesprungen oder nicht. Gleichzeitig wird der Befehl nach dem 
Sprungbefehl geladen.
Falls der Sprung nicht ausgeführt wurde, gibt es keinen zweiten Takt. 
Der nun bereits geladene nächste Befehl wird einfach ausgefürt.
Falls der Sprung durchgeführt wird, wird im zweiten Takt der geladene 
nächste Befehl verworfen und der der Befehl an der Zieladresse geladen.

>> Das ROM arbeitet beim AVR in Codeworten von 16 Bits Breite, die
>> Befehlslänge geht also wortweise in die Laufzeit ein, nicht byteweise.
>
> Das klingt, als wenn du meintest es würde Wortweise gelesen werden. Wie
> ist das gemeint?

Genau so. Der Codespeicher ist 16 Bit breit. Einzelne Bytes kann man von 
dort gar nicht lesen.

von (prx) A. K. (prx)


Lesenswert?

Daniel R. schrieb:
> Also, im Falle wenn der pc z.B auf  F7E1  BRNE  PC-0x03  steht, wäre das
> Byte 0xF7 schon geladen.

Nein, as ganze Befehlswort F7E1 am Stück.

> nehme an, während der pc auf das Sprungziel gesetzt wird, wird auch das
> erste Byte des Folgebefehls gelesen

Wort, nicht Byte.

> Das klingt, als wenn du meintest es würde Wortweise gelesen werden.

Genau das. Das Flash ist in Nx16 Bits organisiert und der PC zählt Worte 
statt Bytes. Nur bei LPM gibt es Byteadressen vom Flash. Der 
Atmel-Assembler zählt ebenfalls Worte. Wenn das Asm-Listing von GCC 
Bytes anzeigt, dann aufgrund der Arbeitsweise der Binutils vom GCC.

> Wann innerhalb eines Taktes wird denn der pc hochgezählt?

Inwieweit sollte das relevant sein?

> Zu irgendeinem
> Zeitpunkt muss ja anscheinend ein nebenläufiger Prozess (VHDL-Denkweise)
> gestartet werden, der  1)pc++  2)lade ein Byte von (pc)  ausführt.

Das ist nicht der einzige nebenläufige Prozess.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Schau mal hier vorbei, da wird ein Modell der Mikroarchitektur von AVR 
Prozessoren eingehend beschrieben:
http://web.engr.oregonstate.edu/~sinky/teaching/4.AVR_Microarchitecture.pdf

von (prx) A. K. (prx)


Lesenswert?

Rolf Magnus schrieb:
> Der Folgebefehl wird komplett gelesen, nicht nur zur Hälfte. Falls der
> Sprung nicht ausgefürt wird, bringt das natürlich nichts, und der
> gelesene Befehl muß verworfen werden.

Andersrum: Der Folgebefehl wird komplett gelesen, nicht nur zur Hälfte. 
Falls der Sprung ausgeführt wird, bringt das natürlich nichts, und der 
gelesene Befehl muß verworfen werden.

von Rolf Magnus (Gast)


Lesenswert?

A. K. schrieb:
> Andersrum

Äh, ja. Ich hätt's wohl nochmal lesen sollen vor dem Absenden. Danke für 
die Korrektur.

von spess53 (Gast)


Lesenswert?

Hi

@ Daniel R. (dan066)

Sieh mal in einem AVR-Datenblatt deiner Wahl unter:

Instruction Execution Timing

nach.

MfG Spess

von Daniel R. (dan066)


Lesenswert?

Vielen Dank für die zahlreichen Antworten.

Wenn die Instruktionen wortweise geladen werden (was mir nicht klar 
war), ändert das einiges.
Ich dachte, dass der breiteste Datenbus bei einer 8-bit MCU eben 8-bit 
breit wäre (wie z.B. auf dem ersten Bild zu sehen: 
http://avrindia.blogspot.de/2009/02/word-about-avr-architecture.html). 
Das hätte bedeutet, dass eben jew. eine halbe Instruktion auf einmal aus 
dem Flash zum Instruction Decoder bzw. dessen Speicher transportiert 
werden kann. Dafür würde sprechen, dass über lpm auch "nur" ein Byte 
geladen werden können (und es keinen Befehl für ein ganzes Wort gibt).
Dagegen würde sprechen, dass im pc auch eine Wortadresse steht.
Allerdings ist hier 
http://web.engr.oregonstate.edu/~sinky/teaching/4.AVR_Microarchitecture.pdf 
(was wesentlich aufschlussreicher ist) zu sehen, dass es auch viele 
16-bit Leitungen gibt (u.a. ein vom Program Memory ausgehende 16-bit 
Leitung). Lediglich von/zur ALU und vom Data Memory laufen nur 8-bit 
Leitungen. (heißt die MCU deshalb 8-bit MCU?).

Steht der pc auf  F7E1  BRNE  PC-0x03  wurde 0xF7E1 im Fetch-Prozess des 
vorherigen Taktes (wenn man das so nennen darf) aus dem Program Memory 
ins Instruction Register geladen. Zusätzlich befindet sich das 
Sprungziel schon im NextProgramCounter-Register.
Im folgenden BRNE_Takt1 werden (Z-Bit = 0) nebenläufig:
-Im Fetch Prozess: Instruction von pc+1 ins Instruction Register geladen 
und pc++ gerechnet.
-Im Execution Prozess: Der NPC durch den Address Adder geschleust (am 
Taktende in den pc geschrieben).

Im darauffolgenden BRNE_Takt2 werden nebenläufig:
-Im Fetch Prozess: Instruction von pc(Sprungziel) ins Instruction 
Register geladen und pc++ gerechnet.
-Im Execution Prozess: Im letzten Takt geladene Instruction nicht 
ausgeführt, sondern gar nichts getan. Denn es wurde ja gesprungen und 
old_pc+1 soll nicht ausgeführt werden.

War das Z-Bit=1, das heißt es sollte nicht gesprungen werden, werden im 
BRNE_Takt2 nebenläufig:
-Im Fetch Prozess: Instruction von pc+1 geladen (wurde ja im BRNE_Takt1 
um eins erhöht.
-Im Execution Prozess: Die im BRNE_Takt1 Fetch Prozess geladene 
Instruction ausgeführt.

Stimmt das so?

von Axel S. (a-za-z0-9)


Lesenswert?

Daniel R. schrieb:
> Wenn die Instruktionen wortweise geladen werden (was mir nicht klar
> war), ändert das einiges.
> Ich dachte, dass der breiteste Datenbus bei einer 8-bit MCU eben 8-bit
> breit wäre

Der Bus auf dem die Instruktionen gelesen werden, ist kein Datenbus. 
Zumindest nicht bei den AVR 8-Bittern. Stichword Harvard-Architektur.

Siehe Prozessorarchitekturen


XL

von (prx) A. K. (prx)


Lesenswert?

Daniel R. schrieb:
> (was wesentlich aufschlussreicher ist)

Zur Klarstellung: Das PDF präsentiert ein Modell für einen Teil des 
AVR Befehlssatzes. So lässt sich beispielsweise LDS darin nicht 
unverändert abbilden.

> Stimmt das so?

Ja.

: Bearbeitet durch User
von 16 Bit oder mehr (Gast)


Lesenswert?

ALU, Register , Datenbus, alles 8 Bit.

von (prx) A. K. (prx)


Lesenswert?

Daniel R. schrieb:
> Ich dachte, dass der breiteste Datenbus bei einer 8-bit MCU eben 8-bit
> breit wäre (wie z.B. auf dem ersten Bild zu sehen:

Solche stark vereinfachten Skizzen sind nicht notwendigerweise ein 
Abbild der realen Implementierung. Heutige CPUs enthalten oft eine 
Vielzahl an Pfaden unterschiedlicher Breite, wie im PDF deutlich wird.

Aber auch schon in dieser Skizze wird deutlich, dass die Befehle nicht 
den dort dargestellten Datenbus nutzen, sondern unabhängig vom Datenbus 
sind: links im Bild zu sehen.

von (prx) A. K. (prx)


Lesenswert?

Daniel R. schrieb:
> Lediglich von/zur ALU und vom Data Memory laufen nur 8-bit
> Leitungen. (heißt die MCU deshalb 8-bit MCU?).

Es gibt kein narrensicheres Kriterium für eine "soundsoviel Bit MCU", 
weil sich für jedes Kriterium Beispiele finden lassen, die es ad 
absurdum führen.

So müssen die Busbreite und ALU-Breite nicht mit der Breite der 
Datenregister übereinstimmen. Der 68008 Prozessor hatte aus Sicht des 
Programmierers eine 32-Bit Architektur, intern implementiert aus 16-Bit 
Grundelementen, und hatte einen externen 8-Bit Bus. Die ALU von 
Motorolas 8-Bit MCU 6804 war sogar bitseriell, also 1 Bit breit.

Bei den AVRs passt aber alles zusammen, also ALU, Register und interner 
Datenbus.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Daniel R. schrieb:
> Dafür würde sprechen, dass über lpm auch "nur" ein Byte
> geladen werden können

Du solltest dich nicht ausgerechnet an dem einzigen Befehl aufhängen, 
der völlig quer zur internen Implementierung als Harvard-Architektur 
liegt.

Der erste AVR (AT90S1200) hatte übrigens weder LPM noch LDS.

von Georg (Gast)


Lesenswert?

A. K. schrieb:
> dem einzigen Befehl aufhängen,
> der völlig quer zur internen Implementierung als Harvard-Architektur

So ein Befehl wird benötigt, da man nach reiner Harvard-Lehre sonst 
keine Tabellen oder Strings im Programmspeicher lesen könnte. Man könnte 
argumentieren, durch so einen Befehl wird Harvard erst voll nutzbar. 
Dafür muss man auch in Kauf nehmen, dass je nach Befehlssatz dort keine 
Bytes stehen, sondern ev. auch 11 oder 12 oder 13 bit. Aber immer noch 
besser davon 8bit als garkeine String-Konstanten.

Georg

von (prx) A. K. (prx)


Lesenswert?

Georg schrieb:
> So ein Befehl wird benötigt, da man nach reiner Harvard-Lehre sonst
> keine Tabellen oder Strings im Programmspeicher lesen könnte.

Und? Ohne ist umständlich, geht aber.

Hier ging es jedoch eher darum, dass der TO sich bei der Analyse des 
Ablaufs in einem AVR diesem Befehl eher zuletzt als zuerst widmen 
sollte.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

Was die Kategorisierung der Bitbreite anbelangt, würde ich es an den 
Rechenbefehlen fest machen:

Bsp.: Die Additon kann bei den AVRs nur mit 8 Bit Operanten ausgeführt 
werden.

Kleine Übungsfrage: Wie muss die Bitbreite bei diesem Prozessor 
angegeben werden? 
http://www.greenarraychips.com/home/documents/greg/PB001-100503-GA144-1-10.pdf

von c-hater (Gast)


Lesenswert?

chris_ schrieb:

> Bsp.: Die Additon kann bei den AVRs nur mit 8 Bit Operanten ausgeführt
> werden.

Nein. Es gibt die Instruktionen adiw und sbiw, die 16 Bit verarbeiten.

Allerdings sind das wohl auch so ziemlich die überflüssigsten 
Instruktionen der AVRs, denn sie sind nicht schneller als die Ausführung 
derselben Sache als zwei 8 Bit-Operationen und obendrein im Unterschied 
zu diesen nichtmal auf alle Register der oberen Hälfte anwendbar. Der 
einzige Vorteil ist halt die Platzersparnis im Flash.

Die so weitgehend verschwendeten Opcodes hätte Atmel besser verwenden 
können, um meine persönliche Hitliste der "fehlenden" Instruktionen zu 
verkleinern, das wären:

cpsne
eori
lpmd
cpci

von chris_ (Gast)


Lesenswert?

>Nein. Es gibt die Instruktionen adiw und sbiw, die 16 Bit verarbeiten.

Also in Wahrheit sind die AVRs ja 32 Bit-CPUs:
http://hobby-roboter.de/forum/viewtopic.php?f=4&t=76

von MCUA (Gast)


Lesenswert?

>Ich dachte, dass der breiteste Datenbus bei einer 8-bit MCU eben 8-bit
>breit wäre ....
>Das hätte bedeutet, dass eben jew. eine halbe Instruktion auf einmal aus
>dem Flash zum Instruction Decoder bzw. dessen Speicher transportiert
Instrukt-bus ist nicht Datenbus (egal ob Harvard oder sonst)

>Der erste AVR (AT90S1200) hatte übrigens weder LPM noch LDS.
Auch die ersten AVRs (bsp AT90S2333 oder ..8535) hatten LPM u LDS.

>Die so weitgehend verschwendeten Opcodes hätte Atmel besser verwenden
>können,
es würde auch nichts schaden, den Bef.satz mal (um einige OP-code bits) 
zu erweitern. (aber Atmel klebt da ja fest)

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
>>Der erste AVR (AT90S1200) hatte übrigens weder LPM noch LDS.
> Auch die ersten AVRs (bsp AT90S2333 oder ..8535) hatten LPM u LDS.

Der AT90S1200 hat das jedenfalls nicht.
Aber mag sein, dass er nicht der erste war.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Der erste AVR (AT90S1200) hatte übrigens weder LPM noch LDS.

Wozu sollte ein RAMloser Controller Befehle für den RAM-Zugriff haben?

MfG Spess

von Εrnst B. (ernst)


Lesenswert?

Georg schrieb:
> So ein Befehl wird benötigt, da man nach reiner Harvard-Lehre sonst
> keine Tabellen oder Strings im Programmspeicher lesen könnte.

Alte PICs (auch Harvard) hatten keinen solchen Befehl(*), Tabellen im 
Flash/ROM hat man über einen indirekten Sprung in eine Serie von "RETLW 
<DATA>"-Befehlen gemacht.
Ging also auch ohne direktes "LPM"-Äquivalent.


(*: Ging glaube ich sonst nur super umständlich ähnlich wie der 
EEPRom-Zugriff mit Register-Füllen & Wait-NOPS, dafür könnte man auch 
alle 14 Bits des Befehlswortes auf einmal lesen, die dann über zwei 
Register verteilt waren)

von (prx) A. K. (prx)


Lesenswert?

spess53 schrieb:
> Wozu sollte ein RAMloser Controller Befehle für den RAM-Zugriff haben?

Das ist natürlich ein Argument. ;-)
Aber LPM hat er auch nicht. Und ROM hat er.

von Max H. (hartl192)


Lesenswert?

Εrnst B✶ schrieb:
> ähnlich wie der
> EEPRom-Zugriff mit Register-Füllen & Wait-NOPS
Korrekt & Es ist auch ohne Wait, interruptgesteuert möglich.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Εrnst B✶ schrieb:
> Alte PICs (auch Harvard) hatten keinen solchen Befehl(*), Tabellen im
> Flash/ROM hat man über einen indirekten Sprung in eine Serie von "RETLW
> <DATA>"-Befehlen gemacht.

Intels 8048 war auch nicht viel besser. Der konnte nur innerhalb der 
aktuellen 256 Byte Page aus dem ROM laden, und aus Page 3. Das machte 
bei grossen Tabellen ähnlich viel Spass.

von spess53 (Gast)


Lesenswert?

Hi

>Aber LPM hat er auch nicht. Und ROM hat er.

Aber sinniger weise ld rd,z/st z,rd.

MfG Spess

von (prx) A. K. (prx)


Lesenswert?

spess53 schrieb:
> Aber sinniger weise ld rd,z/st z,rd.

Klar. Das RAM dazu hat er. 32 Bytes. Auch ohne LDS direkt adressierbar.

von Georg (Gast)


Lesenswert?

chris_ schrieb:
> Kleine Übungsfrage: Wie muss die Bitbreite bei diesem Prozessor
> angegeben werden?

Nach den Angaben sind sowohl Ram als auch Rom 18 bit breit. Was immer 
das soll.

Georg

von c-hater (Gast)


Lesenswert?

chris_ schrieb:

>>Nein. Es gibt die Instruktionen adiw und sbiw, die 16 Bit verarbeiten.
>
> Also in Wahrheit sind die AVRs ja 32 Bit-CPUs:
> http://hobby-roboter.de/forum/viewtopic.php?f=4&t=76

Was soll uns das jetzt sagen? Daß du nicht den Hauch einer Andeutung 
einer Ahnung hast? OK, geschnallt!

adiw und sbiw gibt's wirklich. Vergleiche "avr instruction set 
reference".

Was ich davon halte, habe ich ja bereits zart angedeutet...

von (prx) A. K. (prx)


Lesenswert?

c-hater schrieb:
> Was soll uns das jetzt sagen? Daß du nicht den Hauch einer Andeutung
> einer Ahnung hast? OK, geschnallt!

Hoffentlich hat dein Ironiedetektor noch Garantie.

von chris_ (Gast)


Lesenswert?

>Hoffentlich hat dein Ironiedetektor noch Garantie.

Dankeschön ;-)
Und ich habe mir tatsächlich noch überlegt, ob ich die Tags dran machen 
soll.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.