Von NEC/Renesas kannte ich es bisher so, dass für jeden Interrupt eine
eigene Interruptroutine existierte.
Bei einem PIC18 ist das völlig anders. Dort gibt es nur zwei
Interruptroutinen, eine für high Priority und eine für low. Z.B.:
#pragma interrupt High_ISR
void High_ISR(void)
{ ...
Warum ist das bei den PICs so anders? Was ist der Vorteil, falls es
diesen gibt?
Es ist kein Vorteil.
Aber es schlägt sich halt die Hardwarearchitektur auf die Software
durch.
Das liegt AUCH daran, daß uC-C-Compiler-Programmierer sich viel zu viele
Inkompatibilitäten leisten dürfen ohne von den Kunden abgestraft zu
werden, statt Standards wie "signal" für Interrupts zu verwenden.
> Warum ist das bei den PICs so anders? Was ist der Vorteil, falls es> diesen gibt?
Du bist ein Troll oder? :-)
Die Renesas haben so viel mehr an Hardware gerade im Bereich der
Peripherie das einen fast jeder andere Prozessor dagegen armselig
vorkommt. Ich glaube Fujitsu sind auch noch ganz gut.
Genauer gesagt habe ich nie so recht verstanden warum die bei uns so
gaengigen Typen immer so armselig sind, weil es ja nur ein paar Register
mehr braucht um es besser zu machen.
Olaf
Ulf schrieb:> Warum ist das bei den PICs so anders? Was ist der Vorteil, falls es> diesen gibt?
Ist historisch begründet.
Der PIC wurde 1975 entwickelt und damals wußte man es noch nicht besser.
Und dann hat man es als Ballast immer weiter mitgeschleift, um
kompatibel zu bleiben.
Vorteile hat es überhaupt keine.
Ich benutze nur MCs mit getrennten Interruptvektoren, z.B. 8051, AVR.
Peter
Peter Dannegger schrieb:> Ulf schrieb:>> Warum ist das bei den PICs so anders? Was ist der Vorteil, falls es>> diesen gibt?>> Ist historisch begründet.> Der PIC wurde 1975 entwickelt und damals wußte man es noch nicht besser.
High- und Low-Priority gibt es erst seit PIC18> Und dann hat man es als Ballast immer weiter mitgeschleift, um> kompatibel zu bleiben.
Blödsinn
> Vorteile hat es überhaupt keine.>
Es hat sehrwohl Vorteile: Die High-Priority ISR kann jederzeit eine
Low-Priority ISR unterbrechen. Das ist ein ganz netter Vorteil wenn man
mal darüber nachdenkt.
Lehrmann Michael schrieb:> Es hat sehrwohl Vorteile: Die High-Priority ISR kann jederzeit eine> Low-Priority ISR unterbrechen. Das ist ein ganz netter Vorteil wenn man> mal darüber nachdenkt.
Das geht bei Typen mit eigenen Vektoren auch, siehe 8051. Nur die AVR
können das leider nicht.
> Es hat sehrwohl Vorteile: Die High-Priority ISR kann jederzeit eine> Low-Priority ISR unterbrechen. Das ist ein ganz netter Vorteil wenn man> mal darüber nachdenkt.
Bei guten Prozessoren weisst du dem IRQ eine Prioritaet zwischen 0 und
7, oder 0 und 15 zu. So kannst du selber entscheiden welcher IRQ dir wie
wichtig ist und dein System so sehr fein einstellen.
Wie schon gesagt, nur wenige Bits mehr und ein Prozessor wird
brauchbar....
> Nur die AVR können das leider nicht.
Eine der Gruende warum ich damals von den Teilen weg bin.
Olaf
Olaf schrieb:> Bei guten Prozessoren weisst du dem IRQ eine Prioritaet zwischen 0 und> 7, oder 0 und 15 zu. So kannst du selber entscheiden welcher IRQ dir wie> wichtig ist und dein System so sehr fein einstellen.
Also, soweit ich weiss sind bei den PIC24 und dsPIC30, dsPIC33 getrennte
Vektoren vorhanden, mit sogar einer alternativen Vektortabelle (Bis
jetzt aber nie verwendet). Ebenso können die Prioritäten zwischen 0-7
festgelegt werden. Und wenn ich mich nicht täusche können diese sogar
nested Interrupt ausführen.
Soo armseleig sind die PICs nun auch wieder nicht. Da die 12F-18F halt
auch nicht mehr die jüngsten sind, kann man ihnen ein paar Dinge
verzeihen.
Diese Steinzeit-PIC sind aus heutiger Sicht halt veraltet: Einzelner
Interruptvektor, Speicher auf Bänke verteilt, armseliger Kern
(W-Register...) und so weiter.
Bei den AVR kann man mit etwas Geschick Interrupts wieder freischalten.
Dann kann aber jeder Interrupt anlaufen.
Ab man das überhaupt braucht, ist wieder eine andere Frage. Ich habe es
bis heute nicht vermisst.
Wieder andere legen einige Pins auf einen Kreuzschienenverteiler. Damit
ist man auch nicht mehr an bestimmte Pins gebunden, die womöglich gerade
ungünstig doppelt belegt sind.
Gleiches gibt es für Interrupts: Die kann man bei den ATXmega (nein, ich
mag sie nicht...) untereinander mit irgendwelchen Aktionen verbinden.
Und der Grund? Guck dir mal ein paar alte 8-Bit-Puffer oder
Leitungstreiber aus den TTL-Serien an (74...). Ziemlich oft findest du
da zum Beispiel einen mit niedriger Nummer und scheinbar hirnverbrannter
Pinbelegung (kreuz und quer) und einen mit ähnlicher, hoher Nummer (also
etwa Nummer +100 oder +200) mit identischer Funktion, aber aufgeräumter
Pinbelegung.
Der Grund ist einfach: Es kam ein Layer auf dem Silizium dazu und man
konnte es so endlich entknoten.
Jedem das Seine.
Patrick B. schrieb:> Also, soweit ich weiss sind bei den PIC24 und dsPIC30, dsPIC33 getrennte> Vektoren vorhanden, mit sogar einer alternativen Vektortabelle (Bis> jetzt aber nie verwendet). Ebenso können die Prioritäten zwischen 0-7> festgelegt werden. Und wenn ich mich nicht täusche können diese sogar> nested Interrupt ausführen.
So ist es und ich möchte es auch nicht mehr missen.
Weiss eigentlich jemand, wie alt die Renesas sind? Gibts da überhaupt
8Bit Versionen?
Ein Arbeitskollege hat vor etwa 4 Jahren das erste mahl mit diesen
gearbeitet und da habe ich die zum erten mal gesehen (16Bit Version).
Und wie siehts eigentlich bei den neueren PICs (xlp oder wie die auch
heissen) aus? Sind diese auch noch so mühsam wie die alten 8Bit
Varianten?
Patrick B. schrieb:> Weiss eigentlich jemand, wie alt die Renesas sind?
Renesas ist ein Merger der Halbleitersparten von Hitachi und Mitsubishi
mit neuerdings NEC. Renesas selbst ist also nicht alt, aber die
Ursprungsfirmen sind es und jede davon brachte diverse eigene
Architekturen mit ein. Darunter waren garantiert mindestens eine 8-Bit
Architektur pro Firma. Was es nicht unbedingt übersichtlicher macht.
> Was es nicht unbedingt übersichtlicher macht.
Das gehoert leider zu den Nachteilen von Renesas. Sie haben
einen riesen Berg unterschiedlicher Familien mit diversen
Unterfamilien und dazu noch total viele verschiedene
Debugger/Emulatoren.
Olaf
Olaf schrieb:> Genauer gesagt habe ich nie so recht verstanden warum die bei uns so> gaengigen Typen immer so armselig sind,...
Das hat eine ganze Reihe von Gründen:
Zum einen sind einige Architekturen so angelegt, daß man sie nicht
wirklich in Assembler programmieren kann, was einen Compiler notwendig
macht - und da sind einige Hersteller eben nicht clever gewesen, sondern
haben das Leuten wie IAR, GreenHills etc. überlassen und in der Folge
gibt es nur stinketeure Toolchains für diese Prozessoren. Sowas läßt
eine Infrastruktur aus Bastlern und Enthusiasten eher nicht aufkommen.
Als nächstes sind die Hersteller auch beim Verteilen Ihrer tollen
Produkte höchst unterschiedlich. Von einigen kriegt man deren Chips an
jeder Ecke und bei anderen gibt's für den Bastler garnix. Da waren
Firmen wie Microchip und Atmel eindeutig cleverer als alle Hitachis,
Mitsubishis, Epsons, Samsungs, Necs und Fujitsus zusammen. Die letzteren
haben alle recht nette Controller in ihrem Portfolio, aber was nützt
das, wenn man entweder keine Chips oder keine Toolchain bekommt?
Ich sag's ja immer:
"Wer den Bastler nicht ehrt, ist auch den kommerziellen Erfolg nicht
wert".
Aber ich würde derzeit nicht sagen, daß das Zeugs, was man so als
Bastler bekommt, armseig ist. Mit PIC's und Atmels und neuerdings
ARM's/Cortexen ist man eigentlich ganz passabel bedient und das Fehlen
von typischen Eigenschaften 'dickerer' Chips bei kleineren Typen (PIC16,
PIC12, PIC10) sollte man nicht schmähen - es hat nämlich jeder Typ seine
bevorzugten Einsatzzwecke, wo andere dickere Typen nicht mithalten
können, weil eben zu dick.
W.S.