Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 看门狗在高中断率时触发_C_Embedded - Fatal编程技术网

C 看门狗在高中断率时触发

C 看门狗在高中断率时触发,c,embedded,C,Embedded,我正在开发客户提供的定制/专有RTOS RTOS使用具有优先级抢占的循环调度 情况是- 瑞萨H8S控制器的运行频率为20 MHz 我已经为以太网中断配置了中断(一个LAN9221芯片正在中断) 从LAN控制器读取数据的操作系统任务在操作系统中以最高优先级运行 另一个操作系统任务是TCP,它是系统中优先级第二高的任务 一个操作系统任务,它引用了看门狗 我已经生成了网络流量来模拟网络上的轰炸情况。 问题是以太网上的高数据速率(超过500个数据包/秒)将触发ISR看门狗,该看门狗配置为1秒 看门狗配置

我正在开发客户提供的定制/专有RTOS

RTOS使用具有优先级抢占的循环调度

情况是-

  • 瑞萨H8S控制器的运行频率为20 MHz
  • 我已经为以太网中断配置了中断(一个LAN9221芯片正在中断)
  • 从LAN控制器读取数据的操作系统任务在操作系统中以最高优先级运行
  • 另一个操作系统任务是TCP,它是系统中优先级第二高的任务
  • 一个操作系统任务,它引用了看门狗
  • 我已经生成了网络流量来模拟网络上的轰炸情况。 问题是以太网上的高数据速率(超过500个数据包/秒)将触发ISR看门狗,该看门狗配置为1秒

    看门狗配置为由操作系统的低优先级任务提供服务,以检测操作系统功能中的任何问题

    我怀疑ISR和更高优先级任务的频率不允许安排看门狗任务。为了证实我的怀疑,我在ISR中为看门狗提供了服务,发现它可以工作到每秒2000包

    您能否建议如何处理这种情况,使看门狗即使在数据/中断率较高的情况下也不会开火

    Watchdog在以正常操作系统优先级运行的操作系统任务中刷新,这有助于捕获无休止的循环

    操作系统优先级最高的任务是以太网数据包读取任务。 当以太网接收到数据包时,有一个硬件中断被触发,在ISR中,我们计划等待以太网数据包读取任务

    另外,在我的系统中,操作系统没有使用定时器中断运行(就像其他操作系统运行一样)。 操作系统是循环的,并自动放弃控制。因此,将看门狗任务优先级提高到正常优先级以上是不可能的,否则操作系统将始终发现它处于更高的优先级并处于就绪状态(看门狗在无限循环中刷新,无需等待任何事件),而其他任务将没有时间执行。 只有等待某些事件的任务才能具有高优先级


    因此,问题是看门狗任务没有时间刷新,因为频繁的中断和高优先级任务(以太网数据包读取)的连续调度。

    尝试给看门狗更高的优先级

    乍一看,这似乎是错误的。看门狗不应该获得高优先级,但这只适用于不承受重负载的系统。在重载情况下,调度将使看门狗返回(毕竟是低优先级),这可能导致虚假超时

    给看门狗一个高优先级不应该对性能有太大影响(这是一个小任务,运行不太频繁,由中断触发),但要确保它不会饿死

    缺点是你不能再捕捉无尽的循环(因为循环现在可以被看门狗打断)

    你也应该考虑硬件设计不当或中断映射不良。也许你可以给看门狗IRQ一个比网卡更高的优先级。这将允许看门狗及时处理其中断,而无需为任务赋予更高的优先级


    或者,您可以尝试在处理网络数据包时增加计数器。新的高优先级看门狗线程可以监视此计数器,并重新配置低优先级看门狗任务,使其在计数器更改时不触发。

    尝试为您的看门狗提供更高的优先级

    乍一看,这似乎是错误的。看门狗不应该获得高优先级,但这只适用于不承受重负载的系统。在重载情况下,调度将使看门狗返回(毕竟是低优先级),这可能导致虚假超时

    给看门狗一个高优先级不应该对性能有太大影响(这是一个小任务,运行不太频繁,由中断触发),但要确保它不会饿死

    缺点是你不能再捕捉无尽的循环(因为循环现在可以被看门狗打断)

    你也应该考虑硬件设计不当或中断映射不良。也许你可以给看门狗IRQ一个比网卡更高的优先级。这将允许看门狗及时处理其中断,而无需为任务赋予更高的优先级


    或者,您可以尝试在处理网络数据包时增加计数器。一个新的高优先级看门狗线程可以监视此计数器,并重新配置低优先级看门狗任务,使其在计数器更改时不触发。

    这可能不是告诉如何执行的问题,您描述的体系结构应该可以工作。你需要做的是发现为什么看门狗没有得到服务

    如果您的RTO没有用于调试和测试的仪器或工具,您可以在看门狗循环中添加I/O切换,并使用作用域对其进行监视-它停止切换的所有时间段都是运行高优先级任务或中断的时间段-如果这种情况持续一秒钟以上,看门狗将触发。然后,您可以将类似的检测添加到其他任务和ISR中,以查看需要花费的时间


    您是否可能在高负载下死锁,从而导致系统实际上出现故障?看门狗开火完全有效的情况。如果它确实检测到系统故障,您不想停止它的启动-您想修复系统故障。

    这可能不是告诉如何操作的问题,您描述的体系结构应该可以工作。你需要做的是发现为什么看门狗没有得到服务

    如果您的RTO没有用于调试和测试的仪器或工具,您可以在看门狗循环中添加I/O切换,并使用作用域对其进行监视-它停止切换的所有时间段都是运行高优先级任务或中断的时间段-如果这种情况持续一秒钟以上,看门狗将触发。你可能会