Ja du det undrade jag också när jag började titta på koden, det är ju två år sedan jag skrev den...
Det som händer är att ett antal register från stacken och några systemregister som kan vara användbara skrivs ut till debuguarten. Detta som ett komplement till debuggern.
Jag vet inte riktigt varför jag krånglade till det så men det verkade väl vettigt då. Idag skulle jag nog förenkla lite, tex ta bort de globala variablerna StackR0..StackPSR. Se nedan för saknad information.
I headerfilen för projektet:
Kod: Markera allt
extern volatile uint32_t StackR0, StackR1, StackR2, StackR3, StackR12, StackLR, StackPC, StackPSR;
I filen med globala variabler:
Kod: Markera allt
volatile uint32_t StackR0, StackR1, StackR2, StackR3, StackR12, StackLR, StackPC, StackPSR;
I filen med interrupthanterarna:
Kod: Markera allt
#define ENVIRONMENTSZ 16
static const char *envlabel[ENVIRONMENTSZ] = {
"\r\nHard fault handler",
"\r\nR0 0x",
"\r\nR1 0x",
"\r\nR2 0x",
"\r\nR3 0x",
"\r\nR12 0x",
"\r\nLR 0x",
"\r\nPC 0x",
"\r\nPSR 0x",
"\r\nMMAR 0x",
"\r\nBFAR 0x",
"\r\nCFSR 0x",
"\r\nHFSR 0x",
"\r\nDFSR 0x",
"\r\nAFSR 0x",
"\r\n******************\r\n"};
volatile uint32_t *envvalue[ENVIRONMENTSZ] = {
NULL,
&StackR0,
&StackR1,
&StackR2,
&StackR3,
&StackR12,
&StackLR,
&StackPC,
&StackPSR,
((volatile uint32_t *) 0xe000ed34),
((volatile uint32_t *) 0xe000ed38),
((volatile uint32_t *) 0xe000ed28),
((volatile uint32_t *) 0xe000ed2c),
((volatile uint32_t *) 0xe000ed30),
((volatile uint32_t *) 0xe000ed3c),
NULL};