您好!
我们有一些与安全装置机制相关的 unclarity:
在我们的系统中、有一个引导加载程序、用于启动应用程序。 无论是在引导加载程序还是在应用程序中、我们都会启动看门狗机制。
在引导加载程序中、我们运行以下代码以启动引导加载程序:
watchdog_init();
Watchdog_Params_(参数(&P);
params.callbackFxn =(Watchdog_Callback)观察回调;(回调运行 SysCtrlSystemReset())
params.debugStallMode = Watchdog_debug_staller_on;
params.resetMode = Watchdog_reset_on;
WatchdogHandle = Watchdog_open (0、params);
当引导加载程序完成运行后、在跳转到应用程序之前、我们运行以下代码以停止引导加载程序:
if (watchdogHandle)
{
WATCHDOG_CLOSE (watchdogHandle);
}
之后、我们会在应用程序本身中启动看门狗:
watchdog_init();
Watchdog_Params_(&WP);
wp.callbackFxn = watchdogDriverCallback;
wp.debugStallMode = Watchdog_debug_staller_off;
wp.resetMode = Watchdog_reset_on;
G_WatchdogHandler = Watchdog_open (0、&WP);
在调试过程中、我们在应用程序中禁用了看门狗的启动、并尝试了一些场景。 因此、我们看到了以下行为:
- 在应用代码中放置了"while (1)"循环。 在本例中、我们看到器件确实会重新启动、并且会根据引导加载程序看门狗的时序确切地重新启动。
- 只需正常运行应用程序即可。 在本例中、我们看到设备定期重新启动、重新启动的时间没有确切的一致性。
对于此类行为、我们可以找到的唯一解释是:
WATCHDOG_CLOSE 并不是真正关闭看门狗、而是继续运行。 在应用程序中、我们初始化新的看门狗、取代在引导加载程序中启动的看门狗。
因此、如果应用程序未启动其看门狗、引导加载程序的看门狗会继续在后台运行。
您能澄清一下这个问题吗?