Thread 中讨论的其他器件:C2000WARE
工具与软件:
您好!
我不熟悉嵌入式编程、但我正在尝试跟踪重置的原因。
请您对此提供帮助。
当一个软复位发生并且应用程序重新启动时、复位原因由 API 调用`SysCtlResetCauseGet ()`报告为多个事件、返回24。
该值24是`SYSCTL_CAUSE_SW`和`SYSCTL_CAUSE_WDOG`的组合。
在冷启动条件下、我接收到`SYSCTL_CAUSE_WDOG`。
在这两种情况下、`SYSCTL_CAUSE_WDOG`始终存在。
我尚未在代码中实现看门狗。 但我仍然获得 SYSCTL_CAUSE_WDOG。
了解复位原因的正确方法是什么。
这是 API 所说的。
//
//下面的值可以传递到 SysCtlResetCauseClear ()
// API 或由 SysCtlResetCauseGet () API 返回。
//
#define SYSCTL_CAUSE_SW 0x00000010 //软件复位
#define SYSCTL_CAUSE_WDOG 0x00000008 //看门狗复位
#define SYSCTL_CAUSE_POR 0x00000002 //上电复位
这是我的函数
空 GetResetCAse (空)
{
//检索当前复位原因
uint32_t resetCauses = SysCtlResetCauseGet ();
IF (resetCauses > 0)
{
//计算活动原因的数量(设置位)
Int activeCauses = 0;
IF (resetCauses 和 SYSCTL_CAUSE_EXT)
{
printf ("检测到外部重置\n");
activeCauses++;
}
IF (resetCause 和 SYSCTL_CAUSE_WDOG)
{
printf ("检测到看门狗重置\n");
activeCauses++;
}
IF (resetCause 和 SYSCTL_CAUSE_SW)
{
printf ("检测到软件重置\n");
activeCauses++;
}
IF (resetCause 和 SYSCTL_CAUSE_POR)
{
printf ("检测到开机重置\n");
activeCauses++;
}
//确定多个原因是否处于活动状态
如果(ACTIVEQUES > 1)
{
printf ("检测到未知或多个重置原因\n");
}
printf ("重置导致%d\n"、resetCauses);
//处理后清除复位原因寄存器
SysCtlResetCauseClear (resetCause);
}
}
谢谢!
Satish