Ich weiß, Dereferenzierung eines Null-Zeigers ist undefiniert - aber ich würde gerne wissen, was auf einem bestimmten Ziel - ein MSP430 passiert.Was geschieht beim MSP430, wenn ich einen Null-Zeiger dereferenziere?
Ich habe keine Karte, um diese vor mir zu laden, um dies jetzt zu testen.
Was würde passieren, wenn ich dies (oder ähnlich) machen würde?
int * foo = NULL;
(*foo)++; //Crash?
Position 0x0 ist im SFR-Bereich und reserviert.
Würde es einen PUC/POR generieren? Oder würde es still "arbeiten"? bei der Adresse 0x0
Die Baugruppe erzeugte
;int * foo = NULL;
clr.w R15
;(*foo)++;
inc.w R15
buchstäblich So Standort 0x0 von 1.
Als ich das ich den Wert von 0 auf 1. Ich gehe sehen im Simulator laufen erhöht wird Keine Warnungen im Debug-Protokoll erhalten und das Programm wird normal beendet.
Ich verwende den IAR EW430 Compiler/Assembler/Simulator.
Nur so ist es klar, Sie fragen nach beobachtetem Verhalten von undefiniertem Verhalten; Eine große Bestellung. Diese Frage wäre nicht hier, wenn Sie die tatsächliche * Hardware * in Ihren Mits haben, ist das richtig? Und wäre es nicht auch davon abhängig, ob zum Zeitpunkt der Übertretung ein übergeordneter Unterbrechungshaken installiert wurde, der von dem spezifischen Moment desselben abhängt? (oder haben Sie * vollständige * Kontrolle über alle oben genannten?). – WhozCraig
@WhozCraig das ist richtig. In einer Nussschale frage ich, ob der msp430 heftig heruntergefahren wird, wenn 0x0 gelesen oder geschrieben wird oder es schädlich weiter funktioniert. Ich kann nicht herausfinden, was diese Adresse enthalten würde. Es gibt einen Interrupt, den Sie einrichten können, der ausgelöst wird, wenn auf "freien" Speicher außerhalb des normalen Bereichs zugegriffen wird, von dem aus Sie etwas über das Ereignis protokollieren können, aber ich denke nicht, dass dies eine Option ist. Mehr oder weniger frage ich nach einer großen widerspenstigen Legacy-Code-Basis, die keine Anwei- sungen verwendet oder auf andere Weise Zeigerparameter in Schnittstellen überprüft. – Nick
Adresse 0,1 sind die Interrupt-Freigabebits. Wenn daher die Adresse 0 von Wert 0 auf Wert 1 erhöht wird, wird einer der Interrupts aktiviert. Das Programm wird weiterlaufen. @Nick, hast du das Architekturblatt für den msp430 nicht gelesen? Die Architekturspezifikation finden Sie unter: –
user3629249