4

这是故事。

它是一个安全关键项目,需要以 20KHz 运行时间关键功能例程。现在的设计是将功能程序放在一个20KHz的FIQ中断中,同时安全中断也放在FIQ中。那是系统中仅有的两个 FIQ。(当然MCU中启用了几个IRQ)

我知道将任务上下文放在中断 ISR 中是不好的,这是设置标记并在 OS 任务中运行的正确方法。但似乎当前的设计不会伤害任何人。

该例程大约需要 10us(主时钟 300MHz),所以基本上它不会阻塞 IRQ/FIQ 到不可接受的时间。与使用 OS 任务运行功能例程相比,它甚至可以节省额外的上下文切换时间。对我来说,目前感觉这个设计违背了大学教科书上写的每一条原则,却找不到拒绝的理由。

我如何说服自己将功能例程从 ISR 转移到 OS?我是不是该?

4

3 回答 3

3

让我们回忆一下你的情况:

  1. 您正在编写一个安全关键系统
  2. 没有指定软件架构,否则你不会问手头的问题
  3. 系统要求未正确处理,否则 2) 不会有问题
  4. 有人告诉您“在安全关键系统中尽可能使用最小中断”
  5. 您想将最高优先级和不可中断的代码用于“只是一些数学工作”

抱歉有点苛刻,但我不想在您的安全关键系统中使用/使用。

对于您的实际问题:您必须确保两件事

  • FIQ 中的代码必须是确定性的并且经过 WCET 测试
  • 定时器的寄存器必须受到保护和监督。为什么?较低安全级别代码对定时器寄存器的不希望/错误操作可能会使 CPU 如此拥塞,以至于实际上只处理中断。

所有这一切都假设您的安全状态完全取决于外部硬件看门狗。

PS:对您的系统用户有哪些危害?烦恼?受伤?致命?您处于 SIL 或 ASIL 环境中吗?

于 2017-11-11T21:33:31.230 回答
1

将复杂代码从 ISR 移开的原因正是为了避免在 ISR 中进行冗长的处理,从而避免由此产生的时序抖动和延迟中断服务。

你说你的处理时间不长,所以在 ISR 中这样做!否则你只是在增加膨胀。

于 2017-11-10T06:53:15.647 回答
1

中断之间的 20Khz = 50us,10us 的处理时间它为您提供了大约 20% 的 CPU 时间,仅用于这个“任务”,并且在您的 CPU 中运行的任何其他例程中的 10us 抖动,它也将总计 10us 的处理时间对于任何其他任务将消耗的每 40us,如果您的项目可以,并且您将总 CPU 处理时间保持在 70% 以下(这是关键系统可接受的常见最大值),恕我直言,它应该可以正常工作。

于 2017-11-10T09:25:20.193 回答