cancel
Showing results for 
Search instead for 
Did you mean: 

watchdog handler

Posted on July 03, 2015 at 11:35

Hello,

I'm trying to develop a watchdog handler to catch, as for exceptions, the last code executed before watchdog. To do that I tried to copy the handler I did for faults and that I found on web.

  asm(   ''TST LR, #4 \n''

      ''ITE EQ \n''

      ''MRSEQ R0, MSP \n''

      ''MRSNE R0, PSP \n''

      ''B HalWdt_Save_Reg_c \n''

  );

My application runs partially under OS, uC-os III, with some Irqs under OS, and partially under direct Irq, out of OS. The problem I'm experiencing is that the first check done to decide if I have to use the PSP or the MSP it's not working correctly. I checked the OS and the CONTROL[1] is set to 1 so normally under irq it should use the MSP while in thread mode it should use the PSP, as far as I understood.

I debug a little bit and when I go in the watchdog irq it correctly does the check at the beginning and it chooses the PSP based on LR but the correct data are on MSP.

I don't know if I'm missing something or if the check should be done in a different way.

My toolchain is IAR.

thanks

michele

1 REPLY 1
Posted on July 04, 2015 at 07:50

hello,

I solved the issue. The solution is working, the problem is that in case of an infine loop there can be still a more prior ira that enter during the loop execution so the data collected are not always true.

regards

michele