Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Nein. 8Bitter ist der m328 weil er ein Rechenwerk mit (nur) 8 Bit Breite hat. Daher kann er fast ausnahmslos nur jeweils ein Byte mit einem anderen zusammen verrechnen, addieren, multiplizieren etc. 1) Ein word wird dann eben mit den üblichen Tricks verrechnet wie Carry etc. Mit dem Befehlsbus hat das nix zu tun. Ausserdem könnte er 255 Befehle haben - hat aber nur rund die Hälfte, weil es ein RISC-Prozessor ist (Reduced Instruction Set Computer), also einer Designphilosophie folgt, bei der vorzugsweise die schnellsten verfügbaren Befehle benutzt werden. Übrigens ist der Befehlsbus bei seiner Harvardarchitektur nicht mehr das Nadelöhr, das er noch bei der Von-Neumann-Architektur gewesen ist.
1) Leicht anders funktioniert der bei vielen megas integrierte Hardware-Muliplizierer.
Ciao sagt der JoeamBerg
Danke JoeamBerg , wieder was dazugelernt, bzw. Speicher im Kopf aufgefrischt....Refresh @ll
Gerhard
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Ich freu mich ja, wenn ich mal denke, dass ich irgendetwas weiß. Und Du wusstest das ja auch schon mal.
Im Übrigen ist es nicht so ganz nachvollziehbar, was der Threadersteller meint mit... denn in meinem PingPong in C habe ich ja in word-variablen bitweise geschaltet. Das geht recht easy, auch wenn das Compilat dann ein paar Zeilen mehr macht - was solls.... benutze ja keine RISC-MCU, um sie dann mit ungeschicktem Code zu kastrieren ...
Hier meine Bitoperation im Word-Feld:Code:L[rPr] |= ((uint16_t)1<<4); // Setze LEDBit rPr (rechtes Poti)
Im Einzelnen läuft das so:Code:... volatile uint16_t L[20]; // LED-Reihe 1 bis 10, Rest ist Dummy ... // Aus dieser Codezeile L[rPr] |= ((uint16_t)1<<4); // Setze LEDBit rPr (rechtes Poti) // macht der Compiler dann diesen Maschinencode L[rPr] |= ((uint16_t)1<<4); // Setze LEDBit rPr (rechtes Poti) 404: e0 91 b0 00 lds r30, 0x00B0 408: f0 e0 ldi r31, 0x00 ; 0 40a: ee 0f add r30, r30 40c: ff 1f adc r31, r31 40e: ef 54 subi r30, 0x4F ; 79 410: ff 4f sbci r31, 0xFF ; 255 412: 80 81 ld r24, Z 414: 91 81 ldd r25, Z+1 ; 0x01 416: 80 61 ori r24, 0x10 ; 16 418: 91 83 std Z+1, r25 ; 0x01 41a: 80 83 st Z, r24
Ciao sagt der JoeamBerg
Hallo,
um nochmal auf die Eingangsfrage zurück zu kommen: Das hört sich nach einer Overlay-Technik an, wo mit es dem Programmierer einfacher gemacht werden soll, die beiden Ports abzufragen. Würde ja gut ins Konzept der Arduions passen![]()
Auf Wikipedia les ich grad, dass 8-bit-Prozessoren trotzdem meist 16-bit-Register haben, zur Verarbeitung dann halt 2 Takte brauchen.
Also so schlimm werden die Tricks nicht sein, die nötig sind um auf 8-Bit-Architekturen mit 16-bit-Zahlen zu rechnen.
Lesezeichen