我看不到某些函数名称背后的内容,所以我假设。
while 循环中的feed_watchdog()看起来很危险,我只会在触发事件时调用它。
进一步假设看门狗周期为 1 秒,我将设置一个计数器(例如,值为 5),在定时器中断中递减它,并设置一个 WD 触发标志(并将计数器设置回 5)。
主循环根据标志向看门狗提供信息。安全系数 2 就足够了。
您可能需要仔细阅读 IWDG 规范,了解您应该如何喂养它。如果喂得太早,窗口 WDG 将触发。
这看起来也很危险:
send_uart_message() {
同时(waiting_for_uart);
忙等待?
我曾经处理与任何主要代码分开的异步通信,主要是使用中断。
通过 TxE 传输,在发送最后一个字符之前需要将其禁用(因此在启动传输时启用)。
通过 RxNE 中断接收。相应的处理程序缓冲 Rx 数据,并在接收到消息结束字符(例如“n”)时再次设置标志。
主循环根据所述标志处理 Rx 数据。您可能需要复制 Rx 数据,否则可能会被新字符/消息覆盖。
我看不到某些函数名称背后的内容,所以我假设。
while 循环中的feed_watchdog()看起来很危险,我只会在触发事件时调用它。
进一步假设看门狗周期为 1 秒,我将设置一个计数器(例如,值为 5),在定时器中断中递减它,并设置一个 WD 触发标志(并将计数器设置回 5)。
主循环根据标志向看门狗提供信息。安全系数 2 就足够了。
您可能需要仔细阅读 IWDG 规范,了解您应该如何喂养它。如果喂得太早,窗口 WDG 将触发。
这看起来也很危险:
send_uart_message() {
同时(waiting_for_uart);
忙等待?
我曾经处理与任何主要代码分开的异步通信,主要是使用中断。
通过 TxE 传输,在发送最后一个字符之前需要将其禁用(因此在启动传输时启用)。
通过 RxNE 中断接收。相应的处理程序缓冲 Rx 数据,并在接收到消息结束字符(例如“n”)时再次设置标志。
主循环根据所述标志处理 Rx 数据。您可能需要复制 Rx 数据,否则可能会被新字符/消息覆盖。
举报