Hardfault auslösen

OP #5331903
Lesenswert?
• ▲
▼
Hallo zusammen,
die folgende Funktion gibt auf einem STM32F103RB auf dem angeschlossenen 
LCD die sehr zuverlässig die Zeichenkette "536891393" aus:
1
void triggerHardFault(void)
2
{
3
    int *a = NULL;
4
    int b = *a;
5
    b++; 
6
    printf("b=%i", b);
7
}

Unter Windows dagegen sorgt ihr Aufruf für einen Absturz des Programms.

Kennt jemand einen Trick, wie ich auf dem STM32 reproduzierbar einen 
Hard Fault erzeugen kann? Portabler Code ist natürlich zu bevorzugen.

Viele Grüße
W.T.
(Firma: fritzler-avr.de) #5331928
Lesenswert?
• ▲
▼
Aufm µC darfste NULL eben lesen, aufm PC nicht.

Also muss die MPU in Betrieb genommen werden um dies zu verbieten.
Nur hat der STM32F103 wohl blöderweise keine.

Ansonsten:
Das erste MB wird per MPU gesperrt und per VTOR wird der Anfang der IVT 
von 0x00000000 zum Anfang des Flashes verschoben (=0x08000000) (da liegt 
die ja eh und wird nur nach 0x00000000 remapped).
Schon erzeugt jeder Zugriff aufs erste MB einen Hardfault wenn man nicht 
den memmanage Vector aktiviert.

Also musste wohl selber jedesmal auf NULL prüfen und dann asm("udf"); 
aufrufen.
Das ist eine definierte undefinierte Instruction und führt zum 
Hardfault.
Moderator Persönliche Seite #5331940
Lesenswert?
• ▲
▼
Walter T. schrieb:
> Kennt jemand einen Trick, wie ich auf dem STM32 reproduzierbar einen
> Hard Fault erzeugen kann?

Wenn du auf den Link unter STM32F103 klickst und auf Seite 39 dir
die memory map ansiehst, dann siehst du, dass der Speicherbereich ab
Adresse 0 markiert ist mit: "Aliased to Flash or system memory depending
on BOOT pins".

Du müsstest dir eine Adresse heraussuchen, die dort als "Reserved" oder
"Not used" markiert ist, vielleicht die 0xC0000000.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.