C 看门狗在高中断率时触发
我正在开发客户提供的定制/专有RTOS RTOS使用具有优先级抢占的循环调度 情况是-C 看门狗在高中断率时触发,c,embedded,C,Embedded,我正在开发客户提供的定制/专有RTOS RTOS使用具有优先级抢占的循环调度 情况是- 瑞萨H8S控制器的运行频率为20 MHz 我已经为以太网中断配置了中断(一个LAN9221芯片正在中断) 从LAN控制器读取数据的操作系统任务在操作系统中以最高优先级运行 另一个操作系统任务是TCP,它是系统中优先级第二高的任务 一个操作系统任务,它引用了看门狗 我已经生成了网络流量来模拟网络上的轰炸情况。 问题是以太网上的高数据速率(超过500个数据包/秒)将触发ISR看门狗,该看门狗配置为1秒 看门狗配置
因此,问题是看门狗任务没有时间刷新,因为频繁的中断和高优先级任务(以太网数据包读取)的连续调度。尝试给看门狗更高的优先级 乍一看,这似乎是错误的。看门狗不应该获得高优先级,但这只适用于不承受重负载的系统。在重载情况下,调度将使看门狗返回(毕竟是低优先级),这可能导致虚假超时 给看门狗一个高优先级不应该对性能有太大影响(这是一个小任务,运行不太频繁,由中断触发),但要确保它不会饿死 缺点是你不能再捕捉无尽的循环(因为循环现在可以被看门狗打断)
你也应该考虑硬件设计不当或中断映射不良。也许你可以给看门狗IRQ一个比网卡更高的优先级。这将允许看门狗及时处理其中断,而无需为任务赋予更高的优先级
或者,您可以尝试在处理网络数据包时增加计数器。新的高优先级看门狗线程可以监视此计数器,并重新配置低优先级看门狗任务,使其在计数器更改时不触发。尝试为您的看门狗提供更高的优先级 乍一看,这似乎是错误的。看门狗不应该获得高优先级,但这只适用于不承受重负载的系统。在重载情况下,调度将使看门狗返回(毕竟是低优先级),这可能导致虚假超时 给看门狗一个高优先级不应该对性能有太大影响(这是一个小任务,运行不太频繁,由中断触发),但要确保它不会饿死 缺点是你不能再捕捉无尽的循环(因为循环现在可以被看门狗打断)
你也应该考虑硬件设计不当或中断映射不良。也许你可以给看门狗IRQ一个比网卡更高的优先级。这将允许看门狗及时处理其中断,而无需为任务赋予更高的优先级
或者,您可以尝试在处理网络数据包时增加计数器。一个新的高优先级看门狗线程可以监视此计数器,并重新配置低优先级看门狗任务,使其在计数器更改时不触发。这可能不是告诉如何执行的问题,您描述的体系结构应该可以工作。你需要做的是发现为什么看门狗没有得到服务 如果您的RTO没有用于调试和测试的仪器或工具,您可以在看门狗循环中添加I/O切换,并使用作用域对其进行监视-它停止切换的所有时间段都是运行高优先级任务或中断的时间段-如果这种情况持续一秒钟以上,看门狗将触发。然后,您可以将类似的检测添加到其他任务和ISR中,以查看需要花费的时间
您是否可能在高负载下死锁,从而导致系统实际上出现故障?看门狗开火完全有效的情况。如果它确实检测到系统故障,您不想停止它的启动-您想修复系统故障。这可能不是告诉如何操作的问题,您描述的体系结构应该可以工作。你需要做的是发现为什么看门狗没有得到服务 如果您的RTO没有用于调试和测试的仪器或工具,您可以在看门狗循环中添加I/O切换,并使用作用域对其进行监视-它停止切换的所有时间段都是运行高优先级任务或中断的时间段-如果这种情况持续一秒钟以上,看门狗将触发。你可能会