µC: 8bit vs. 16 bit

hallo.

wenn wir so sachen wie schnittstellen und andere features mal außer acht lassen:
was kann eigentlich ein 16bit-µC, was ein 8bitter nicht kann? klar, er kann berechnungen schneller ausführen und meine register sind doppelt so breit usw.
wir gehen mal von task-zyklen von ca. 1…10ms aus und unterstellen an berechnungen nur die grundrechenarten, teilweise im 32-bit-bereich (worum sich ja der compiler kümmert).
bei so sachen wie pwm und timer dürfte es ja auch keine extremen unterschiede geben. bei 8bit läuft’s halt öfter über, was ich irgendwie behandeln muß.
also daß sich ein sourcecode nicht 1:1 von 16 auf 8 bit compilieren läßt, ist klar.

aber welchen grund könnte es geben, unbedingt einen 16bitter einsetzen zu MÜSSEN?

gruß

michael

Hallo

Vielleicht spielt die Speicheradressierung eine Rolle.

Hi,
eigentlich hast Du Deine Frage schon selbst beantwortet.
Der 8er kann praktisch das gleiche wie der große Buder.
Er ist halt etwas langsamer, weil z.B. die Register einzeln ausgelesen bzw. beschrieben werden, in Mathe gibt es Überläufe die Du im Programm abfangen musst.
Und Du musst eben deshalb ein paar Zeilen mehr Sourcecode schreiben.
Bin übrigens gerade dabei ein Programm für einen 8er zu schreiben ;o)
cu
Kalle

Bei gleichen Typen musst Du in etwa Faktor 4 an Geschwindigkeit rechnen. Beispiel: 16-bit incrementieren

16-bitter: i.d.R. ein Befehl in Grundschnelligkeit.
8- bitter: 8-bit incrementieren, überlauf abfragen, evt. springen, oberes Byte incrementieren, alles je in Grundschnelligkeit.

Gleiches gilt in etwa auch für andere operationen.

In erster Näherung sind 16-bitter aber auch mit kräftigeren Befehlen ausgestattet, mehreren Pointerregistern etc.
Andererseits sind die Leistungsübergänge fließend. Ab einer bestimmten Leistungsanforderung aber gibt es praktisch keine 8-bitter mehr zu kaufen, da ein 16-bitter wirtschaftlicher ist.

Wenn Du die Chance hast, einen größeren Prozessor zu benutzen, tu es. In der Regel sind sie einfacher zu Handhaben, da ein int (default-typ eines C-Compilers) auch wirklich „native“ verarbeitet werden kann. Und Rechenleistung wird (wie alles andere auch) immer erst an Ende knapp.

Gruß
achim

Hallo Michael,
das wesentliche wurde bereits gesagt. Es können mit einem 16-Bit-Bus aber nicht nur die Daten schneller verarbeitet werden, sondern auch der Programmcode. Bei 16 Bit Breite kann man z.B. schon 8-Bit-Daten in den Befehlscode mit einbauen. Ein 8-Bitter muß dazu min. 2x auf den Programmspeicher zugreifen. Interessante „Zwischendinger“ sind die kleinen PIC-Mikrokontroller, die eigentlich 8 Bitter sind, aber einen getrennten Befehlsspeicher mit bis zu 16 Bit Breite haben. Damit können die meisten Befehle in einem Taktzyklus abgearbeitet werden. Dadurch ist ein PIC deutlich schneller als ein konventioneller 8-Bit-Kontroller. Bei Mikrokontrollern geht es meistens auch nicht um aufwendige Berechnungen sondern darum, Bits zu schalten und zu (ver)walten oder um Datentransit. Eine größere Datenwortbreite bringt da kaum Vorteile.

Jörg

Hallo

Vielleicht spielt die Speicheradressierung eine Rolle.

glaub ich nicht. ich kann zwar mit 8 bit nur 256 adressen direkt ansprechen, aber das könnte man z.b. über mehrere speicherseiten lösen… oder man macht eben nen 16bit breiten adressbus.

gruß

michael

Hi,
eigentlich hast Du Deine Frage schon selbst beantwortet.
Der 8er kann praktisch das gleiche wie der große Buder.

also sind 16bitter eigentlich nur bequemlichkeitsprozessoren :smile:
es sei denn ich komm mit der performance eines 8bitters nicht mehr hin oder brauch peripherie, die ein solcher nicht bietet.

gruß

michael

andere frage:
hallo.

wenn wir schon bei der geschwindigkeit sind:
wie könnte ich denn evaluieren, ob eine software, die für nen 16bitter geschrieben wurde, auch auf einem 8bitter ausreichend schnell laufen würde?
reichen da so einfache faustformeln wie die hier?

Bei gleichen Typen musst Du in etwa Faktor 4 an
Geschwindigkeit rechnen.

oder empfiehlt es sich schon allein aus zeitgründen, das (sehr umfangreiche) programm mal auf nen 8bitter zu portieren und einfach die durchlaufzeiten zu messen?

gruß

michael

Hallo Michael,

oder empfiehlt es sich schon allein aus zeitgründen, das (sehr
umfangreiche) programm mal auf nen 8bitter zu portieren und
einfach die durchlaufzeiten zu messen?

Ja, wenn es so einfach geht, auf jeden Fall probieren. Denn zur nur schwer vergleichbaren Performance der Rechner kommt auch noch vermutlich ein anderer C-Compiler, der mindestens Faktor 2 auch bei professionellen Anbietern ausmachen kann.

Gruß
achim

(Der leider die meiste Zeit auf einem 8-bit Pic-rumprogrammiert)

1 „Gefällt mir“

Hallo michael,

Vielleicht spielt die Speicheradressierung eine Rolle.

glaub ich nicht. ich kann zwar mit 8 bit nur 256 adressen
direkt ansprechen, aber das könnte man z.b. über mehrere
speicherseiten lösen… oder man macht eben nen 16bit breiten
adressbus.

Der adressbus ist meist auch 16Bit breit, aber ein 16-Biter hat maist einen mit 20 oder 24 Bit breite.

Das mit den speicherseiten geht auch, aber das ergibt wieder mehr Programmcode um die Speicherseiten zu verwalten, mehr code gleich mehr Speicherplatz und langsamere Zugriffe …
Das ganze geht auch mit eimem 4-Biter, frag sich nur ob die Geschwindigkeit ausreicht.

Es gab sogar einmal von Motorola einen 1-Bit Prozessor.

MfG Peter(TOO)

Hallo michael,

also sind 16bitter eigentlich nur bequemlichkeitsprozessoren

-)

es sei denn ich komm mit der performance eines 8bitters nicht
mehr hin oder brauch peripherie, die ein solcher nicht bietet.

Das ganze ist auch eine Kostenfrage …

Wenn du 100 Geräte herstellen willst und die Softwareentwicklungskosten mit Hochsprachen und 4GL-Tools runter bekommst, spielen die kosten für die CPU keine so grosse Rolle.

Willst du 1 Million Geräte herstellen und kannst eine CPU einsetzen welche 1 Euro günstiger ist, kannst du das ganze Programm auch in Assembler entwickeln. Da spielen dann einige 10’000 Euro mehr an Entwicklungskosten keine Rolle.

MfG Peter(TOO)

Hallo michael,

oder empfiehlt es sich schon allein aus zeitgründen, das (sehr
umfangreiche) programm mal auf nen 8bitter zu portieren und
einfach die durchlaufzeiten zu messen?

In der Praxis kannst du das mit dem Umrechnen eher vergessen, da ist portieren einfacher. Schon alleine das Registermodell wird dafür sorgen, dass du mehr Stack für die 8-Bit Version benötigen wirst, wieviel der Code zunimmt ist auch recht schwer abzuschätzen. mwhr Speicherzugriffe verlangsamen aber den Programmablauf zusätzlich.

Weiterhin ist „sehr umfangreich“ keine genaue angabe. vielleicht passt das ganze Projekt gar nicht in den Speicherbereich des 8-Biters … dann kommt noch die Bankverwaltung hinzu, welche mal den Code noch mehr aufbläht und alles noch langsamer macht.

z.B. eine 16x16-Bit Interger-Multiplikation mit 32-Bit Resultat kann ein 16-biter mit einem Befehl erledigen.
Bei einem 8-Biter mit einem 8x8-Bit Multiplikationsbefehl muss das gleiche Problem mitels 4 Multiplikationen und diversen Additionen bewältigen.

MfG Peter(TOO)

MfG Peter(TOO)

1 „Gefällt mir“

Es gab sogar einmal von Motorola einen 1-Bit Prozessor.

is ja klasse! Mehr als Akademisches Projekt? Oder mit ganz realer Anwendung? Gibts da noch infor zu?

gruß
achim

Hallo achim,

Es gab sogar einmal von Motorola einen 1-Bit Prozessor.

is ja klasse! Mehr als Akademisches Projekt? Oder mit ganz
realer Anwendung? Gibts da noch infor zu?

Nö, war eine CMOS-CPU für einfache Steuerungen…
CPU: MC14500
Hier ein kleines Projekt:
http://www.wdr-1-bit-computer.talentraspel.de/

MfG Peter(TOO)