我正在开发由我的客户提供的定制/专有 RTOS。
RTOS 使用具有优先级抢占的循环调度。
情景是——
- 瑞萨 H8S 控制器以 20 MHz 运行
- 我已经为以太网中断配置了中断(LAN9221 芯片正在中断)
- 从 LAN 控制器读取数据的 OS 任务在 OS 中以最高优先级运行
- 另一个操作系统任务 TCP,它是系统中优先级第二高的任务
- 一个引用看门狗的操作系统任务
我已经生成了网络流量来模拟网络上的轰炸情况。问题是以太网 ISR 看门狗的高数据速率(超过 500 个数据包/秒)被触发,配置为 1 秒。
看门狗配置为由操作系统的较低优先级任务提供服务,以检测操作系统功能中的任何问题。
我怀疑 ISR 和更高优先级任务的频率不会让看门狗任务被安排。为了证实我的怀疑,我已经为 ISR 本身的看门狗提供了服务,发现它的工作速度为 2000 个数据包/秒。
您能否建议如何处理这种情况,以便即使在更高的数据/中断率下看门狗也不会触发。
看门狗在以正常操作系统优先级运行的操作系统任务中刷新,这有助于捕获无限循环。
操作系统优先级最高的任务是以太网数据包读取任务。当以太网接收数据包时会引发一个硬件中断,并且在 ISR 中我们安排等待以太网数据包读取任务。
同样在我的系统中,操作系统没有使用定时器中断运行(就像其他操作系统运行一样)。操作系统是循环的并自动放弃控制。因此,不可能将看门狗任务的优先级提高到高于正常水平,否则操作系统将始终发现它处于更高的优先级并准备就绪(看门狗在无限循环中刷新,不等待任何事件),其他任务将没有时间执行。只有等待某个事件的任务才能具有高优先级。
所以问题是看门狗任务没有时间刷新,因为频繁的中断和高优先级任务的连续调度(以太网数据包读取)。