watchdog调试时遇到一个经典语句导致喂狗不生效问题
code:*((volatile unsigned int *)(GPIO_DATA_ADDR)) ^= ~(1U << GPIO_WTD_PIN);
说明:
1、watchdog使用外部够,通过GPO输出方波信号喂狗
2、使用GPO(不是GPIO)时 *((volatile unsigned int *)(GPIO_DATA_ADDR))值恒为0
3、干扰表现:^操作不生效
4、修改为
if(g_uiWtdCnt%2 ==0)
*((volatile unsigned int *)(GPIO_DATA_ADDR)) &= ~(1U << GPIO_WTD_PIN);
else
*((volatile unsigned int *)(GPIO_DATA_ADDR)) |= (1U << GPIO_WTD_PIN);
g_uiWtdCnt++;