这是故事。
它是一个安全关键项目,需要以20KHz运行时间关键的功能程序。现在的设计是将功能程序放入20KHz FIQ中断,同时在FIQ中也有安全中断。这是系统中唯一的两个FIQ。 (当然,MCU中有一对IRQ启用)
我知道在中断ISR中放置任务上下文并不好,这是在OS任务中设置标记和运行的正确方法。但似乎目前的设计伤害没人。
该例程大约需要10us(主时钟300MHz),所以基本上它不会在不可接受的时间内阻止IRQ / FIQ。与使用OS任务运行功能例程相比,它甚至可以节省额外上下文切换的时间。对我而言,目前感觉这种设计违背了大学教科书中的每一项原则,但却找不到拒绝理由的理由。
我怎么能说服自己将功能常规从ISR转移到OS?我应该吗?
答案 0 :(得分:3)
让我们回想一下你的情况:
抱歉有点苛刻,但我不想使用/进入你的安全关键系统。
针对您的实际问题: 你必须确保两件事
所有这一切都假设您的安全状态完全取决于外部硬件监视器。
PS:您的系统用户有哪些危险?烦恼?伤?致死?你是在SIL还是ASIL?
答案 1 :(得分:0)
将复杂代码从ISR移开的原因正是为了避免在ISR中进行冗长的处理,从而避免由此产生的定时抖动和延迟中断服务。
您说明您的处理时间不长,所以在ISR中这样做!否则你只是添加臃肿。
答案 2 :(得分:0)
20Khz =中断之间50us,处理时间为10us,只为此“任务”提供大约20%的CPU时间,并且在CPU中运行的任何其他例程中抖动为10us,它也将总和为10us每个40us的处理时间,任何其他任务将完成,如果你的项目可以,并且你的总CPU处理时间低于70%(这是关键系统可接受的常见最大值),恕我直言它应该没有任何工作问题。