Walter T. schrieb:
> Hallo zusammen,
>
> gibt es eigentlich einen Grund, der gegen einen delay in einer ISR
> spricht?
>
>
1 | > void HardFault_Handler(void)
|
2 | > {
|
3 | > // Sicheren Zustand herstellen
|
4 | > GPIOA->MODER = 0;
|
5 | > GPIOB->MODER = 0;
|
6 | > GPIOC->MODER = 0;
|
7 | > GPIOD->MODER = 0;
|
8 | >
|
9 | .
|
10 | > setOutput(ERRORLED_GPIO, ERRORLED_Pin);
|
11 | >
|
12 | > while(1) {
|
13 | > ERRORLED_GPIO->ODR ^= (uint32_t) ERRORLED_Pin;
|
14 | > delay_ms(200);
|
15 | > }
|
16 | > }
|
17 | >
|
>
> Eigentlich müßte doch beim HardFault-Handler der Drops gelutscht sein
> und mich delays nicht mehr interessieren.
>
> Viele Grüße
> W.T.
Das ist keine ISR, sondern ein Fault-Handler. Falls der nur eine
Error-LED blinken lassen soll, warum nicht. Wenn er eine Situation
behandelt, für die es tatsächlich eine softwaretechinsche Lösung gibt,
dann würde man sicher kein delay() wollen. Die würde man dann aber eher
in UsageFault/MemoryManagementFault behandeln, im HardFault ist die
Fehlerursache gar nicht mehr ablesbar.
Hardfault ist so eine Art letztes Zucken, denn der kommt, wenn andere
Fehlersituationen nicht oder nicht ohne neu auftretende Fehler behandelt
werden. Da ist alles erlaubt. Zumal ein Hardfault eine kaum noch zu
unterbietende Prio hat.