工具/软件:Code Composer Studio
大家好、
我尝试在项目中配置看门狗。 我补充了一些示例并阅读了用户指南。 要检查 wotchdog,我从循环中特别注释了过程“Watchdog_clear()”,并将超时配置为15秒。 我在看门狗打开期间检查了参数中给出的所有选项变体、但结果与选项无关。
在测试过程中、我看到了下一个问题:
在第一个超时后的调试期间、程序停止、在相同的超时周期之后、编译器给出了进行复位的错误、但程序不会重新启动并提醒已取消。
2.如果我按下电路板上的 RESET 按钮、程序将从开始启动、但看门狗不再进行任何复位。
3.如果我在没有调试的情况下启动项目,看门狗根本不起作用。
4.我尝试设置选项 WatchDogParams.resetMode = Watch_reset_off 并将断点放置到回调函数中、但程序挂起并且没有进入断点。 当我尝试对断点进行网络化时、同样的问题触觉。 仅当第二次超时后、编译器在重新启动时未给出任何错误时、才会出现问题。
当我尝试将编译器从调试模式切换到实现模式时、也会出现同样的问题。
代码的参数、其中的下一个:
包括:
#include
主函数中的初始化:
Board_initWatchdog();
/*创建看门狗。 *
Watchdog_Params_init (&WatchDogParams);
WatchDogParams.callbackFxn=WatchDogCallBack; //注释此选项不会改变任何内容。
WatchDogParams.resetMode = Watchdog_reset_on; //此选项不会改变任何行为,因为在调试选项中不会接收到程序搜索和红色消息。
WatchDogParams.debugStallMode=Watchdog_DEBUG_STALL_ON; //此选项不起作用,因为看门狗超时的传递速度比程序速度快。
WatchDogParams.custom=0;
WatchDogHandle = Watchdog_open (Board_WATCHDOG0、&WatchDogParams);
如果(!WatchDogHandle)
{
System_printf ("看门狗未打开");
}
//WatchdogHandle、WatchdogHandle、WatchdogToTicks (WatchDogHandle、15000);
WatchdogHandle;
任务中的循环:
void 心跳 Fxn (UArg arg0、UArg arg1)
{
uint_fast16_t uartTxBufferOffset;
uartTxBufferOffset = System_sprintf (uartTxBuffer、"正在启动... \n\n");
UART_WRITE (UartHandle、uartTxBuffer、uartTxBufferOffset);
while (1)
{
//WatchdogHandle;
Task_sleep ((UINT) arg0);
PIN_setOutputValue (ledPinHandle、Board_LED0、!PIN_getOutputValue (Board_LED0));
T1 =时间(空);
LTM = localtime (&T1);
curTime =上升时间(LTM);
System_printf ("time (GMT):%s\n\r\n、curTime);
system_flush();
uartTxBufferOffset = System_sprintf (uartTxBuffer、"Time (GMT):%s\n\r\n、curTime);
UART_WRITE (UartHandle、uartTxBuffer、uartTxBufferOffset);
}
回调函数:
void WatchDogCallBack (UArg a0)
{
//uint_fast16_t uartTxBufferOffset;
//uartTxBufferOffset = System_sprintf (uartTxBuffer、"正在重新启动... \n\n");
//uart_write (UART、uartTxBuffer、uartTxBufferOffset);
WatchdogHandle (WatchDogHandle);
//SysCtrlSystemReset();
return;
}
