Hallo zusammen, würde mal gerne wissen, was passiert wenn ein nicht vorhandener Port auf einem µC angesprochen wird. Also nehmen wir an, mein µC hat Port A-C ich spreche aber Port F an und er soll z.B. als AIN wirken. Stört dies in irgendeiner weise mien Programmablauf, sodass dieser nicht mehr das tut was er soll... DANKE schon mal im voraus
Wenn Du die richtigen Headerdateien mit den Registerdefinitionen in das Programm eingebunden hast und nicht mit Zeigern und Absolutadressen auf die I/O-Register zugreifst, dann sagt Dir der Compiler/Assembler schon, dass das nicht geht...
Und wenn du direkt drauf zugreifst, liest und schreibst du halt irgendwo im Speicher. Z.B liegt dein PORTF beim Mega128 auf Adresse $62. Beim Mega8 liegt da der Int0-Vektor der Interrupt-Tabelle. Lesen dürfte da unkritisch sein, schreiben vermutlich nicht. Oliver
normalerweise geht es, wenn du den Chip aufätzt könntest du die ports sogar benutzen gibt sicher irgendwo ein PAD wo du da draufbonden kannst ^^
> Stört dies in irgendeiner weise mien Programmablauf, sodass dieser nicht > mehr das tut was er soll... Das solltest du am besten beantworten können, du hast doch das Programm geschrieben. Was macht dein Programm, wenn es nur Nonsens als Input bekommt? Eigentlich sollte es einen Fehler melden. Wenn es das nicht tut: warum liest du den Wert dann überhaupt ein?
Lothar Miller wrote: >> Stört dies in irgendeiner weise mien Programmablauf, sodass dieser nicht >> mehr das tut was er soll... > Das solltest du am besten beantworten können, du hast doch das > Programm geschrieben. Was macht dein Programm, wenn es nur Nonsens als > Input bekommt? Eigentlich sollte es einen Fehler melden. Wenn es das > nicht tut: warum liest du den Wert dann überhaupt ein? Jaja, Mikrokontroller mit blue screen, das hatten wir doch bereits entsorgt ? Liegt da nicht noch ein olles Windows-CE in der Schrottkiste ? Also meine Mikrokontroller melden meist keine Laufzeitfehler, sie hängen sich einfach nur auf. Gruß, Michael
> Beim Mega8 liegt da der Int0-Vektor der Interrupt-Tabelle.
Der liegt im Flash, um darauf zuzugreifen braucht's andere Befehle
(lpm/spm).
Sofern die Adresse nicht von einem anderen Register belegt wird,
passiert soviel ich weiß gar nichts, aber dadrauf kann man sich nicht
verlassen.
"Reserved I/O memory addresses should never be written." steht im
Datenblatt, d.h. das Verhalten ist nicht spezifiziert. Möglicherweise
gibt es ja auch nicht veröffentlichte "geheime" Register.
Du kannst ja eine kleine Routine schreiben, welche durchprobiert, in welchem speicherbereich Du noch etwas reinschreiben kannst und auch wieder dasselbe ausgelesen werden kann. Es ist dann natürlich nicht garantiert, dass dieser gefundene, normalerweise nicht verwendete Speicher, auch in anderen Serien/Revisionen verfügbar ist.
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.