123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #if !defined (__SEMIHOST_HARDFAULT_DISABLE)
- __attribute__((naked))
- void HardFault_Handler(void){
- __asm( ".syntax unified\n"
-
- "MOVS R0, #4 \n"
- "MOV R1, LR \n"
- "TST R0, R1 \n"
- "BEQ _MSP \n"
- "MRS R0, PSP \n"
- "B _process \n"
- "_MSP: \n"
- "MRS R0, MSP \n"
-
- "_process: \n"
- "LDR R1,[R0,#24] \n"
- "LDRH R2,[r1] \n"
-
- "LDR R3,=0xBEAB \n"
- "CMP R2,R3 \n"
- "BEQ _semihost_return \n"
-
- "B . \n"
-
-
- "_semihost_return: \n"
- "ADDS R1,#2 \n"
- "STR R1,[R0,#24] \n"
-
-
-
-
- "MOVS R1,#32 \n"
- "STR R1,[ R0,#0 ] \n"
-
- "BX LR \n"
- ".syntax divided\n") ;
- }
- #endif
|