feat(esp8266): Add software watch dog panic function

This commit is contained in:
Dong Heng
2018-05-25 20:32:15 +08:00
parent bc65f24c6a
commit ac6393b5b3
3 changed files with 103 additions and 6 deletions

View File

@ -38,9 +38,18 @@ void IRAM_ATTR panicHandler(void *frame)
"A14", "A15", "SAR", "EXCCAUSE"
};
extern int _Pri_3_NMICount;
/* NMI can interrupt exception. */
ETS_INTR_LOCK();
if (_Pri_3_NMICount == -1) {
void show_critical_info(void);
ets_printf("\nWatch dog triggle:\n\n");
show_critical_info();
}
for (x = 0; x < 20; x += 4) {
for (y = 0; y < 4; y++) {
ets_printf("%8s: 0x%08x ", sdesc[x + y], regs[x + y + 1]);

View File

@ -257,13 +257,11 @@ void IRAM_ATTR vPortExitCritical(void)
}
}
void ShowCritical(void)
void show_critical_info(void)
{
printf("ShowCritical:%u\n", uxCriticalNesting);
printf("HdlMacSig:%u\n", HdlMacSig);
printf("SWReq:%u\n", SWReq);
ets_delay_us(50000);
ets_printf("ShowCritical:%u\n", uxCriticalNesting);
ets_printf("HdlMacSig:%u\n", HdlMacSig);
ets_printf("SWReq:%u\n", SWReq);
}
void IRAM_ATTR vPortETSIntrLock(void)

View File

@ -1417,6 +1417,96 @@ nmi_rfi:
#endif
#endif /* NMI */
.section .text, "ax"
.global ShowCritical
.type ShowCritical, @function
.align 4
ShowCritical:
movi a2, LABEL(_Pri_,_NMICount)
l32i a2, a2, 0
bnei a2, 1, nmi_reentry_panic
/*
* a2 == 1, the function is not NMI exception function and its stack
* is stored at LABEL(_Pri_,_Stack) + PRI_N_STACK_SIZE
*
* a2 >= 1, the function is NMI exception function and its stack
* is stored at LABEL(_Pri_,_Stack) + PRI_N_STACK_SIZE + HESF_TOTALSIZE + PRI_N_STACK_SIZE2
*/
movi a2, LABEL(_Pri_,_Stack) + PRI_N_STACK_SIZE
j nmi_common_panic
nmi_reentry_panic:
movi a2, LABEL(_Pri_,_Stack) + PRI_N_STACK_SIZE + HESF_TOTALSIZE + PRI_N_STACK_SIZE2
nmi_common_panic:
movi a1, 0XFFFFFFFF
movi a3, LABEL(_Pri_,_NMICount)
s32i a1, a3, 0
movi a1, _chip_interrupt_tmp
addi a1, a1, -XT_STK_FRMSZ
l32i a3, a2, HESF_AR(0)
s32i a3, a1, XT_STK_A0
l32i a3, a2, HESF_AR(1)
s32i a3, a1, XT_STK_A1
l32i a3, a2, HESF_AR(2)
s32i a3, a1, XT_STK_A2
l32i a3, a2, HESF_AR(3)
s32i a3, a1, XT_STK_A3
l32i a3, a2, HESF_AR(4)
s32i a3, a1, XT_STK_A4
l32i a3, a2, HESF_AR(5)
s32i a3, a1, XT_STK_A5
l32i a3, a2, HESF_AR(6)
s32i a3, a1, XT_STK_A6
l32i a3, a2, HESF_AR(7)
s32i a3, a1, XT_STK_A7
l32i a3, a2, HESF_AR(8)
s32i a3, a1, XT_STK_A8
l32i a3, a2, HESF_AR(9)
s32i a3, a1, XT_STK_A9
l32i a3, a2, HESF_AR(10)
s32i a3, a1, XT_STK_A10
l32i a3, a2, HESF_AR(11)
s32i a3, a1, XT_STK_A11
l32i a3, a2, HESF_AR(12)
s32i a3, a1, XT_STK_A12
l32i a3, a2, HESF_AR(13)
s32i a3, a1, XT_STK_A13
l32i a3, a2, HESF_AR(14)
s32i a3, a1, XT_STK_A14
l32i a3, a2, HESF_AR(15)
s32i a3, a1, XT_STK_A15
l32i a3, a2, HESF_EXCCAUSE
s32i a3, a1, XT_STK_EXCCAUSE
l32i a3, a2, HESF_EPC3
s32i a3, a1, XT_STK_PC
l32i a3, a2, HESF_EPS3
s32i a3, a1, XT_STK_PS
mov a2, a1
call0 panicHandler
.global _xt_ext_panic
.type _xt_ext_panic, @function
.align 4