"The (SPI) IF is cleared by hardware when executing the corresponding interrupt vector" Falsch seit Jahren. In allen AVR Series 0/1/2 Controller Dokus. Microchip macht selbst nach offizieller Bestätigung dieses Fehlers keine Anstalten, seine Datenblätter endlich entsprechend zu korrigieren.
:
Bearbeitet durch User
Ron T. schrieb: > "The (SPI) IF is cleared by hardware when executing the corresponding > interrupt vector" > > Falsch seit Jahren. > In allen AVR Series 0/1/2 Controller Dokus. > Microchip macht selbst nach offizieller Bestätigung dieses Fehlers keine > Anstalten, seine Datenblätter endlich entsprechend zu korrigieren. Jepp und das betrifft nicht nur die genannten Baureihen, sondern auch AVR128Dx und es betrifft nicht nur SPI, sondern auch diverse andere Interrupts. Ja die Zeiten, als man sich auf AVR8-Datenblätter wenigstens meistens verlassen konnte, sind seit der Machtübernahme durch MC definitiv vorbei. Neue Devices werden gleich fehlerhaft und stark unvollständig dokumentiert. Und die alten Datenblätter werden nur optisch aufgehübscht, dafür aber mit vielen neuen Doku-Fehlern angereichert. Das muß Absicht sein. Allein durch dramatische Inkompetenz ist das wohl nicht zu erklären.
Ich habe mir deswegen alle Atmel Datenblätter archiviert, die für mich relevant sind.
Beitrag #7063882 wurde von einem Moderator gelöscht.
Haftungsbeschränkter schrieb im Beitrag #7063882: > Da kann man nur hoffen, daß möglichst viel der > "Was-sagt-denn-das-Datenblatt?" > Nölärsche in diese Schlaglöcher fallen und tagelang mit der Suche nach > scheinbar nicht vorhandenen Fehlern zu tun haben. Das passiert nicht. Die sog. "Nölärsche" haben die Kompetenz, sowas innerhalb kürzester Zeit zu detektieren... Wie glaubst du, könnte man sonst ernsthaft zu der Aussage kommen, dass im DB Mist steht? Wobei diese Sache eher simpel ist, das kann man wirklich schnell und einfach detektieren, dazu braucht man noch nichtmal irgendwas in der Nähe von Profi zu sein. Es gibt aber leider DB-Fehler, die noch viel fieser sind und auch die Profis vor echte deduktive Herausforderungen stellen... Die einzige Partei, die das alles absolut nicht zu interessieren scheint, ist MC... Das ist insofern blöd, als dass die die Macht über die Datenblätter haben...
Wie schauts mit der FakeNews Quote bei anderen Herstellern und ihren Datenblättern aus?
Ron T. schrieb: > Wie schauts mit der FakeNews Quote bei anderen Herstellern und ihren > Datenblättern aus? Das kommt so häufig vor das die Hersteller praktisch immer auch ein "Errata Sheet" in der Doku zum Dabla und Manual dazu packen. Dort wird bekanntes Fehlverhalten dokumentiert.
Wieso werden die ersten beiden Posts eigentlich negativ bewertet? Unter welcher geistigen Verirrung leiden hier eigentlich manche? Ich finde das Thema interessant und da es kein Unsinn ist ist, verstehe ich diese Bewertungen einiger hier nicht
KArl Fred M. schrieb: > Wieso werden die ersten beiden Posts eigentlich negativ bewertet? das wird gemacht um die Unsinnigkeit der Bewertung zu zeigen! > Unter welcher geistigen Verirrung leiden hier eigentlich manche? unter der der normalen Menschheit, die ja nichts lernt, nicht mal aus der Geschichte, immerhin haben wir nun 50% Abiquote um mal was Positives beizusteuern! (Kann Ironie enthalten)
Beitrag #7063962 wurde von einem Moderator gelöscht.
Gibt es irgendwo zentral Community-Errata? LG, Sebastian
Ron T. schrieb: > Wie schauts mit der FakeNews Quote bei anderen Herstellern und ihren > Datenblättern aus? Ich erinnere mich gerade an den Signetics 25120 „fully-encoded, 9046 x N Random Access, Write Only Memory“ https://de.wikipedia.org/wiki/Write-Only-Memory Gruß Jobst
Jim M. schrieb: > Das kommt so häufig vor das die Hersteller praktisch immer auch ein > "Errata Sheet" in der Doku zum Dabla und Manual dazu packen. Ist der Fehler da aufgeführt? Falls ja, fühle ich mich veräppelt vom TO. Oder wird der Fehler in DBn neuer Typen nicht erwähnt und stattdessen gleich ein Errata nachgeschoben? Das man alte Datenblätter (oder auch generische Kapitel bei neuen) nur schwer korrigieren kann, sollte klar sein.
A. S. schrieb: > Jim M. schrieb: >> Das kommt so häufig vor das die Hersteller praktisch immer auch ein >> "Errata Sheet" in der Doku zum Dabla und Manual dazu packen. > > Ist der Fehler da aufgeführt? Falls ja, fühle ich mich veräppelt vom TO. > > Oder wird der Fehler in DBn neuer Typen nicht erwähnt und stattdessen > gleich ein Errata nachgeschoben? > > Das man alte Datenblätter (oder auch generische Kapitel bei neuen) nur > schwer korrigieren kann, sollte klar sein. Unsinn. Hast Du solche Doku je in der Hand gehabt? Erstens betrifft das Errata Sheet die Hardware und nicht etwa Doku-Fehler im Datenblatt. Hier scheint mancher nicht zwischen Fehlern in der Hardware und Fehlern im Datenblatt unterscheiden zu können. Und warum sollten sich Datenblätter in Zeiten downloadbarer PDFs nicht korrigieren lassen? c-hater schrieb: > Das muß Absicht sein. Allein durch dramatische Inkompetenz ist das wohl > nicht zu erklären. Die Prioritäten scheinen woanders zu liegen als Produkte möglichst fehlerfrei zu dokumentieren. Mich hat der obige DB-Bug schon mehrfach Stunden sinnloser Fehlersuche gekostet. Daß es Microchip fertig bringt, solche Falschaussagen über Jahre und bei so vielen unterschiedlichen Typen unkorrigiert zu lassen wollte mir einfach nicht in den Sinn kommen. Da scheint öfter Copy&Paste aus früheren AVR-Datenblättern die schnelle Vorgehensweise der Wahl zu sein.
:
Bearbeitet durch User
Sebastian schrieb: > Gibt es irgendwo zentral Community-Errata? Warum hat er dafür -2 bekommen? Ich finde den Vorschlag sinnvoll. Bei Wikipedia funktioniert das immerhin auch. Es müsste nur jemand moderieren, sinnvollerweise der Hersteller. Schließlich will er seine Produkte auch verkaufen. Oder fürchten die Hersteller, dass dabei zu viele Bugs/Probleme aufgedeckt werden?
Ron T. schrieb: > Daß es Microchip fertig bringt, > solche Falschaussagen über Jahre und bei so vielen unterschiedlichen > Typen unkorrigiert zu lassen wollte mir einfach nicht in den Sinn > kommen. Da scheint öfter Copy&Paste aus früheren AVR-Datenblättern die > schnelle Vorgehensweise der Wahl zu sein. Der Stil des Eröffnungsbeitrages gefällt mir gar nicht. Spontan wollte ich ihn dafür gestern kritisieren, aber in der Sache hat er doch Recht. Was Microchip da abliefert lässt sich nach so vielen Jahren nicht mehr entschuldigen. Es ist eine Unverschämtheit.
Ich kann mir auch nicht vorstellen, daß diesbezüglich noch niemand bei Microchip vorstellig wurde. Nachdem ich nun dort selbst aktiv und der Fehler bestätigt wurde (mein Support-Ticket ließ man mir offen) bin ich schon auf die nächsten neuen Datenblatt-Versionen betreffender Controller gespannt! Sofern sie überhaupt kommen natürlich.
:
Bearbeitet durch User
KArl Fred M. schrieb: > Wieso werden die ersten beiden Posts eigentlich negativ bewertet? Weil rummeckern ohne exakte Beschreibung des konkreten Fehlerbildes eben negativ bewertet wird. > Microchip macht selbst nach offizieller Bestätigung dieses Fehlers keine > Anstalten, seine Datenblätter endlich entsprechend zu korrigieren. Vielleicht weil die Erratas also die Fehlerbestätigung auch zur Dokumentation gehören?! Ein Datenblatt gibt halt auch die Spezifikation wieder, das reale Verhalten ist dann eben andere Stelle im Konvolut festgehalten (user guide), oder steckt quasi in den mitgelieferten Treibern etc..
Jim M. schrieb: > Ron T. schrieb: >> Wie schauts mit der FakeNews Quote bei anderen Herstellern und ihren >> Datenblättern aus? > > Das kommt so häufig vor das die Hersteller praktisch immer auch ein > "Errata Sheet" in der Doku zum Dabla und Manual dazu packen. > > Dort wird bekanntes Fehlverhalten dokumentiert. Naja, hier gibt's ja zwei mögliche Fehlerarten. Das eine sind Fehler im Silizium, wo etwas nicht so funktioniert, wie es gedacht war, das andere sind Fehler im Datenblatt, die das Verhalten falsch dokumentieren. Fpgakuechle K. schrieb: > KArl Fred M. schrieb: >> Wieso werden die ersten beiden Posts eigentlich negativ bewertet? > > Weil rummeckern ohne exakte Beschreibung des konkreten Fehlerbildes eben > negativ bewertet wird. Das "Fehlerbild" wurde doch beschrieben. Nur ist eben die Frage, was es bringen soll, sich hier über einen Fehler in den AVR-Datenblättern zu beschweren. Das einzige wäre, dass andere, die in diese Falle tappen, hier diese Information finden können. Dafür ist aber die Überschrift nicht sonderlich gut gewählt.
Fpgakuechle K. schrieb: > Weil rummeckern ohne exakte Beschreibung des konkreten Fehlerbildes eben > negativ bewertet wird. Was fehlt dann deiner Meinung nach an der Exaktheit der Fehlerbeschreibung? Im Datenblatt steht, dass das Durchlaufen des Interruptvektors den Interrupt zurück setzen würde. Genau das passiert aber nachweislich nicht. Was soll man da noch weiter rumschwafeln? Man könnte darüber streiten, ob es nun ein Bug der Hardware oder ein Fehler in der Dokumentation ist. Das kann nur MC wissen. Aber wie auch immer: Wenn's ein Hardwarebug ist, hat's als Erratum aufzutauchen, wenn's ein Fehler der Dokumentation ist, hat's korrigiert zu werden und die Korrektur in der Versionshistorie des Dokuments verzeichnet zu werden. Ende der Geschichte.
c-hater schrieb: > dass das Durchlaufen des > Interruptvektors den Interrupt zurück setzen würde. Genau das passiert > aber nachweislich nicht. Und wir wissen ja auch, das es für viele Peripherie in den AVR8 funktioniert. Ich vermute deswegen schlicht und einfach einen nie korrigierten Hardware Bug im SPI Block und ein Datenblatt, das die Wahrheit ignoriert. c-hater schrieb: > sondern auch diverse andere > Interrupts. Und welche sind das?
c-hater schrieb: > Fpgakuechle K. schrieb: > >> Weil rummeckern ohne exakte Beschreibung des konkreten Fehlerbildes eben >> negativ bewertet wird. > > Was fehlt dann deiner Meinung nach an der Exaktheit der > Fehlerbeschreibung? Im Datenblatt steht, dass das Durchlaufen des > Interruptvektors den Interrupt zurück setzen würde. Genau das passiert > aber nachweislich nicht. Die fRage ist eben, was "executing the corrosponding vector" aus Sicht der Dokumentation bedeudet?! Mancherorts steht geschrieben, das man bei Abarbeitung der ISR auf das Datenregister zugreift und dann wird das Flag gelöscht. Genau so macht das aus Sicht eines IC-Entwicklers (BTW: meine Sicht) Sinn. Wenn man dagegen die Doku allein so versteht, das das reine Anspringen des Vectors genügen würde, unabhängif davon auf welche register der Code dort tatsächlich zugreift, dann hat man die Doku überinterpretiert. > Genau das passiert > aber nachweislich nicht. Bitte Nachweis nachvollziehbar beschreiben. > Was soll man da noch weiter rumschwafeln? Eine Fehlerbeschreibung, die eine Eingrenzung und Reproduzierbarkeit des Fehlers gestattet ist kein Geschwafel. Nicht selten stellt sich dabei heraus, das kein Produkt- sondern ein Verständnisfehler ist. PS: Das Ganze wurde doch schon x-Mal diskutiert: Beitrag "ATtiny817, SPI ISR löscht IF nicht" Beitrag "Arduino 841 ISR SPI" Beitrag "ATmega809 - SPI empfängt 1 Byte und dann nie wieder"
Beitrag #7064356 wurde von einem Moderator gelöscht.
Beitrag #7064359 wurde von einem Moderator gelöscht.
Fpgakuechle K. schrieb: > Die fRage ist eben, was "executing the corrosponding vector" aus Sicht > der Dokumentation bedeudet?! Mancherorts steht geschrieben, das man bei > Abarbeitung der ISR auf das Datenregister zugreift und dann wird das > Flag gelöscht. Genau so macht das aus Sicht eines IC-Entwicklers (BTW: > meine Sicht) Sinn. Wenn man dagegen die Doku allein so versteht, das das > reine Anspringen des Vectors genügen würde, unabhängif davon auf welche > register der Code dort tatsächlich zugreift, dann hat man die Doku > überinterpretiert. „The IF is cleared by hardware when executing the corresponding interrupt vector. Alternatively, the IF can be cleared by first reading the SPIn.INTFLAGS register when IF is set and then accessing the SPIn.DATA register.“ Da gibts nichts zu interpretieren. Oliver
Oliver S. schrieb: > „The IF is cleared by hardware when executing the corresponding > interrupt vector. Alternatively, the IF can be cleared by first reading > the SPIn.INTFLAGS register when IF is set and then accessing the > SPIn.DATA register.“ > > Da gibts nichts zu interpretieren. Doch. "executing the corresponding interrupt vector" vector ist ein synonym für Addresse. Eine Addresse kann nicht ausgeführt werden, sondern nur der Code auf dieser Adresse. Also was ist das für ein Code, der da ausgeführt wird?! Und sind mglw. weitere Voraussetzungen zu erfüllen, das der ISR als solcher ausgeführt wird ?! gelegentlich muss bei multi-purpose Pins, die entsprechende Funktion wie bspw. SPI in einem Register freigeschaltet werden (TWISPIROUTEA, CTRLA). Sonst funktioniert SPI-mäßig garnichts. http://ww1.microchip.com/downloads/en/AppNotes/TB3215-Getting-Started-with-SPI-90003215A.pdf Hilfreich wäre es, den Test dafür zu gehen. Eine Hinweis beim Schreiben von Requiremts/Spec ist "Überleg dir gleichzeitig, wie du dieses Feature prüfen willst" Also muss es auch Prüfcode geben wit dem dieses feature gestestet wird. Der kann natürlich fehlerhaft hast, ist auch schon intel passiert (FDIV-Bug). Und natürlich kann man das problem auch als gelöst betrachten, wenn ein workaround veröffentlicht wurde: "3. Clearing the Interrupt flag, if it is not cleared automatically by the hardware." auch wenn dies nicht explicit als workaround deklariert wurde.
Unter "executing the corresponding interrupt vector" verstehe ich den Moment, wo die CPU den Interrupt Vektor anspringt. Das dies bei AVR diverse Flags außerhalb der CPU (und IRQ Controller) zurück setzt ist nicht neu. Bei STM32 wäre es hingegen überraschend.
Fpgakuechle K. schrieb: > Oliver S. schrieb: > >> „The IF is cleared by hardware when executing the corresponding >> interrupt vector. Alternatively, the IF can be cleared by first reading >> the SPIn.INTFLAGS register when IF is set and then accessing the >> SPIn.DATA register.“ >> >> Da gibts nichts zu interpretieren. > > Doch. "executing the corresponding interrupt vector" > vector ist ein synonym für Addresse. Nein. Beim AVR ist ein Interrupt-Vektor eine Instruktion, die ausgeführt wird, wenn der Interrupt ausgelöst wird. In der Regel nimmt man dafür einen Sprungbefehl, der dann zum Anfang der ISR springt. Und laut dem ersten Satz oben, wir bei Ausführung dieses Befehls gleichzeitig automatisch von der Hardware das Interrupt flag gelöscht. Auch da gibt's keinen Spielraum für Interpretation.
Stefan ⛄ F. schrieb: > Unter "executing the corresponding interrupt vector" verstehe ich den > Moment, wo die CPU den Interrupt Vektor anspringt. Und ein IC-Designer versteht das eben als 'True' am Ausgang eines Comparatores mit den Eingängen Instruction-decoderegister und Konstante "start SPI-ISR "(IRQ- vector table). und dann noch ein AND über das Enable vom SPI-Module. Wenn teile diese Logik noch in anderen Takt-domainen liegen, wird es knifflig (einsynchronisieren). Und was ist mit der Fordeung nach code-relocation ? (Speichermanagment). Mancher IC-Designer ist dann geneigt, dieses Requirement streichen zu lassen, weil man sich auf diese Weise Problem einhandelt als gelöst werden (Vermeidung des expliziten Löschens durch einen Bit-befehl im IRQ-Handler). Oder als Nebeneffekt beim Lesen des Datenregister.
Fpgakuechle K. schrieb: > Wenn teile diese Logik noch in anderen Takt-domainen liegen, wird es > knifflig (einsynchronisieren). Und was ist mit der Forderung nach > code-relocation ? Beides gibt es bei den klassischen AVR nicht.
Rolf M. schrieb: > Nein. Beim AVR ist ein Interrupt-Vektor eine Instruktion, die ausgeführt > wird, wenn der Interrupt ausgelöst wird. Also in dem oben genannten ausführlichen Dokument zu SPI (TB3215) kommt 'vector' oder 'vektor' nicht vor :-( http://ww1.microchip.com/downloads/en/AppNotes/TB3215-Getting-Started-with-SPI-90003215A.pdf
Fpgakuechle K. schrieb: > http://ww1.microchip.com/downloads/en/AppNotes/TB3215-Getting-Started-with-SPI-90003215A.pdf Das ist kein Datenblatt. Es geht hier ums Datenblatt. Und zwar das Datenblatt eines AVR Serie 0/1/2. Anscheinend kennst du sie nicht, also auch nicht die hier relevanten Unterschiede zu klassischen AVR von deren Datenblätter offenbar abgeschrieben wurde.
Stefan ⛄ F. schrieb: > Fpgakuechle K. schrieb: >> Wenn teile diese Logik noch in anderen Takt-domainen liegen, wird es >> knifflig (einsynchronisieren). Und was ist mit der Forderung nach >> code-relocation ? > > Beides gibt es bei den klassischen AVR nicht. Zählst du die hier vom TO refenrenzierten tinyAVR® 0-series zu den klassischen AVR?
Fpgakuechle K. schrieb: > Zählst du die hier vom TO refenrenzierten tinyAVR® 0-series zu den > klassischen AVR? Nein. Und eben da könnte der Knackpunkt liegen. Die haben von alten Modellen abgeschrieben, die anders ausgebaut sind.
Ja und? Der Begriff "vector" gehört zum interrupt handling, nicht zu SPI. Oliver
Fpgakuechle K. schrieb: > Also in dem oben genannten ausführlichen Dokument zu SPI (TB3215) kommt > 'vector' oder 'vektor' nicht vor :-( Das ist ja auch nur eine Application Note, die sich mit den Interrupts nur im Bezug auf die entsprechenden Flags beschäftigt. Den Rest holt man eher aus dem Datenblatt des jeweiligen Prozessors.
Oliver S. schrieb: > Ja und? Der Begriff "vector" gehört zum interrupt handling, nicht zu > SPI. Bei klassischen AVR sind die Funktionseinheiten nicht so stark voneinander getrennt. Im Gegensatz zu moderneren Mikrocontrollern wurden sie nicht aus unabhängigen "Legosteinen" zusammen gesetzt, sondern da gibt es wirklich eine Menge Quer-Verbindungen. Unter anderem Deswegen braucht man dort für die gleiche Aufgabe oft wesentlich weniger Befehle, als bei moderneren Mikrocontrollern. Die vom TO monierten, gehören zu den "moderneren". Der falsche Text entstammt aber offenbar älteren Datenblättern.
Stefan ⛄ F. schrieb: > Fpgakuechle K. schrieb: >> Zählst du die hier vom TO refenrenzierten tinyAVR® 0-series zu den >> klassischen AVR? > > Nein. Anbei auszug aus der series-0 doku, da kann man IMHO schon mehr als nur eine clock domain erkennen. > Und eben da könnte der Knackpunkt liegen. Die haben von alten > Modellen abgeschrieben, die anders ausgebaut sind. Also passt das µC-Modell bei dem ein abweichendes Verhalten festgestellt wurde, nicht zu dem µC-Modell auf das sich das angemeckerte Datenblatt bezieht?! Da würde ich nicht von 'penetranten Lügen' aka "Dauerhaft FakeNews" schreiben, zumal es ja in der detaillierten SPI-Beschreibung realistsicher/fehlertoleranter beschrieben ist. Errare humanum est - auch in Datenblättern.
Fpgakuechle K. schrieb: > Also passt das µC-Modell bei dem ein abweichendes Verhalten festgestellt > wurde, nicht zu dem µC-Modell auf das sich das angemeckerte Datenblatt > bezieht?! Du hast ein Bild von "modernen" (nicht klassischen AVR) gezeigt. Die Kritik vom TO bezieht sich auf ein Datenblatt eines "modernen" AVR. Der falsche Text würde hingegen zu einem klassischen AVR passen.
Fpgakuechle K. schrieb: > Errare humanum est - auch in Datenblättern. Ja gerne. Doch gemeldet Fehler sollten korrigiert werden. Hier wurde schon öfter gemeldet, dass diverse Fehler trotz Meldung nicht korrigiert wurden. Seit der Übernahme durch Microchip hat ist die Qualität der AVR Datenblätter auffällig gesunken. Da hat der TO schon absolut Recht.
Stefan ⛄ F. schrieb: > Fpgakuechle K. schrieb: >> Errare humanum est - auch in Datenblättern. > > Ja gerne. Doch gemeldet Fehler sollten korrigiert werden. Hier wurde > schon öfter gemeldet, dass diverse Fehler trotz Meldung nicht korrigiert > wurden. Diese Absicht ist sicher gerechtfertigt. Meine Erfahrung zeigt, das man sich und anderen leichter tut, nicht von 'Fehler' zu reden und'Korrektur' einzufordern, stattdessen v. "Missverständnissen", "suboptimalen Formulierungen" sprechen. Und konkrete Vorschläge machen, wie man das 'näher am Optimum' tippen könnte. Da bleibt dem Autor der angemeckerten zeilen genug Platz zur "Geichtswahrung". Ja, der Umgang mit Menschen ist oft nicht einfach ;-) https://www.youtube.com/watch?v=TYiqgU_GrAE > Seit der Übernahme durch Microchip hat ist die Qualität der AVR > Datenblätter auffällig gesunken. Da hat der TO schon absolut Recht. der TO bezieht sich hier auf einen µC, der 2018 vorgestellt wurde, da könnte man noch von (bekannten) Kinderkrankheiten sprechen.
Fpgakuechle K. schrieb: > Diese Absicht ist sicher gerechtfertigt. Vermutlich in der Hoffnung, das ein Asiate beim Nachbau des Chips dabei sich genau an das Datenblatt hält. Dann funktioniert der Nachbauchip falsch gegenüber dem echten Chip. Stefan ⛄ F. schrieb: > Seit der Übernahme durch Microchip hat ist die Qualität der AVR > Datenblätter auffällig gesunken. Da hat der TO schon absolut Recht. Alles vorarbeiten zur Beerdigung der AVR-Chips würde ich mal vermuten oder so dumm kann doch keine raubtierkapitaliste Firmenführung sein, oder vielleicht doch...
Fpgakuechle K. schrieb: > Meine Erfahrung zeigt, das man sich und anderen leichter tut, nicht von > 'Fehler' zu reden und'Korrektur' einzufordern, stattdessen v. > "Missverständnissen", "suboptimalen Formulierungen" sprechen Was soll der Quatsch? Die getroffene Aussage ist schlicht falsch und gehört korrigiert. In allen Series 0/1/2 Datenblättern und das seit Jahren. Warum versuchst Du das hier zu relativieren? Nachdem sich das Interruptverhalten aller neueren AVRs geändert hat dürfte es sich mit höchster Wahrscheinlichkeit auch um keinen Hardware-Bug handeln. Vom 4808 etwa kann ich berichten, daß das SPI IF Flag ebenso mit dem Schreiben einer 1 an die Register- Position zu löschen ist. Nach eigenem Herumtesten. Das ist bei anderen Interruptregistern (richtig dokumentiert) genauso. Fpgakuechle K. schrieb: > der TO bezieht sich hier auf einen µC, der 2018 vorgestellt wurde Wie kommst Du jetzt darauf? Ich sprach von ALLEN Series 0/1/2 Typen. Bis zu den allerneuesten, noch nicht erhältlichen AVRxxDD.
:
Bearbeitet durch User
Es wäre besser gewesen, den Series 0/1/2 Typen einen ganz anderen Namen zu geben. Also nicht ATtiny 4808, sondern z.B. Xtiny 4808 oder neoAVR 4808. Dann wäre auch jedem Anfänger klar welche nun zu den klassischen AVR zählen, und welche nicht.
Dieter schrieb: > Fpgakuechle K. schrieb: >> Diese Absicht ist sicher gerechtfertigt. > > Vermutlich in der Hoffnung, das ein Asiate beim Nachbau des Chips dabei > sich genau an das Datenblatt hält. Dann funktioniert der Nachbauchip > falsch gegenüber dem echten Chip. Dann ist er quasi nicht Bugkompatibel. Ron T. schrieb: > Was soll der Quatsch? > Die getroffene Aussage ist schlicht falsch und gehört korrigiert. Bei Generation Snowflake gibt es kein "falsch". Alles ist per Definition richtig, und es gibt nur unterschiedlich viel Potenzial, um es noch besser zu machen.
Im übrigen brauchen wir hier nicht lange heruminterpretieren seitdem der Dokumentationsfehler von Microchip höchstselbst bestätigt ist. Stefan ⛄ F. schrieb: > Es wäre besser gewesen, den Series 0/1/2 Typen einen ganz anderen Namen > zu geben. Finde ich genauso. Immerhin, die AVRxxDx pflegen ein neues Namens-Schema.
Je nun, Namen - waren sie nicht mal Schall & Rauch? Heutzutrage ist jeder ein 'Troll', dessen Nase nicht gefällt, oder ein eklatanter Fehler im Datenblatt wird unter "Fake News" subsummiert.
Je angelsächsisch-infantiler, desto weniger sind die Leute anscheinend in der Lage, Wörtern differenzierten Sinn zuzuordnen. Was haben Fehler im Datenblatt mit bewußt lancierten Falschnachrichten zu tun?
Stefan ⛄ F. schrieb: > Fpgakuechle K. schrieb: >> > http://ww1.microchip.com/downloads/en/AppNotes/TB3215-Getting-Started-with-SPI-90003215A.pdf > > Das ist kein Datenblatt. Es geht hier ums Datenblatt. Eigentlich geht es um eine Beschreibung wie man es richtig macht, hier mit dem SPI auf diesem µC. Ob das Datenblatt oder TB heisst -wurscht- es ist Teil der offizielle Dokumentation. Wie ich bereits schrieb, data sheet hat auch viel von product specifiaction, also steht da drin, was der fertige Chip tun soll. bei Xilinx steht da bei den timings oft "Preliminary Data" also vorläufige daten. als Begründung wurde angegeben, das man 'production data' erst dann angeben kann, wenn man genügend Statistik über die Serie hat. Manchmal wird der Chip eben nie fertig, man fixed dann auch keine 'Fehler' weil man abwärtskompatible sein will. PS: auch den series-0 datasheet steht Datasheet Preliminary (siehe Anhang) PSS: Die doku wurde neu strukturiert, deshalb scheint es von dem 2019 series-0 datenblatt keine Updates zu geben. Es gibt sie aber (ist aber auch nicht der weisheit letzter schluss).
Fpgakuechle K. schrieb: > Eigentlich geht es um eine Beschreibung wie man es richtig macht, Eigentlich geht es hier um korrekte Datenblätter! > Manchmal wird der Chip eben nie fertig Bei Datenblättern besteht diese Möglichkeit aber. Zumal nach Jahren. > Datasheet Preliminary Die Series 0/1/2 hat durchaus Vertreter bei denen dieser Status überwunden ist. Z.B. beim schon erwähnten 4808.
Wühlhase schrieb: > Was haben Fehler im Datenblatt mit bewußt lancierten Falschnachrichten > zu tun? FakeNews war so reißerisch überdreht wie der beschriebene Bug unverschämt lange unkorrigiert :) Ich nehm die FakeNews zurück.
c-hater schrieb: > Das ist insofern blöd, als dass die die Macht über > die Datenblätter haben... Nö, schreib doch einfach eigene. ;P
Fpgakuechle K. schrieb: > PS: > Das Ganze wurde doch schon x-Mal diskutiert: > Beitrag "ATtiny817, SPI ISR löscht IF nicht" > Beitrag "Arduino 841 ISR SPI" > Beitrag "ATmega809 - SPI empfängt 1 Byte und dann nie wieder" Mir wär die Überwindung dieser Rekursion lieber. Solche fahrlässigen Datenblatt-Fehler dürften schon so einige Debugging-Stunden gekostet haben.
:
Bearbeitet durch User
Ron T. schrieb: > Fpgakuechle K. schrieb: >> Eigentlich geht es um eine Beschreibung wie man es richtig macht, > > Eigentlich geht es hier um korrekte Datenblätter! Ich weiss ja nicht, ob du Englisch-Lehrer/Paragraphenreiter oder Elektroniker bist. Einem Elektroniker/Ingenieur geht es um konstruktiven Umgang mit der Technik. Falls sich also ein Ding nicht wie beschrieben verhält, dann analysiert man das und findet einen work around und macht so das Ganze (für die community) nutzbar. Und Sprache ist ohnehin selten fehlerfrei, schon aus Prinzip nicht: https://de.wikipedia.org/wiki/G%C3%B6delscher_Unvollst%C3%A4ndigkeitssatz https://de.wikipedia.org/wiki/Tractatus_logico-philosophicus#Sagen_und_Zeigen,_Grenzen_der_Sprache >> Manchmal wird der Chip eben nie fertig > > Bei Datenblättern besteht diese Möglichkeit aber. Zumal nach Jahren. Naja viel Erfahrung haste mit solchen Dingen nicht, man spricht nicht umsonst von Kinderkrankheit, manche Produkte/Datenblätter sind erst mit 18 halbwegs reif. Selbst ein Donald Knuth muss noch Belohnungs-schecks für gefundene Fehler ausstellen: https://en.wikipedia.org/wiki/Knuth_reward_check > Die Series 0/1/2 hat durchaus Vertreter bei denen dieser Status > überwunden ist. Z.B. beim schon erwähnten 4808. Es wäre schön, wenn Du mal links angeben würdest, das erspart einem die Suche.
Fpgakuechle K. schrieb: > falls sich also ein Ding nicht wie beschrieben verhält, dann analysiert > man das Etwas anderes bleibt auch nicht übrig. Aber muß das sein? Du kommst aus dem Relativierungs-Trip harter Datenblatt-Fehler einfach nicht raus... > manche Produkte/Datenblätter sind erst mit > 18 halbwegs reif. dito. Fpgakuechle K. schrieb: > das erspart einem die Suche Viel Erfahrung beim Auffinden von Datenblättern scheinst Du nicht zu haben.
Ron T. schrieb : > Mir wär die Überwindung dieser Rekursion lieber. Solche fahrlässigen > Datenblatt-Fehler dürften schon so einige Debugging-Stunden gekostet > haben. Naja, der ganze Umgang mit Elektronik kostet Lebenszeit nicht zu knapp, Debugging, In-Betriebnahme, Evaluierung, ... egal wie man es nennt. Sollte man aber dem Mephisto aus Faust zustimmen ?!? "... denn alles was entsteht ist werth daß es zu Grunde geht; Drum besser wär's daß nichts entstünde ..." > Fpgakuechle K. schrieb: >> falls sich also ein Ding nicht wie beschrieben verhält, dann analysiert >> man das > > Etwas anderes bleibt auch nicht übrig. Aber muß das sein? Ja. Kannst dir ja auch ein anderes Lebensziel suchen ... > Du kommst aus > dem Relativierungs-Trip harter Datenblatt-Fehler einfach nicht raus... Eben konstruktiver Umgang um Technik, dein Berufswunsch im Kindergarten war wohl eher "Bestrafer". SCNR > Viel Erfahrung beim Auffinden von Datenblättern scheinst Du nicht zu > haben. Naja, woher soll man wissen welches datenblatt du grad meinst wenn du weder Typ noch Jahreszahl angibst. Aber darauf scheinst du es ja anzulegen, Leute in die Irre zu schicken und deren zeit zu stehlen.
Fpgakuechle K. schrieb: > Sollte man aber dem Mephisto aus Faust zustimmen ?!? Im Zusammenhang mit Datenblättern könnte man da glatt an "schwarz auf weiß" denken.
Fpgakuechle K. schrieb: > wenn du weder Typ Mit 4808 ist ein AtMega4808 gemeint. Falls Du daran gescheitert sein solltest... > Eben konstruktiver Umgang um Technik, dein Berufswunsch im Kindergarten Dein lockerer Umgang mit Datenblatt-Inhalten erinnert sicher nicht an professionelle Arbeitsweise sondern eher an... du hast es gesagt, Kindergarten! > Aber darauf scheinst du es ja anzulegen, Leute in die Irre zu schicken > und deren zeit zu stehlen. Ich lege es sicher nicht drauf an daß Du hier Deine Zeit zur Relativierung vermeidbarer Fehler verschwendest.
Ron T. schrieb: > Fpgakuechle K. schrieb: >> wenn du weder Typ > > Mit 4808 ist ein AtMega4808 gemeint. Falls Du daran gescheitert sein > solltest... Link! >> Eben konstruktiver Umgang um Technik, dein Berufswunsch im Kindergarten > > Dein lockerer Umgang mit Datenblatt-Inhalten erinnert sicher nicht an > professionelle Arbeitsweise sondern eher an... du hast es gesagt, > Kindergarten! Leck mich! > Ich lege es sicher nicht drauf an daß Du hier Deine Zeit zur > Relativierung vermeidbarer Fehler verschwendest. Wo du es sagt - Over and out und PLONK nicht vergessen.
Rolf M. schrieb: > Bei Generation Snowflake gibt es kein "falsch". Alles ist per Definition > richtig, und es gibt nur unterschiedlich viel Potenzial, um es noch > besser zu machen. Ist manchmal echt ne Herausforderung.
Fpgakuechle K. schrieb: > Eigentlich geht es um eine Beschreibung wie man es richtig macht, Keineswegs. Der TO und wir alle wissen, wie man es richtig macht. Es geht darum, dass das Datenblatt eine falsche Information enthält. Das kann man ganz klar im Eröffnungsbeitrag lesen. Wenn dir nicht klar, wie man es richtig macht - dein Problem. Das kannst du gerne in einem separaten Thread klären.
>> Die Series 0/1/2 hat durchaus Vertreter bei denen dieser Status >> überwunden ist. Z.B. beim schon erwähnten 4808. Fpgakuechle K. schrieb: > Es wäre schön, wenn Du mal links angeben würdest, das erspart einem die > Suche. Oh Mann, das bringt Google gleich als erstes Suchergebnis! https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega4808-09-DataSheet-DS40002173C.pdf
Beitrag #7064681 wurde von einem Moderator gelöscht.
Rolf M. schrieb: > Nein. Beim AVR ist ein Interrupt-Vektor eine Instruktion, die ausgeführt > wird, wenn der Interrupt ausgelöst wird. In der Regel nimmt man dafür > einen Sprungbefehl, der dann zum Anfang der ISR springt. Und was, wenn nicht gesprungen wird, weil die ISR direkt dort beginnt? Einfach, weil dort genug Platz ist? Oder weil man den Sprung sparen möchte? Nein, der Vektor ist die feste(!) Adresse, ab der Code im Falle eines IRQs abgearbeitet wird. Wenn dort ein Sprung zu einer variablen Adresse Deiner ISR steht, dann gehört dies aus Prozessorsicht schon zur ISR. Stefan ⛄ F. schrieb: > Also nicht ATtiny 4808, sondern z.B. Xtiny 4808 oder neoAVR 4808. Dann > wäre auch jedem Anfänger klar welche nun zu den klassischen AVR zählen, > und welche nicht. Die ganzen verPICkelten Controller müssten konsequenterweise MCtiny oder MCmega heißen. Kommen ja nun von MyCropChip, nicht mehr von Atmel. Ich warte ja darauf, dass sie dort, wie beim PIC, primzahllange Register einbauen. Gruß Jobst
Jobst M. schrieb: > Rolf M. schrieb: >> Nein. Beim AVR ist ein Interrupt-Vektor eine Instruktion, die ausgeführt >> wird, wenn der Interrupt ausgelöst wird. In der Regel nimmt man dafür >> einen Sprungbefehl, der dann zum Anfang der ISR springt. > > Und was, wenn nicht gesprungen wird, weil die ISR direkt dort beginnt? > Einfach, weil dort genug Platz ist? Oder weil man den Sprung sparen > möchte? Was soll dann sein? Dann wird von dort eben nicht gesprungen. Deshalb schrieb ich "in der Regel". Einen Zwang, dass da ein Sprungbefehl stehen muss, gibt es nicht. > Nein, der Vektor ist die feste(!) Adresse, ab der Code im Falle eines > IRQs abgearbeitet wird. Der Interrupt-Vektor ist ein Element der Interrupt-Vektor-Tabelle. Elemente der Tabelle sind keine Adressen, sondern haben Adressen. Aus dem Datenblatt des Atmega88/168: "All interrupts have a separate interrupt vector in the interrupt vector table. The interrupts have priority in accordance with their interrupt vector position." Die "interrupt vector position" ist die Adresse, von der du sprichst. Der "interrupt vector" ist das, was an dieser Adresse steht.
Rolf M. schrieb: > Der "interrupt vector" ist das, was an dieser Adresse steht. Sehe ich anders. So wie hier: https://en.wikipedia.org/w/index.php?title=Interrupt_vector Gruß Jobst
:
Bearbeitet durch User
Rolf M. schrieb: > Elemente der Tabelle sind keine Adressen, sondern haben Adressen. Das ist in diesem Fall gleichbedeutend. Das einzig Wesentliche an der Position in der Interruptvektortabelle ist ja gerade nur deren Adresse (= der Interruptvektor) der darin angesprungen wird. Was sollten die "Elemente der Tabelle" denn sonst sein außer fixe Adressen im Speicher?
Hmmm, interessant, bei den AVRs bin ich da nie drüber gestolpert da ich den SPI nie so langsam benutzt habe das ein Interrupt überhaupt Sinn gemacht hätte. https://github.com/MicrochipTech/TB3215_Getting_Started_with_SPI Ah, ok, in den Beispielen nutzen die den Interrupt im Slave-Mode. Aber jetzt schaue ich gerade mal interessiert auf das 4809 Datenblatt und um das nochmal zu zitieren: "Bit 7 – IF Interrupt Flag This flag is set when a serial transfer is complete, and one byte is completely shifted in/out of the SPIn.DATA register. If SS is configured as input and is driven low when the SPI is in Host mode, this will also set this flag. The IF is cleared by hardware when executing the corresponding interrupt vector. Alternatively, the IF can be cleared by first reading the SPIn.INTFLAGS register when IF is set and then accessing the SPIn.DATA register." In der Application Note die oben verlinkt ist findet sich das hier:
1 | ISR(SPI0_INT_vect) |
2 | { |
3 | receiveData = SPI0.DATA; |
4 | SPI0.DATA = writeData; |
5 | SPI0.INTFLAGS = SPI_IF_bm; /* Clear the Interrupt flag by writing 1 */ |
6 | } |
Ist jetzt nur ein Gedankenspiel da ich keinen 4809 habe um das auszuprobieren. Und jetzt mal abgesehen davon das da steht, dass das Flag automatisch gelöscht wird, aber müsste dem Datenblatt nach die ISR nicht eher so aussehen?
1 | ISR(SPI0_INT_vect) |
2 | { |
3 | (void) SPI0.INTFLAGS; /* prepare clearing the interrupt flags */ |
4 | receiveData = SPI0.DATA; /* the flags should be cleared now */ |
5 | SPI0.DATA = writeData; |
6 | } |
Also die mit der Application Note vorgestellte alternative Version des Interrupt-Handling hat doch auch nichts mit dem Datenblatt zu tun? Das ist ja jetzt nicht so ungewöhnlich das Flags gelöscht werden wenn man da eine 1 rein schreibt, nur steht das ja so auch nicht im Datenblatt. Edit: https://github.com/MicrochipTech/TB3215_Getting_Started_with_SPI/blob/master/ATmega4809_SPI_Examples/Receiving_Data_as_Slave/main.c Das ist also schon direkt für den 4809.
:
Bearbeitet durch User
Rolf M. schrieb: > Der Interrupt-Vektor ist ein Element der Interrupt-Vektor-Tabelle. > Elemente der Tabelle sind keine Adressen, sondern haben Adressen. Das hat er bestimmt mit ARM verwechselt. Bei ARM gibt es eine Tabelle mit Sprungadressen. Die Position der Tabelle ist variabel. Bei AVR gibt es diese Indirektion nicht. Da wird beim Interrupt direkt an eine feste Adresse gesprungen. Da diese Adressen dicht hintereinder liegen ist dort nur Platz für jeweils einen einzigen Befehl (IRET oder RJMP). In der Praxis läuft es darauf hinaus, dass der Block mit den Interrupt Vektoren meist Reihe von RJMP Befehlen zu den eigentlichen Interruptroutinen enthält. Deswegen wird das oft mit einer Vektor-Tabelle verglichen, ist es aber genau genommen nicht. Für die AVR CPU besteht das Ausführen einer Interrupt-Anforderung darin, direkt zu einem fest vorgegebenen Interrupt Vektor zu springen. Eine ARM CPU würde hingegen zuerst die Zieladresse aus einer Tabelle lesen, und dann dorthin springen.
Soviel unnütze Konfusion wegen Datenblatt-Fehlern. Echt ärgerlich. Kann natürlich nicht Aufgabe des Entwicklers sein, sich die richtigen Informationen irgendwo zusammensuchen und Widersprüche aufdecken zu müssen. Im Datenblatt eines AVR128DBxx findet sich in der Beschreibung des Interrupt-Controllers der richtige Satz "The interrupt flags are not automatically cleared after the interrupt is executed. The respective INTFLAGS register descriptions provide information on how to clear specific flags." bloß um dann bei der Beschreibung des entsprechenden INTFLAGS das Gegenteil (siehe Eröffnungs-Posting) lesen zu müssen. Also nochmal und speziell für den SPI-Interrupt meinen Stand der Dinge: IF wird beim Eintritt NICHT gelöscht, INTFLAGS muß gelesen und dann aufs SPI_DATA zugegriffen werden (was man ja dort sowieso macht), alternativ zum Lesen von INTFLAGS kann auch eine 1 in die IF-Position geschrieben werden und somit sind neben der Register-Sicherung die Dinge im Interrupt formal erledigt. Ein nicht gelöschtes IF würde den Interrupt in hoher Frequenz neu aufrufen lassen- eine schöne Debugging Aufgabe. Rudolph R. schrieb: > da ich > den SPI nie so langsam benutzt habe das ein Interrupt überhaupt Sinn > gemacht hätte Erstaunlich. Interrupts machen die SPI-Abwicklung doch eher schnell :)
KArl Fred M. schrieb: > Wieso werden die ersten beiden Posts eigentlich negativ bewertet? > Unter welcher geistigen Verirrung leiden hier eigentlich manche? > Ich finde das Thema interessant und da es kein Unsinn ist ist, verstehe > ich diese Bewertungen einiger hier nicht Die Leute bewerten nach hier individuellen Kriterien. Beispielsweise der Härte ihres Stuhlgangs.
Ron T. schrieb: > Rudolph R. schrieb: >> da ich >> den SPI nie so langsam benutzt habe das ein Interrupt überhaupt Sinn >> gemacht hätte > > Erstaunlich. > Interrupts machen die SPI-Abwicklung doch eher schnell :) Nicht notwendigerweise: eine direkte Abfrage der entsprechenden Flags kann schneller sein, da der push/pop-Overhead der ISR entfällt.
Ron T. schrieb: > Soviel unnütze Konfusion wegen Datenblatt-Fehlern. Echt ärgerlich. > Kann natürlich nicht Aufgabe des Entwicklers sein, sich die richtigen > Informationen irgendwo zusammensuchen und Widersprüche aufdecken zu > müssen. Ein Datenblatt ist ein Artefakt wie ein Stück Software, leider ohne Compiler und Testenvironment. Jetzt einfach mal selbst die Frage stellen, wie viele Zeilen Code ihr fehlerfrei ohne Compiler und ohne Tests hinschreiben könnt. Und: wer von Euch hat den Fehler schon bei MicroChip gemeldet?
Stefan ⛄ F. schrieb: > Rolf M. schrieb: >> Der Interrupt-Vektor ist ein Element der Interrupt-Vektor-Tabelle. >> Elemente der Tabelle sind keine Adressen, sondern haben Adressen. > > Das hat er bestimmt mit ARM verwechselt. Eine Tabelle ist ein benanntes Objekt, damit hat es eine Adresse, und damit hat auch jedes Element darin eine Adresse. Egal welchen Inhalt ein Element hat. Da gibt es nichts zu verwechseln.
Wilhelm M. schrieb: > Jetzt einfach mal selbst die Frage stellen, wie viele Zeilen Code ihr > fehlerfrei ohne Compiler und ohne Tests hinschreiben könnt. > Und: wer von Euch hat den Fehler schon bei MicroChip gemeldet? Schön und gut. Doch hier liegt der Fehler im System. Da werden offensichtlich Datenblattpassagen zwischen (in Details) inkompatiblen Controllern hin und her kopiert. Da werden Fehler *über Jahre* nicht korrigiert. Unmöglich, daß ich vor Wochen der Einzige war, der diesen schweren Bug in der Zwischenzeit gemeldet hat.
:
Bearbeitet durch User
Ron T. schrieb: > Da werden offensichtlich Datenblattpassagen zwischen (in Details) > inkompatiblen Controllern hin und her kopiert. In Software genauso. Ron T. schrieb: > Da werden Fehler *über > Jahre* nicht korrigiert. s.o. Ron T. schrieb: > Unmöglich, daß ich der vor Wochen der Einzige > war, der diesen schweren Bug in der Zwischenzeit gemeldet hat. Bei MicroChip gemeldet? Poste mal den Link dazu? Nun, ich denke, alle anderen sind davon ausgegangen, dass die IF immer gleich behandelt werden, also i.a. explizit zurück gesetzt werden müssen (es sei denn, das Lesen eines anderen Registers erledigt das ggf.)
Wilhelm M. schrieb: > In Software genauso. Auch Du verharmlost. Die Betonung lag auf 'inkompatibel'. Das ist keine professionelle Verfahrensweise. Und auf Bug-Meldungen über Jahre nicht zu reagieren sowieso. Wilhelm M. schrieb: > Bei MicroChip gemeldet? Poste mal den Link dazu? Inwieweit der Fall ohne meine persönliche Anmeldung lesbar ist weiß ich nicht. Case-Nummer wäre die 00965546, Subject: "Wrong SPI-Interruptflag Reset Description (all AVR Series 0/1/2)", letzte Reaktion: "We have reported the bug to the corresponding internal team and expecting a reply from them. I will keep you posted once there is an update. Till then, keeping this case in ACR status"
Ron T. schrieb: > Inwieweit der Fall ohne meine persönliche Anmeldung lesbar ist weiß ich > nicht. Case-Nummer wäre die 00965546, Subject: "Wrong SPI-Interruptflag > Reset Description (all AVR Series 0/1/2)", letzte Reaktion: Die case Nummer wird nicht gefunden.
Ron T. schrieb: > Wilhelm M. schrieb: >> In Software genauso. > > Auch Du verharmlost. Das soll keine Verharmlosung sein, denn in Software können Bugs auch sehr kritisch sein, wie Du weißt, und werden auch nicht behoben. > Die Betonung lag auf 'inkompatibel'. Ist mir entgangen, da ich den Thread nicht von Anfang an gelesen habe. > Das ist keine professionelle Verfahrensweise. > Und auf Bug-Meldungen über Jahre nicht zu reagieren sowieso. Dann ist keine Firma auf dieser Welt professionell.
Wilhelm M. schrieb: > Die case Nummer wird nicht gefunden. Du hast sicher Verständnis dafür daß ich dem jetzt nicht auf den Grund gehe. Wenn es so wäre wär das auch kein gutes Zeichen - für Microchip. Wilhelm M. schrieb: > Ist mir entgangen, da ich den Thread nicht von Anfang an gelesen habe. Nö. Das 'inkompatibel' stand im Beitrag zuvor.
:
Bearbeitet durch User
Ron T. schrieb: > Wilhelm M. schrieb: >> Die case Nummer wird nicht gefunden. > > Du hast sicher Verständnis dafür daß ich dem jetzt nicht auf den Grund > gehe. Wenn es so wäre wär das auch kein gutes Zeichen - für Microchip. Da steht: created 28.04.22 ...
Ron T. schrieb: > Wilhelm M. schrieb: >> Ist mir entgangen, da ich den Thread nicht von Anfang an gelesen habe. > > Nö. Das 'inkompatibel' stand im Beitrag zuvor. Textbausteine sind Textbausteine.
:
Bearbeitet durch User
Wilhelm M. schrieb: > Da steht: created 28.04.22 ... Das Datum der letzten Reaktion, ja. Wilhelm M. schrieb: >> Das ist keine professionelle Verfahrensweise. >> Und auf Bug-Meldungen über Jahre nicht zu reagieren sowieso. > > Dann ist keine Firma auf dieser Welt professionell. Das ist in meinen Augen, bei diesen Firmen und in einer solchen simplen Doku-Sache grober Unfug. Wenn Du das so rechtfertigen willst...
:
Bearbeitet durch User
Ron T. schrieb: > Das ist in meinen Augen, bei diesen Firmen und in einer solchen simplem > Doku-Sache grober Unfug. Wenn Du das so rechtfertigen willst... Ich will gar nichts rechtfertigen. Ich sage nur, dass Du keine 100% korrekten Datenblätter erwarten kannst. Ebenso wie fehlerfreie Software. Natürlich ist es ärgerlich, wenn einen das betrifft, genauso wie ein silicon-bug. Und es ist auch blöd, wenn das nicht in ein errata aufgenommen wird. Do sorry, so ist die Welt. Und Dein Anspruch 100%-fehlerfreier Datenblätter ist absolut utopisch.
Wilhelm M. schrieb: > Und Dein Anspruch 100%-fehlerfreier > Datenblätter ist absolut utopisch. Datenblätter trotz Bugmeldungen über Jahre unkorrigiert zu lassen ist eben NICHT utopisch. Das betrifft inzwischen eine Unmenge von Controllern. Würdest Du diesen Sachverhalt mal zur Kenntnis nehmen?
:
Bearbeitet durch User
Ron T. schrieb: > Wilhelm M. schrieb: >> Und Dein Anspruch 100%-fehlerfreier >> Datenblätter ist absolut utopisch. > > Datenblätter trotz Bugmeldungen über Jahre unkorrigiert zu lassen ist > eben NICHT utopisch. > Das betrifft inzwischen eine Unmenge von > Controllern. Würdest Du diesen Sachverhalt mal zur Kenntnis nehmen? Habe ich doch ganz oben schon, und ich habe das doch gar nicht abgestritten. Es ist nur so, dass ggf. Du der einzige bist, der diesen Fehler gemeldet hat. Alle anderen haben das ggf. intuitiv richtig gemacht. Da gerade eine Firma mit Ressourcen haushalten muss, kommt dieser Bug damit in seiner Prio ganz weit nach unten. Außerdem steht er ja noch auf ACR ...
Wilhelm M. schrieb: > Jetzt einfach mal selbst die Frage stellen, wie viele Zeilen Code ihr > fehlerfrei ohne Compiler und ohne Tests hinschreiben könnt. Aus Sicht des TR, der sicherlich oft genug gefragt hat, was sich zwischen den Modulversionen geändert hat, kein Fehler. Der HW-Entwickler des neuen Chips hat's nicht gesagt, also ist die Änderung nicht existent - wenn doch, dann ist es ein Designfehler der Chips, der zweifellos in der nächsten HW-Revision zu beheben ist. (Ironie aus) Als jemand, der auch mal technische Redaktion in Teilzeit gemacht hat: Solche Änderungen, die mehrfach im Dokument nachzuvollziehen sind, sind die Pest. Selten findet man alle betreffenden Passagen im Fließtext. Will nicht heißen, dass bei fleißiger Rückmeldung der Anwender solche Bugs nicht behebbar sind, allerdings ist ein TR selten mit nur einem DB beschäftigt. Bei mir waren es mit halber Stelle etwa 5000 Druckseiten, deren Anspruch auf Konsistenz bei fortlaufender Entwicklung in einigen Passagen schon etwas Schmerzresistenz beim Kunden voraussetzten. Also tröstet Euch, der TR sitzt gerade am DB für den Chip, der nächstes Jahr rauskommt.
Ron T. schrieb: > Rudolph R. schrieb: >> da ich >> den SPI nie so langsam benutzt habe das ein Interrupt überhaupt Sinn >> gemacht hätte > > Erstaunlich. > Interrupts machen die SPI-Abwicklung doch eher schnell :) Nun, bei 16MHz Core-Takt und 8MHz SPI-Takt ist 1 Byte auf dem SPI doch nur für 16 Takte untwerwegs. Laut Datenblatt braucht der 4809 sogar mindestens 6 Zyklen um in die ISR zu kommen, also in die nackte ISR wenn sonst nichts gesichert werden muss. Für die alten AVR galt mal die ISR braucht mindestens 4 Takte rein und 4 Takte raus. So dauert das verschicken von einigen Bytes über den SPI länger als mit Polling, weil die Pausen zwischen den Bytes länger werden und wirklich was machen kann der Core in den paar Takten ohne Interrupt auch nicht. Das bringt also nur was wenn man einen niedrigen SPI Takt hat.
Wilhelm M. schrieb: > Da gerade > eine Firma mit Ressourcen haushalten muss, kommt dieser Bug damit in > seiner Prio ganz weit nach unten. Schön daß Du diese Ausrede "gerade" noch an den Haaren herbeiziehen konntest :) Doch ist auch sie nicht stimmig: Wir reden nicht von "gerade" sondern über einen Zeitraum von mindestens 3 Jahren, seit die Series 0/1/2 das Licht der Welt erblickte. Meine Prognose wäre ja, auch meine Bug-Meldung wird im Nirgendwo verschallen.
Rudolph R. schrieb: > So dauert das verschicken von einigen Bytes über den SPI länger als mit > Polling, Da hast Du Recht. Aber nur für relativ einfach gestrickte Programme. Ein wenig Interrupt-Verarbeitung und Deine Rechnung ist beim Teufel.
Ron T. schrieb: > Rudolph R. schrieb: >> So dauert das verschicken von einigen Bytes über den SPI länger als mit >> Polling, > > Da hast Du Recht. Aber nur für relativ einfach gestrickte Programme. > Ein wenig Interrupt-Verarbeitung und Deine Rechnung ist beim Teufel. Was meinst Du damit? Es wird noch schlimmer? Es ist ja jetzt nicht so, als könnte die Hauptschleife die Daten in den paar Takten verarbeiten, erst recht nicht wenn man noch Flags setzen, löschen und auswerten muss. Ich hatte jetzt nur an den einfachsten Fall gedacht das ein Puffer per SPI verschickt werden soll, selbst das wird mit einem Interrupt schon länger dauern. Und bei hohem SPI Takt kommt die Hauptschleife in der Zeit kaum vorwärts.
Ron T. schrieb: > Wilhelm M. schrieb: >> Da gerade >> eine Firma mit Ressourcen haushalten muss, kommt dieser Bug damit in >> seiner Prio ganz weit nach unten. > > Schön daß Du diese Ausrede "gerade" noch an den Haaren herbeiziehen > konntest :) > > Doch ist auch sie nicht stimmig: Wir reden nicht von "gerade" sondern > über einen Zeitraum von mindestens 3 Jahren, seit die Series 0/1/2 das > Licht der Welt erblickte. > > Meine Prognose wäre ja, auch meine Bug-Meldung wird im Nirgendwo > verschallen. Oh man, hast Du jetzt ein Problem damit, dass Du der letzte bist, der diesen Fehler im DB erkannt hat? Alle anderen haben erkannt, dass die Architektur der internen Peripherie umgestaltet wurde und freuten sich über die reguläre Struktur ...
Wilhelm M. schrieb: > Oh man, hast Du jetzt ein Problem damit, dass Du der letzte bist, der > diesen Fehler im DB erkannt hat? Textverständnis: 6 (durchgefallen)
Ron T. schrieb: > Wilhelm M. schrieb: >> Da gerade >> eine Firma mit Ressourcen haushalten muss, kommt dieser Bug damit in >> seiner Prio ganz weit nach unten. > > Schön daß Du diese Ausrede "gerade" noch an den Haaren herbeiziehen > konntest :) Das ist keine Ausrede, sondern ökunomische Tatsache, wenngleich etwas traurig in Deinem Fall.
Wilhelm M. schrieb: > Das ist keine Ausrede, sondern ökunomische Tatsache, wenngleich etwas > traurig in Deinem Fall. Ich finde es (für einen Entwickler?) traurig, Datenblätter mit Software gleichzusetzen und offensichtliche jahrelange Missstände nicht wahrhaben, ja entschuldigen zu wollen. Arbeitest Du in diesem Laden? Euro schrieb: > Will nicht heißen, dass bei fleißiger Rückmeldung der Anwender solche > Bugs nicht behebbar sind, Bevor auf irgendwelche Bugmeldungen überhaupt reagiert werden muß würde ich erst mal erwarten, daß Datenblätter bei offensichtlicher Hardware-Inkompatibilität nicht in Copy&Paste Manier erstellt werden und mehrere HW-Kundige (!) da mal drüberlesen. Und dann würde ich erwarten, daß auf Bugmeldungen dann tatsächlich und zeitnah reagiert wird- was gibt es hier besseres und schneller hilfreiches als zielgerichtete Hinweise aus der Anwenderschaft. Hier krankt es bei Microchip an allen Fronten- trotz viel Werbe-Blendwerk mit allerhand Qualitäts-Zertifizierungen. Mach Dir mal eins klar: Jeder dieser billigen und nun wirklich vermeidbaren (nur Doku!) Fehler zieht weltweit eine Menge unnützen Ärgers und Entwicklerzeit nach sich. Ich werde die Angelegenheit weiter verfolgen. Mal sehen wieviel Jahre es noch braucht, die dutzenden, an dieser Stelle immer gleich falschen Datenblätter neuerer AVRs zu korrigieren. Rudolph R. schrieb: > Was meinst Du damit? Damit meine ich, daß die Effizienz von Programmen mit Polling-Methoden generell leidet. Wenn es sonst nichts zu tun gibt und Du es Dir eingleisig leisten kannst, im Hauptprogramm auf eine Puffer-Ausgabe zu warten mag das die schnellste Lösung sein.
:
Bearbeitet durch User
Ron T. schrieb: > Hier krankt es bei Microchip an allen Fronten- trotz viel > Werbe-Blendwerk mit allerhand Qualitäts-Zertifizierungen. Du kannst das ändern! https://careers.microchip.com/jobsearch
H. H. schrieb: > Ron T. schrieb: >> Hier krankt es bei Microchip an allen Fronten- trotz viel >> Werbe-Blendwerk mit allerhand Qualitäts-Zertifizierungen. > > Du kannst das ändern! > > https://careers.microchip.com/jobsearch Ja, dieser job: https://careers.microchip.com/job/7328/engineer_verification passt auf das TO-Gezeter -Debug failures, fix testbench/model/checker issues, and manage bug tracking -Must possess excellent verbal and written skills including ability to write clear and concise technical documentation in English. Dazu ist das Ganze in Deutschland. Allerdings sehe ich Defizite im Mannschaftsgeist und Fehlens einener konstruktiven Geisteshaltung - da TO ist da eher von der Iddee getrieben sich durch "Du hast einen fehler gemacht" in den Vordergrund zu spielen und an einer schnellen Problemlösung höchstens am Rand interessiert. Ob es auch an der richtung Ausbildung mangelt (BSEE is required, MSEE/PhD preferred) kann man nicht sagen.
Fpgakuechle K. schrieb: > an einer schnellen Problemlösung höchstens am Rand interessiert Das leitest Du woraus ab? Und wolltest Du nicht eigentlich hier keine weitere Zeit verschwenden? H. H. schrieb: > Du kannst das ändern! > https://careers.microchip.com/jobsearch Analog die gekränkten Experten-Reaktionen etwa bei Kritik in Linux-Threads: "Immer nur meckern, warum arbeitest Du nicht selber am Kernel mit?"
Ron T. schrieb: > Fpgakuechle K. schrieb: >> an einer schnellen Problemlösung höchstens am Rand interessiert > > Das leitest Du woraus ab? > Und wolltest Du nicht eigentlich hier keine weitere Zeit verschwenden? Eben.
Wer keine anständige Doku braucht, kann sich ja mit chinesischen Produkten eindecken.
Viele Leute werden den SPI Interrupt vektor nicht verwenden weil er redundant ist. Die meisten duemmlichen Compuiler pushen alle Register und popen sie nachher wieder. Da bin ich schneller, wenn ich auf's Ready flag warte, vorausgesetzt mal laesst den SPI mit maximaler Geschwindigkeit laufen
Purzel H. schrieb: > Die meisten duemmlichen Compuiler pushen alle Register > und popen sie nachher wieder. Das trifft allerdings auf den GCC seit Jahren nicht mehr zu.
Ron T. schrieb: > Nachdem ich nun dort selbst aktiv und der > Fehler bestätigt wurde (mein Support-Ticket ließ man mir offen) Also die angebliche 'Bestätigung' deiner ominösen Fehlerbestätigung besteht darin das das Support-ticket offen blieb? > bin ich > schon auf die nächsten neuen Datenblatt-Versionen betreffender > Controller gespannt! Die sind schon lange da und das von dir bemoserte Datenblatt ist vor Jahren offiziel gecanceled und ersetzt worden. Und natürlich musste auch prüfen ob das neue Datenblatt auch 'dein' Device abdeckt.
Fpgakuechle K. schrieb: > Also die angebliche 'Bestätigung' deiner ominösen Fehlerbestätigung > besteht darin das das Support-ticket offen blieb? Um genau zu sein, scheint es ja noch auf "ACR" zu stehen (awaiting customer reaction).
Fpgakuechle K. schrieb: > Die sind schon lange da und das von dir bemoserte Datenblatt ist vor > Jahren offiziel gecanceled und ersetzt worden. > Und natürlich musste auch prüfen ob das neue Datenblatt auch 'dein' > Device abdeckt. Ja schon, jedoch hat er insofern Recht, dass der Doku-Bug immer noch drin ist ...
Ron T. schrieb: > Bevor auf irgendwelche Bugmeldungen überhaupt reagiert werden muß würde > ich erst mal erwarten, daß Datenblätter bei offensichtlicher > Hardware-Inkompatibilität nicht in Copy&Paste Manier erstellt werden und > mehrere HW-Kundige (!) da mal drüberlesen. Meine praktische Erfahrung dazu: Je besser Dein Ergebnis als TR, desto flüchtiger schlussendlich die Tester. Auch der personalisierte Testsatz "Hallo ..., bist Du noch wach?" mitten im Fließtext wurde in der Regel nur zu 50% in der Korrekturfahne gefunden und markiert. D.h.: Das von Dir genannte Prozedere ist Usus, aber kein Erfolgsgarant.
Wilhelm M. schrieb: >> Die sind schon lange da und das von dir bemoserte Datenblatt ist vor >> Jahren offiziel gecanceled und ersetzt worden. > Ja schon, jedoch hat er insofern Recht, dass der Doku-Bug immer noch > drin ist ... Nun, das ist vergleichbar mit einer Beschwerde wie "Der Wetterbericht vom 18. Juli 1877 für Pressburg im "Tagesblatt" ist falsch". Eine beendete Doku wird nicht korregiert und wer auf Änderungen in nicht mehr supporteten Dokumenten besteht ist selber Schuld. Und manchmal besteht eine Update eben darin, das der bemoserte Satz stehen bleibt, aber im nachfolgenden Abschnitt oder im sonstigen Kontext "gerade gerückt wird" indem mehr Details genannt werden statt den Kunden raten lassen was (mit "by Hardware") gemeint sein könnte. Hier ".. the IF can be cleared by first reading the SPIn.INTFLAGS register when IF is set and then accessing the SPIn.DATA register" -- > Fpgakuechle K. schrieb: >> Also die angebliche 'Bestätigung' deiner ominösen Fehlerbestätigung >> besteht darin das das Support-ticket offen blieb? >Um genau zu sein, scheint es ja noch auf "ACR" zu stehen (awaiting >customer reaction). Eben, es fehlen wohl entscheidende Informationen zur weiteren Bearbeitung wie konkreter Typ, link auf betroffenen aktuelle Dokumentation und Beschreibung die eine Reproduktion des Fehlers ermöglicht. Und erst nach Reproduktion des Fehlers beim Hersteller kann man von einer Bestätigung reden.
Fpgakuechle K. schrieb: > Wilhelm M. schrieb: >>> Die sind schon lange da und das von dir bemoserte Datenblatt ist vor >>> Jahren offiziel gecanceled und ersetzt worden. > >> Ja schon, jedoch hat er insofern Recht, dass der Doku-Bug immer noch >> drin ist ... > > Nun, das ist vergleichbar mit einer Beschwerde wie "Der Wetterbericht > vom 18. Juli 1877 für Pressburg im "Tagesblatt" ist falsch". > > Eine beendete Doku wird nicht korregiert und wer auf Änderungen in nicht > mehr supporteten Dokumenten besteht ist selber Schuld. Was ich meinte, ist, dass dies in der gesamten, aktuellen Doku nicht drin steht, auch nicht in den Errata.
Fpgakuechle K. schrieb: > Eben, es fehlen wohl entscheidende Informationen zur weiteren > Bearbeitung wie konkreter Typ, link auf betroffenen aktuelle > Dokumentation und Beschreibung die eine Reproduktion des Fehlers > ermöglicht Unglaublich was sich manche Leute hier immer noch aus den Fingern saugen :) Fpgakuechle K. schrieb: > an einer schnellen Problemlösung höchstens am Rand interessiert Eben. Anders sind Deine Beiträge auch nicht zu erklären. Euro schrieb: > Das von Dir genannte Prozedere ist Usus, aber kein Erfolgsgarant. Jedem wirklich HW-Kundigen dürfte der genannte Doku-Fehler sofort auffallen. Ich meine, wir reden hier von den Experten des Herstellers die es am besten wissen müssen. Hinweise dürfte es über die Jahre und bei irgendeinem der Dutzenden neuer AVRs längst gegeben haben. Also herzlich wenig überzeugend dieser Einwand.
:
Bearbeitet durch User
Ron T. schrieb: > Jedem wirklich HW-Kundigen dürfte der genannte Doku-Fehler sofort > auffallen. Wenn er es denn tatsächlich konzentriert und zeitnah liest und nicht derweil schon in ganz andere Arbeit verstrickt ist, das Telefon nicht klingelt, der Anzug nicht in der Reinigung ist und auch kein Erdbeben kommt... (Ja, ist ärgerlich - und nein, ist kein Weltuntergang)
Wilhelm M. schrieb: > Was ich meinte, ist, dass dies in der gesamten, aktuellen Doku nicht > drin steht, auch nicht in den Errata. Vergiss es, auf dem Ohr ist Fpgakuechle taub.
Ron T. schrieb: > Rudolph R. schrieb: >> Was meinst Du damit? > > Damit meine ich, daß die Effizienz von Programmen mit Polling-Methoden > generell leidet. Wenn es sonst nichts zu tun gibt und Du es Dir > eingleisig leisten kannst, im Hauptprogramm auf eine Puffer-Ausgabe zu > warten mag das die schnellste Lösung sein. Das ist allgemein richtig, Polling blockiert. Bei 16MHz Core-Takt, 8MHz SPI-Takt und der Aufgabe 3 Bytes an einen DA-Wandler zu schicken ist die Lösung mit dem Interrupt allerdings eine Null-Nummer.
Wilhelm M. schrieb:
Das stimmt unbezweifelbar.
Aber er pusht bei vielen Projekten immer noch weit mehr, als tatsächlich
nötig wäre.
Das liegt an zwei Sachen:
1) Compiler haben einen sehr eingeschränkten Blickwinkel. Sie haben
keine Ahnung vom Gesamtwerk. Und sind somit quasi dazu verurteilt,
falsch zu optimieren, wenn es mehr als einen Codebaum gibt.
2) Compiler haben keine (zumindest keine einfach benutzbaren und
portablen) Möglichkeiten, ihnen Tips zu geben, wie sie es richtig im
Sinne der Gesamtlösung angehen sollten.
Rudolph schrieb: > Bei 16MHz Core-Takt, 8MHz SPI-Takt und der Aufgabe 3 Bytes an einen > DA-Wandler zu schicken ist die Lösung mit dem Interrupt allerdings eine > Null-Nummer. Richtig. Bei 24MHz Takt und im Slavebetrieb sieht das aber schon ganz anders aus. Und bei den neueren AVR8 ist Slavebetrieb tatsächlich eine realistische Anwendung.
Ron T. schrieb: > Das ist keine professionelle Verfahrensweise. professionel bedeutet GELD verdienen und das tun sie weil sie > Und auf Bug-Meldungen über Jahre nicht zu reagieren sowieso. was ja Geld kostet wenn das einer bearbeitet! Ist doch voll normal, wann immer ich Bugs gemeldet hatte, auch wenn sich im Netz schon lange darüber sinniert wurde! Stets hiess es: "sie sind der Erste der das meldet" Auch wenn das sowas von unglaubwürdig ist!
c-hater schrieb: > Aber er pusht bei vielen Projekten immer noch weit mehr, als tatsächlich > nötig wäre. Naja, ab avr-gcc-8 oder so emittiert der avr-gcc Compiler dort die Pseudo-Instruktionen __gcc_isr 1 zu Beginn der ISR und am Ende __gcc_isr 2, und der avr-as scanned den Code dazwischen auf die benutzten Register, und dann fügt er die push/pop Sequenzen ein. Also, er macht nur das Notwendige in Bezug auf den generierten Code. Dies kann natürlich in der Gesamtschau des Projektes immer noch ungünstig sein, weil es keine globale Allokationsstrategie gibt. Die meisten kritisieren das hier ja sehr vehement, aber ich benutze header-only (Bibliotheken) C++-Code meistens ganz ohne ISR, und das Ergebnis ist damit meistens besser: der Compiler kann alles zusammen optimieren (ähnlich wie bei LTO, aber eben auch für alle Bibliotheken) und der Verzicht auf ISR bedeutet ein Verzicht auf Optimierungsschranken via volatile und eben überflüssige push/pop in (nicht vorhandenen) ISRs.
c-hater schrieb: > Richtig. Bei 24MHz Takt und im Slavebetrieb sieht das aber schon ganz > anders aus. Und bei 32MHz noch anders ;-)
Wilhelm M. schrieb: > Und bei 32MHz noch anders ;-) Nunja. Wenn's schief geht, muss man halt erklären, warum man die vom DB gesetzten Grenzen verlassen hat. Solange es läuft, kräht sicher kein Hahn danach. Ich persönlich habe bisher allerdings tatsächlich auch in recht komplexen Anwendungen der AVR128Dx keine Anzeichen für Fehlfunktionen bei 32MHz Systemtakt feststellen können. Es bleibt trotzdem das Risiko jedes Entwicklers, solch eine Entscheidung zu treffen. Sollte man sich in jedem Fall durch Cheffe absegnen lassen. Wenn man klug ist...
c-hater schrieb: > Wilhelm M. schrieb: > >> Und bei 32MHz noch anders ;-) > > Nunja. Wenn's schief geht, muss man halt erklären, warum man die vom DB > gesetzten Grenzen verlassen hat. Solange es läuft, kräht sicher kein > Hahn danach. Naja, bei den AVR-DA/DB/DD sind es alles nicht-kommerzielle Projekte. Von daher alles gut. Ich glaube, Spence Konde hatte da mal eine ausführliche Testreihe gemacht. https://github.com/SpenceKonde/DxCore/blob/master/megaavr/extras/Ref_Clocks.md > Ich persönlich habe bisher allerdings tatsächlich auch in recht > komplexen Anwendungen der AVR128Dx keine Anzeichen für Fehlfunktionen > bei 32MHz Systemtakt feststellen können. Hatte ich auch noch nie, und bin auch sehr froh über die ausreichende Genauigkeit des internen RC-Oszillators.
:
Bearbeitet durch User
Bei 24MHz Core-Takt würde ich den SPI aber auch auf 12MHz laufen lassen. :-) Richtig schick wäre ja, wenn die DMA könnten.
Stefan ⛄ F. schrieb: > Wilhelm M. schrieb: >> Was ich meinte, ist, dass dies in der gesamten, aktuellen Doku nicht >> drin steht, auch nicht in den Errata. > > Vergiss es, auf dem Ohr ist Fpgakuechle taub. Naja was nicht genannt wird, kann auch nicht verstanden werden ... Also, wenn oben steht, eine Doku, in der lediglich steht, der IRQ-Request würde bei Abarbeitung per Hardware gecleared, falsch ist., dann ist docch eine Fassung v, 21 in der Ergänzt wurde, das , wenn dies nicht zutrifft, das bit per lesezugriff auf das dataregister zurückgesetzt werden kann, eine berichtigte Version, oder? Zumal das konsistent zu der Beschreibung der Änderungen/Erweiterungen im Interruptsystem der Serie-0 ist, in der erklärt wird, was bei einem gesharten IRQ-Vector ersatzweise für eine HW Zurücksetzung möglich ist. http://ww1.microchip.com/downloads/en/appnotes/an1982%20interrupt%20system%20in%20tinyavr%200-%20and%201-series%20and%20megaavr%200-series%2040001982a.pdf S.6. Bedauerlich un-aktuell ist dagegen diesbezüglich das Forums-eigene Wiki, in dem diese und weitere Änderungen (automatische Setzen des IE-bit im SREG) innerhalb der AVR genannten Familie nicht vermerkt sind. https://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts https://snowgoons.ro/posts/2022-02-21-atmega-avr-interrupt-handling/ "On the older AVRs, when you enter an ISR, the chip clears the global interrupt enable flag in SREG. This is what stops interrupts interrupting themselves. Then, when you exit the ISR, the reti instruction sets the interrupt enable flag again. But on the newer “zero series” AVRs does not clear the interrupt enable bit when it enters an interrupt service routine!
Fpgakuechle K. schrieb: > "On the older AVRs, when you enter an ISR, the chip clears the global > interrupt enable flag in SREG. This is what stops interrupts > interrupting themselves. Then, when you exit the ISR, the reti > instruction sets the interrupt enable flag again. Und das ist auch bei den aktuellen Inkarnationen der AVR8 noch ganz GENAU so. Nur Leuten, die den Debugger/Simulator nicht kompetent benutzen können, scheint es anders zu sein. Diese armen Idioten haben einfach die entsprechende Einstellung noch nicht gefunden, die Atmel schwachsinnigerweise mit Rücksicht auf die geistig minderbemittelten C-only-User zum Default gemacht hat, damit die nicht bei ihrem inkompetenten Rumgepröble in main() immer wieder auf die Situation stoßen, plötzlich auf ein Disassembly von Code zu stoßen, der mit dem, was besagte Schnarchnasen aktuell debuggen wollen, so rein garnichts zu schaffen hat...
c-hater schrieb: >> "On the older AVRs, when you enter an ISR, the chip clears the global >> interrupt enable flag in SREG. This is what stops interrupts >> interrupting themselves. Then, when you exit the ISR, the reti >> instruction sets the interrupt enable flag again. > > Und das ist auch bei den aktuellen Inkarnationen der AVR8 noch ganz > GENAU so. Naja, bei einer kurzen Stichprobe in den Dokus war schon eine solche Verhaltensänderung im SREG beschrieben.
Fpgakuechle K. schrieb: > Naja, bei einer kurzen Stichprobe in den Dokus war schon eine solche > Verhaltensänderung im SREG beschrieben. Tatsächlich? Wo?
Joachim B. schrieb: > Ist doch voll normal, wann immer ich Bugs gemeldet hatte, auch wenn sich > im Netz schon lange darüber sinniert wurde! Stets hiess es: "sie sind > der Erste der das meldet" Das Schöne ist jetzt, daß der Erfolg (m)einer Bug-Meldung unmittelbar an den nächsten erscheinenden Datenblättern ablesbar ist. Wenn sie denn überhaupt mal kommen. AVRxDx Datenblätter etwa sind auch schon verdächtig lange im Preliminary Status. Ich bleibe dran. Rudolph R. schrieb: > Das bringt also nur was wenn man einen niedrigen SPI Takt hat. Rudolph R. schrieb: > SPI aber auch auf 12MHz Für ein paar Sensoren und etwas Inter-Controller Kommunikation langen (mir) Frequenzen am unteren Ende der Skala völlig. Bei minimiertem Systemtakt soll das Hauptprogramm pollinglos maximal leisten, die Verlagerung vom SPI in seinen Interrupt ist daher nur folgerichtig für optimales Timing gerade bei interrupt-reichen Systemen, zumal ein Interrupt neuerdings priorisiert werden kann. Es strukturiert und kapselt Programm- Funktionalität auch viel besser. Die hohen SPI-Frequenzen klingen mir hier eher nach Datenmengen, bei denen dem AVR schon ein ARM vorzuziehen wäre :)
Fpgakuechle K. schrieb: > Also, wenn oben steht, eine Doku, in der lediglich steht, der > IRQ-Request würde bei Abarbeitung per Hardware gecleared, falsch ist., > dann ist docch eine Fassung v, 21 in der Ergänzt wurde, das , wenn dies > nicht zutrifft, das bit per lesezugriff auf das dataregister > zurückgesetzt werden kann, eine berichtigte Version, oder? Immer wieder erstaunlich wie Du Falschaussagen im letzten aktuellen Datenblatt zu relativieren versuchst und Fpgakuechle K. schrieb: > http://ww1.microchip.com/downloads/en/appnotes/an1982%20interrupt%20system%20in%20tinyavr%200-%20and%201-series%20and%20megaavr%200-series%2040001982a.pdf > S.6. einem Dokument von 2017 Priorität über viel aktuellere Datenblätter einräumst. Du pickst Dir immer das Richtige heraus und meinst es reicht, wenn es hier und dort doch richtig stünde. Doch Du kannst Dich hier kunstvoll drehen und wenden wie Du willst, Falschaussage bleibt im (letzten) Datenblatt Falschaussage- und die wurde eben bislang (und seit Jahren) auch nirgendwo explizit korrigiert.
Ron T. schrieb: > AVRxDx Datenblätter etwa sind auch schon > verdächtig lange im Preliminary Status. Ich bleibe dran. Ich lese da: "AVR128DA final datasheet". Was die Sache natürlich nicht besser macht. Wie wir ja schon festgestellt haben, steht unter 14.3.2.1 Enabling, Disabling and Resetting das man die IFlags zu Fuß zurücksetzen muss. Wer also nun das DB aufmerksam gelesen hat, stellt also bei SPI fest, das da ein anderer Satz steht als bei allen anderen Flag-Registern. Wer also nur ein klein wenig Gespür für die HW hat, wird sofort wissen, dass das nicht stimmen kann. Ggf. macht man zur Sicherheit einen Test. Fertig. Das wird der Grund sein, dass bei MicroChip der case-Counter nicht übergelaufen ist (ich habe jetzt auch noch einen case eröffnet mit Referenz auf den von Ron T.). Wer also möchte, das MicroChip etwas Motivation verspürt, ein Errata dazu herauszubringen, kann das ja auch machen. Allerdings bezweifle ich aus den oben schon mal dargelegten Gründen, dass das je passieren wird. Und echt jetzt: ich finde das an dieser Steller eine lässliche Sünde ;-)
Stefan ⛄ F. schrieb: > Sebastian schrieb: >> Gibt es irgendwo zentral Community-Errata? > > Warum hat er dafür -2 bekommen? Ich finde den Vorschlag sinnvoll. Bei > Wikipedia funktioniert das immerhin auch. Es müsste nur jemand > moderieren, sinnvollerweise der Hersteller. Schließlich will er seine > Produkte auch verkaufen. > > Oder fürchten die Hersteller, dass dabei zu viele Bugs/Probleme > aufgedeckt werden? Diejenigen, die sich hier echauffieren, könnten diese Liste erweitern: https://github.com/SpenceKonde/DxCore/blob/master/megaavr/extras/Errata.md
Wilhelm M. schrieb: > Ich lese da: "AVR128DA final datasheet". OK und danke fürs Update, wobei ich hier gerade das aktuelle DB-DB im beschriebenen Status offen habe. Die AVR-DB Version steht ja auch im Ruf, eine fehlerkorrigierte Version der DA Hardware zu sein :) Wilhelm M. schrieb: > Allerdings bezweifle ich aus den oben schon mal dargelegten Gründen, > dass das je passieren wird. Das wär doch wirklich lächerlich. Wilhelm M. schrieb: > ich habe jetzt auch noch einen case eröffnet mit Referenz auf den von > Ron T.). Wer also möchte, das MicroChip etwas Motivation verspürt... Das ist lobenswert und zeugt doch von einem Rest Hoffnung. Danke. Grundsätzlich geht es hier und mir ja nicht um Details sondern um mehr Engagement bei der DB-Qualität.
Ron T. schrieb: > Wilhelm M. schrieb: >> Allerdings bezweifle ich aus den oben schon mal dargelegten Gründen, >> dass das je passieren wird. > > Das wär doch wirklich lächerlich. Nein, das ist Business!
c-hater schrieb: > Fpgakuechle K. schrieb: > >> Naja, bei einer kurzen Stichprobe in den Dokus war schon eine solche >> Verhaltensänderung im SREG beschrieben. > > Tatsächlich? Wo? Anbei Beispiel f. serie-0 (4808: 'not cleared') und 'klassisch (328: 'cleared').
c-hater schrieb: > Fpgakuechle K. schrieb: > >> "On the older AVRs, when you enter an ISR, the chip clears the global >> interrupt enable flag in SREG. This is what stops interrupts >> interrupting themselves. Then, when you exit the ISR, the reti >> instruction sets the interrupt enable flag again. > > Und das ist auch bei den aktuellen Inkarnationen der AVR8 noch ganz > GENAU so. Hat jemand verstanden, was c-hater damit sagen will?
PS:
> Anbei Beispiel f. serie-0 (4808: 'not cleared') und 'klassisch (328:
'cleared').
Eben! Und das steht nicht nur im Datenblatt, sondern ist tatsächlich so,
auch bei z.B. einem AVR128DB28.
S. Landolt schrieb: > Und das steht nicht nur im Datenblatt, sondern ist tatsächlich so, auch > bei z.B. einem AVR128DB28. Hatte das jemand bestritten?
Ron T. schrieb: > S. Landolt schrieb: >> Und das steht nicht nur im Datenblatt, sondern ist tatsächlich so, auch >> bei z.B. einem AVR128DB28. > > Hatte das jemand bestritten? Nein. Ich denke, das sollte ein Positivbeispiel sein, wo das DB eben nicht durch copy-n-paste zusammen geklickt worden ist, sondern der Inhalt erfolgreich der neuen DA/DB/DD/EA Serie angepasst wurde.
> Hatte das jemand bestritten?
Es schien mir bei c-hater so, darum hatte ich ja gefragt, ob jemand
dessen Tirade verstanden hätte.
Wilhelm M. schrieb: > Ich denke, das sollte ein Positivbeispiel sein, wo das DB eben nicht > durch copy-n-paste zusammen geklickt worden ist, sondern der Inhalt > erfolgreich der neuen DA/DB/DD/EA Serie angepasst wurde. Das Problem ist eher das zusammengestückelte Wissen beim Anwender, der sich einfach irgendeine Zeile aus den Datenblätter/Dokumentensatz reisst ("weiteres Mitglied der AVR-reihe") und sich alles weitere aus diesem Fetzen ableiten will ('dann ist ja auch das Interrupt-verhalten wie immer') oder ableiten muß, weil bspw. im hiesigen AVR-Tutorial eben nicht auf die signifikanten Unterschiede zw. Series-0 und Vorgänger eingegangen wird. Beim Interrupt-enable sind diese Unterschiede noch relativ kompakt im Datenblatt zu finden, da es eine zentrale Komponente ist. Dagegen verhält sich das hier exemplarisch eröterte IR-bit des SPI-Modules stark abhängig von den Betriebsarten (Buffer/normal, Master/slave, read/write) so das es gleich zwei Register-bit Tabellen für die gleiche Adresse gibt (siehe Anhang, aus tiny-series 0). Es 'gibt' eben dieses IR-bit nicht in allen Betriebsweisen dieses Peripherals, in vielen Modi ist es durch das RXCIF-bit an gleicher Position 'ersetzt'. Nur verhält sich eben das RXCIF-bit anders als das IF-bit. Da verwundert es nicht, das einer vergeblich auf ein Verhalten setzt, was er aus anderen Datenblättern oder aus anderen Modi kennt. Oder ohne genaues nachlesen schlichtweg erwartet "weil es schon immer so war".
Fpgakuechle K. schrieb: > Das Problem ist eher das zusammengestückelte Wissen beim Anwender Na klar. Der Anwender ist schuld an falschen Datenblättern. > Da verwundert es nicht, das einer vergeblich auf ein Verhalten setzt, > was er aus anderen Datenblättern oder aus anderen Modi kennt. Jetz sag mal ehrlich: Hast Du beruflich (un)mittelbar mit Dokumentation zu tun und fühlst Dich hier angegriffen und genötigt zur Rechtfertigung? Was Du offensichtlich nicht kennst ist Entwicklung nach tunlichst richtigem Datenblatt. Wonach auch sonst? Nach zusammengestückelten Infos von irgendwem aus dem Internet? Ist das Deine Arbeitsweise? Wilhelm M. schrieb: > Nein, das ist Business! Nein, das ist nach Jahren einfach nur peinlich, unprofessionell, unzuverlässig, dumm ... Aber wir werden ja weiter sehen. Die allerneueste Mai Datasheet-"Clarification" des AVR-DD https://onlinedocs.microchip.com/pr/GUID-BDAF999A-F5AD-443E-A2A9-F85BC8240551-en-US-2/index.html weiß dessen gleich-falsches Datenblatt jedenfalls immer noch nicht zu berichtigen. Und da war mal mindestens meine Bug-Meldung seit Wochen bekannt. Reden wir hier eigentlich von einer kleinen Halbleiter-Klitsche nebenan oder von einer der größten Chip-Firmen der Welt?
:
Bearbeitet durch User
Ron T. schrieb: > Reden wir hier eigentlich von einer kleinen Halbleiter-Klitsche nebenan > oder von einer der größten Chip-Firmen der Welt? Du erzählst von deinen Träumen.
H. H. schrieb: > Du erzählst von deinen Träumen. Daß Hinz & Kunz meist nichts Qualifiziertes zum Thema beitragen hast Du nun ausreichend nachgewiesen. Insofern alles gut :)
Ron T. schrieb: > Wilhelm M. schrieb: >> Nein, das ist Business! > > Nein, das ist nach Jahren einfach nur peinlich, unprofessionell, > unzuverlässig, dumm ... Peinlich: Du in der Rolle von µChip würdest das als peinlich empfinden. Unprofessionell: Du stufst das als unprofessionell ein. Unzuverlässig: Du erwartest zu 100% fehlerfreie Produkte. Dumm: Du stufst das aus Deiner Sicht als dumm ein. Aus µChip-Sicht: Peinlich: von einer großen Zahl von Nutzern meldet einer ein Fehler; warum soll uns das peinlich sein. Wir haben zugesagt es zu prüfen. Unprofessionell: wir müssen mit unseren Ressourcen haushalten, das ist professionell, das erwarten die Anteilseigner von uns. Problemchen einzelner Nutzer mit den DB stellen wir hinten an. Unzuverlässig: Haben wir zugesagt, unsere Produkte und ihre DB seien fehlerfrei? Nein. Dumm: Es spart Ressourcen, meldet eine einzelne Person, alle anderen wissen Bescheid, die Community kompensiert teilweise, was soll daran dumm sein?
Ron T. schrieb: > H. H. schrieb: >> Du erzählst von deinen Träumen. > > Daß Hinz & Kunz meist nichts Qualifiziertes zum Thema beitragen hast Du > nun ausreichend nachgewiesen. Insofern alles gut :) In Deinem 50ten Post schwenkst Du schon auf dieses unqualifizierte Verhalten um? Das ist sportlich, Du hast Deine Lektion dieses Forums schnell gelernt ;-)
Wilhelm M. schrieb: > Peinlich: von einer großen Zahl von Nutzern meldet einer ein Fehler; > warum soll uns das peinlich sein. Wir haben zugesagt es zu prüfen. Peinlich: Der Fehler besteht mindestens seit 2018 in allen betreffenden Datenblättern und wurde in dieser Zeit sicher ettliche Male gemeldet. Trotzdem sind wir so ignorant. Wilhelm M. schrieb: > Unprofessionell: wir müssen mit unseren Ressourcen haushalten, das ist > professionell, das erwarten die Anteilseigner von uns. Problemchen > einzelner Nutzer mit den DB stellen wir hinten an. Unprofessionell: Als großes Unternehmen haben wir keine Ressourcen ordentliche Datenblätter zu erstellen und behelfen uns mit Copy&Paste Methoden. Wilhelm M. schrieb: > Unzuverlässig: Haben wir zugesagt, unsere Produkte und ihre DB seien > fehlerfrei? Nein. Unzuverlässig: Sind unsere Datenblätter selbst nach Jahren und zielgerichteten Hinweisen. Wilhelm M. schrieb: > Dumm: Es spart Ressourcen, meldet eine einzelne Person, alle anderen > wissen Bescheid, die Community kompensiert teilweise, was soll daran > dumm sein? Dumm: Weil das sicher keine Werbung für unsere Produkte ist. Wilhelm M. schrieb: > In Deinem 50ten Post schwenkst Du schon auf dieses unqualifizierte > Verhalten um? Ich glaube da verwechselst Du was.
Ron T. schrieb: > Wilhelm M. schrieb: >> In Deinem 50ten Post schwenkst Du schon auf dieses unqualifizierte >> Verhalten um? > > Ich glaube da verwechselst Du was. Keineswegs.
Beitrag #7068587 wurde von einem Moderator gelöscht.
Kurzes Update 8 Wochen nach Meldung: Null Reaktion Letzter Status im "Case 00965546": "We have reported the bug to the corresponding internal team and expecting a reply from them"
Beitrag #7100953 wurde von einem Moderator gelöscht.
DerEinzigeBernd schrieb im Beitrag #7100953: > Könnte es sein, daß hier von zwei unterschiedlichen Interrupt-Flags die > Rede ist? Nein Bernd. Es geht um die Interrupt-Flags der Peripherals, hier im speziellen des SPI-Moduls (INTFLAGS Register/Normal Mode).
:
Bearbeitet durch User
DerEinzigeBernd schrieb im Beitrag #7100953:
> Das per Hardware automatisch gelöschte ist das Bit 7 (I-Bit) im SREG ...
Das gilt nur für die 'Klassischen', nicht für die hier Diskutierten,
hier gilt:
"This bit is not cleared by hardware while entering an Interrupt Service
Routine (ISR) or set when the RETI instruction is executed"
Ron T. schrieb: > Letzter Status im "Case 00965546": > "We have reported the bug to the corresponding internal team and > expecting a reply from them" Da sind sie nicht die Einzigen, die das expecten Ist ja nicht deren Zeit, die die Leute beim Suchen von "Spezialeffekten" vertun. :(
Wenn man den Hinweis schon hat sollte es doch ein Leichtes sein, sich das Dutzend Datenblätter zusammenzusuchen, die immergleiche Stelle (und weitere Bugs) zu korrigieren und sie dann wieder online zu stellen. Eine Sache von 20 Minuten. Sollte man meinen. Statt dessen vergehen Jahre in denen Entwickler völlig sinnlos herumdebuggen und sich die Infos auch noch aus mehreren Quellen zusammensuchen sollen ("Datasheet Clarifications"- wie dämlich ist das denn).
:
Bearbeitet durch User
Solche Aspekte spielen sinnvollerweise eine Rolle bei der Wahl der Bauteile. Nicht nur die Funktion ist wichtig, sondern auch eine gute Doku, damit ich sie richtig einsetzen kann. AVR waren früher mal für mich attraktiv. Seit der Übernahme nicht mehr. Ich benutze nur noch die alten Modelle, ansonsten STM32. Deren Doku ist zwar auch nicht gut, aber dort bekommt man mehr für's gleiche Geld.
Mich erinnert das irgendwie an die pikierte Reaktion, eines Fehlers überführt zu werden bzw. an eine elitäre, sich nicht vom Pöbel auf der Straße zu einer Reaktion drängen zu lassen.
Das Unglaubliche ist nach Jahren der Desinformation geschehen. Wenn auch nur bei einem allerersten Vertreter der Series0/1/AVRxDx. Wenn auch erstmal zaghaft nur in der Online-Doku. Ein Fehler im Datenblatt wurde korrigiert (siehe erster Beitrag). https://onlinedocs.microchip.com/pr/GUID-7A426C50-A481-452C-9888-A56EDDDD2EC5-en-US-4/index.html
Wer verwendet denn SPI mit interrupt ? Das macht ja gar keinen Sinn. Bis die interupt Routine alle Register gepusht und gepopt hat, hat man die Bit auch so rausgehaemmert. Naja, so etwa. Oft halten sid die Chip hersteller auch nicht an die spezifikationen, heisst kein SPI passt.
Purzel H. schrieb: > Bis die interupt Routine alle Register gepusht und gepopt hat In C vielleicht. In Assembler sicherst Du nur was wirklich gebraucht wird. > Wer verwendet denn SPI mit interrupt ? Das macht ja gar keinen Sinn Bei wenigen Bytes geb ich Dir Recht. Wird's mehr gibts Ruckler im Hauptprogramm. Die verträgt nicht jedes. Interrupts strukturieren ein Programm, tarieren Belastungen aus, priorisieren Aufgaben.
Ron T. schrieb: > Purzel H. schrieb: >> Bis die interupt Routine alle Register gepusht und gepopt hat > > In C vielleicht. > In Assembler sicherst Du nur was wirklich gebraucht wird. > >> Wer verwendet denn SPI mit interrupt ? Das macht ja gar keinen Sinn > > Bei wenigen Bytes geb ich Dir Recht. > Wird's mehr gibts Ruckler im Hauptprogramm. Die verträgt nicht jedes. > Interrupts strukturieren ein Programm, tarieren Belastungen aus, > priorisieren Aufgaben. Und die Verwendung von Interrupts zusammen mit der notwendigen volatile-Qualifizierung (C/C++) verhindert oft eine geeignete Optimierung durch den Compiler. Manchmal ist das Polling der Statusflags ohne ISR mit weniger Gesamtaufwand verbunden.
Purzel H. schrieb: > Wer verwendet denn SPI mit interrupt ? Das macht ja gar keinen Sinn. Bei 8 MHz SPI and 16 MHz Core Takt macht das keinen Sinn, bei z.B. 250 kHz SPI und 16 MHz Core Takt sieht das schon anders aus. Aber auch dann kommt es auf die Anwendung an was besser passt.
Rudolph R. schrieb: > Bei 8 MHz SPI and 16 MHz Core Takt macht das keinen Sinn Was mich zu der Frage führt bei welcher gewöhnlichen AVR Anwendung dieses SPI Tempo überhaupt Sinn macht?
Ron T. schrieb: > Rudolph R. schrieb: >> Bei 8 MHz SPI and 16 MHz Core Takt macht das keinen Sinn > > Was mich zu der Frage führt bei welcher gewöhnlichen AVR Anwendung > dieses SPI Tempo überhaupt Sinn macht? Jede Anwendung bei der man nicht nur ein paar Bytes über den SPI schickt und auch noch Zeit für was anderes haben möchte. 3D Drucker haben zum Beispiel ein Grafik-Display mit 128x64 Pixeln und die meisten dürften immer noch mit AVR Controllern laufen, so von der Menge her, die ersten CR-10 und Ender-3 zum Beispiel. Da ist das Display eher ein notwendiges Übel und je weniger Zeit dafür drauf geht, desto besser. Ich habe EVE Displays mit 8MHz SPI benutzt, damit dauert ein Display-Update immer noch so 1ms oder länger. In der restlichen Zeit zwischen den Updates kann der Controller dann seine eigentliche Aufgabe machen. Aktuell benutze ich keine AVRs und kann SPI über DMA machen, das macht viel mehr Sinn als Interrupts und man kann auch noch den Takt reduzieren.
> Was mich zu der Frage führt bei welcher gewöhnlichen > AVR Anwendung dieses SPI Tempo überhaupt Sinn macht? Ist jetzt zwar eher speziell, aber: bei größeren Datenmengen, ich kopiere bei 12 MHz mit einem leicht übertakteten ATmega1284 zwischen zwei SDCards.
Reden wir nochmal über den Interrupt-ungünstigsten Maximalfall am Beispiel eines modernen AVRxDx. Rudolph R. schrieb: > Bei 8 MHz SPI and 16 MHz Core Takt macht das wenn ich das richtig sehe gut 1000 ns für ein SPI-Byte / 62 ns für einen Clock = 16 Clocks/SPI-Byte. Rudolph R. schrieb: > Ich habe EVE Displays mit 8MHz SPI benutzt, damit dauert ein > Display-Update immer noch so 1ms oder länger. In der restlichen Zeit > zwischen den Updates kann der Controller dann seine eigentliche Aufgabe > machen. Erwähnte 16 Clocks für ein SPI-Byte langen dann um a- Interruptflag abzufragen b- Interruptflag durch Lesen von SPI INTFLAGS+DATA rückzusetzen c- das nächste Byte zu laden d- das nächste Byte auszugeben e- in der Schleife zurückzuspringen ? Eher nicht. Maximale 8MHz SPI Speed- Ausgabe vieler Daten sind hier also auch ohne Interrupt kaum erreichbar. Die Interrupt-Lösung (spart a ein) kommt durch 6 Clocks Interrupt-Eintritt, 6 Clocks Interrupt-Return, 2 Clocks SREG Sicherung und beispielsweise 4 Clocks MOVW Sicherung von zwei Register-Pärchen = 18 Clocks bürokratischen Mindestaufwands + b/c/d definitiv auf ein paar Clocks mehr. Das hat aber den Vorteil daß die Ausgabe vom Hauptprogramm entkoppelt ist und dieses wenigstens mit einer Instruktion zwischen jedem Interrupt weiterläuft (bei 1000 Ausgabe-Bytes also immerhin 1000 weiteren Instruktionen). Das etwas hinausgezogene Display-Update sollte doch hier eigentlich zu verschmerzen sein. > Aktuell benutze ich keine AVRs und kann SPI über DMA machen verweist schon drauf wie es wirklich sinnvoll ist und warum ein AVR für Grafik-Ausgaben sowieso nicht die Idealbesetzung ist. Das dürfte auch für S. Landolt schrieb: > ich > kopiere bei 12 MHz mit einem leicht übertakteten ATmega1284 zwischen > zwei SDCards. gelten.
> AVR ... nicht die Idealbesetzung
"Idealbesetzung"? Das kommt immer auf die Umstände an - für mich schon,
ich möchte mich für diese eine Anwendung nicht in eine neue
Controllerfamilie einarbeiten, insofern ist es für mich (fast) ideal.
S. Landolt schrieb: > ich möchte mich für diese eine Anwendung nicht in eine neue > Controllerfamilie einarbeiten Legitim ;-)
Ron T. schrieb: > Die Interrupt-Lösung (spart a ein) > kommt durch 6 Clocks Interrupt-Eintritt, 6 Clocks Interrupt-Return Was'n das für'n Unsinn? Interrupt-Entry dauert vier Takte (und nicht sechs), Interrupt-Exit ebenfalls vier (und nicht sechs). Das war bei den klassischen AVR8 so (außer in gewissen Sonderfällen, z.B. 20Bit-PC und/oder externer RAM) und ist bei den AVR128DxWeissDerFuchs immer noch genauso. Denn die haben weder einen 20Bit-PC noch externen RAM. > 2 Clocks SREG Sicherung Zum reinen Daten-Umschaufeln braucht man die MCU-Flags nicht zu behelligen und dementsprechend auch das Flagregister weder sichern noch wiederherstellen. > und beispielsweise 4 Clocks MOVW Sicherung von > zwei Register-Pärchen = 18 Clocks bürokratischen Mindestaufwands + b/c/d > definitiv auf ein paar Clocks mehr. Also in richtigen Sprachen braucht's hier nur zwei Instruktionen: ein ld und ein st. Also schlimmstenfalls vier Takte pro Byte Payload. Bei den AVR128DxWeissDerFuchs (und auch den anderen neueren AVR8) ist es aber weniger, denn die können st in einem Takt. Hinweis: alles o.g. bezieht sich insbesondere speziell auf den Anwendungsfall von S.Landolt, wo sich das besonders gut ausnutzen läßt. Die genannten Timings sind aber durchaus allgemein gültig.
c-hater schrieb: > Was'n das für'n Unsinn? Interrupt-Entry dauert vier Takte (und nicht > sechs), Interrupt-Exit ebenfalls vier (und nicht sechs). Schau nochmal auf welchen Controller ich mich bezogen habe bevor Du hier groß Unsinn schreist. Ansonsten gilt: Umso besser für die Interrupt Lösung. > Zum reinen Daten-Umschaufeln braucht man die MCU-Flags nicht zu > behelligen und dementsprechend auch das Flagregister weder sichern noch > wiederherstellen. Ach wie oberschlau. Die Praxis schaut aber oft anders aus und man hat durchaus ein paar Flag-relevante Dinge zu erledigen ;-). Ansonsten gilt: Umso besser für die Interrupt Lösung. Bin hier nur vom schlechtesten Fall ausgegangen. c-hater schrieb: > Also in richtigen Sprachen braucht's hier nur zwei Instruktionen: ein ld > und ein st. MOVW kopiert 2 Register in 1 Takt. Schon gewusst?
Ron T. schrieb: > Schau nochmal auf welchen Controller ich mich bezogen habe bevor Du hier > groß Unsinn schreist. Du kannst kein Asm, stimmt's? Wäre es anders, wüßtest du, das im Interruptvektor nicht zwingend ein jmp (mit drei Straftakten) liegen muss. Es kann auch ein rjmp (mit nur zwei Straftakten) sein oder sogar gar kein jmp. Es kann nämlich auch direkt der Nutzcode im Vektor liegen... > MOVW kopiert 2 Register in 1 Takt. Schon gewusst? Ja, blöderweise aber nur zwischen zwei MCU-Register-Pärchen. Was aber zum SPI-Umschaufeln gebraucht wird, sind aber Bytes in MMIO-Registern. Dafür gibt's leider nicht mal ein mov (mit Byte-Breite), sondern nur ganz die ganz klassische RISC-Sache mit "ldX MCU-Reg, MMIO-Reg", gefolgt von "stX MMIO-Reg, MCU-Reg". Mein Gott, lerne AVR8-Assembler, bevor du anfängst, mit mir darüber zu diskutieren. Ich programmiere seit fast 20 Jahren AVR8 regelmäßig in Asm. Du hast in näherer Zukunft bei deinem Kenntnisstand keinerlei Chance, da auch nur einigermaßen gut abzuschneiden...
c-hater schrieb: > Es kann nämlich auch direkt der Nutzcode im Vektor > liegen... Klasse. Auf solche Ratschläge kann man sicher gut verzichten. Offensichtlich hast Du immer höchstens einen Interrupt in Deiner Tabelle ;-) Aber selbst dann gilt: Umso besser für die Interrupt-Lösung... > Ja, blöderweise aber nur zwischen zwei MCU-Register-Pärchen. Was aber > zum SPI-Umschaufeln gebraucht wird Mangelt es etwa an Lese-Verständnis? Es ging um Register-Sicherung beim Interrupt-Eintritt. Dafür lassen sich gut und gerne weitere der zahlreich vorhandenen AVR-Register nutzen. Vorzugsweise solche der "minderwertigen" <R16. Auf diesen Trick bist Du in Deiner 20jährigen Asm-Karriere wohl noch nicht gekommen? > Du hast in näherer Zukunft bei deinem Kenntnisstand keinerlei > Chance, da auch nur einigermaßen gut abzuschneiden... Du disqualifizierst Dich hier selbst. Mit Kenntnisstand und Tonfall.
Ron T. schrieb: > Du disqualifizierst Dich hier selbst. > Mit Kenntnisstand und Tonfall. Nee, tatsächlich ist das seine einzige Qualifikation. Von C hat er keine Ahnung, nur seine Inselbegabung AVR-Assembler lässt ihn bei genügend Abstand nicht sofort wie ein Volltrottel aussehen, aber das kompensiert er mit seinen unterirdischen Umgangsformen
Ron T. schrieb: > Offensichtlich hast Du immer höchstens einen Interrupt in Deiner Tabelle Das wäre eher selten, kommt aber schon mal vor. Auf jeden Fall ist es so, dass ich sehr oft den Nutzcode der ISRs direkt in den Vektor legen kann. > Es ging um Register-Sicherung beim Interrupt-Eintritt. Die ist (bei optimierter Programmierung) halt oft einfach nicht nötig. Weder bezüglich der Flags noch bezüglich irgendwelcher MCU-Register. > Dafür lassen sich gut und gerne weitere der zahlreich vorhandenen > AVR-Register nutzen. Vorzugsweise solche der "minderwertigen" <R16. > Auf diesen Trick bist Du in Deiner 20jährigen Asm-Karriere wohl noch > nicht gekommen? LOL. Wenn du auch nur das analysiert hättest, was ich mal hier veröffentlich habe, wäre dir unweigerlich aufgefallen, dass ich diesen "Trick" vor Jahren schon drauf hatte... > Du disqualifizierst Dich hier selbst. Eher nicht. Ganz sicher jedenfalls nicht fachlich. Du darfst erstmal mal irgendwas aus deiner Feder zeigen. Dann können wir weiter diskutieren...
c-hater schrieb: > Auf jeden Fall ist es > so, dass ich sehr oft den Nutzcode der ISRs direkt in den Vektor legen > kann. Das ist ja schön für Dich. Weiter oben wurde die Sinnhaftigkeit des SPI-Interrupts infrage gestellt-das wollte ich nur etwas relativieren und bin dazu von maximal konservativen Annahmen ausgegangen. Dazu gehört selbstverständlich ein JMP von der Interrupttabelle- weil das schlicht in jedem >8KB Flash Fall funktioniert. > Die ist (bei optimierter Programmierung) halt oft einfach nicht nötig. > Weder bezüglich der Flags noch bezüglich irgendwelcher MCU-Register. Dieser Idealfall ist wieder schön für Dich- und doch sind flag-irrelevante Operationen in Interrupts nicht die Regel- zumindest wenn man da noch etwas mehr als dumm umkopieren möchte. > Du darfst erstmal mal > irgendwas aus deiner Feder zeigen. Dem scheint ein fatales Missverständnis des Thread-Themas zugrundezuliegen. Bitte besser wieder auf die Qualität der AVR Datenblätter fokussieren.
:
Bearbeitet durch User
Ron T. schrieb: > Dazu gehört selbstverständlich ein > JMP von der Interrupttabelle- weil das schlicht in jedem >8KB Flash Fall > funktioniert. Auch rjmp funktioniert immer. Es sei denn, man ist zu blöd, den Code der ISR entsprechend zu positionieren. Nur "Hochsprachencompiler" sind zu blöd, das ggf. automatisch zu tun, gelernte Asm-Programmierer niemals. > Dieser Idealfall ist wieder schön für Dich Diesen "Idealfall" kann man i.d.R. ziemlich gezielt herbeiführen. Wenn man halt wirklich in Asm programmiert und nicht nur versucht, die unsäglich schlechten Ergebnisse von "Hochsprachen-Compilern" aufzuhübschen.
c-hater schrieb: > Auch rjmp funktioniert immer. Es sei denn, man ist zu blöd, den Code der > ISR entsprechend zu positionieren. Immer natürlich nicht. Denn das bleibt immer auch eine Frage des Code-Umfangs. Man sollte nicht zwangsweise davon ausgehen daß Asm-Programme immer vergleichsweise kurz ausfallen ;-)
> Code-Umfangs
Bevor es von anderer Seite kommt, in anderem Ton: es geht hier um die
Summe der Interrupt-Routinen, und diese sollten in 4 KiB passen; sonst
müsste das Interruptkonzept hinterfragt werden.
Aber eigentlich ist diese Diskussion hier nur ein
Nebenkriegsschauplatz.
S. Landolt schrieb: > sonst > müsste das Interruptkonzept hinterfragt werden Auf den einen JMP-Takt mehr kommt es doch bei sehr vielen Interrupts gar nicht an. Damit braucht man auf irgendwelche Codelagen (und Umpositionierungen aus unterschiedlichsten Gründen) keine Rücksicht nehmen. Grundsätzlich bevorzuge ich deshalb auch fette CALLs statt RCALLs. Außerdem sehen erforderliche zusätzliche Anweisungen zur Einhaltung der Tab-Positionen in der Interrupttabelle unschön aus. Aber hier streiten wir dann eher über Geschmacksfragen...
> Auf den einen JMP-Takt mehr kommt es doch ... gar > nicht an ... bevorzuge ich fette CALLs ... Mag sein, aber zuletzt rechneten Sie uns einzelne Takte vor - und darauf bezogen sich die Antworten. > ... streiten ... Das nun liegt mir völlig fern, also belassen wir es dabei.
Ein gutes halbes Jahr später gibt es die offizielle "Problemlösung" zu diesem Fall. Ich zitiere: "Der Fehler wurde dem entsprechenden Tool Team gemeldet und wird in Zukunft behoben ... die Fehlerbehebung wird in jeder neuen AVR-Datenblatt Aktualisierung enthalten sein ... wir haben noch keinen festen Zeitplan"
Herzlichen Glückwunsch! Ganz im Ernst. Ansonsten fühlt man sich ja hier wie im Kindergarten...
So schaut die korrigierte Version aus
Beitrag #7261695 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.