考虑功能/过程,

void task_fun(void) { while(1) } 如果此过程是在普通PC OS上运行的,那么它将永远运行。但是在手机上,当HW看门狗到期并重置系统时,它肯定会在几分钟内崩溃。在PC上,此过程将安排在其规定的时间切片后,并计划运行一个新的可运行过程。

我的疑问是为什么我们不能在RTO上应用相同的策略?如果将这样的调度策略插入RTO,则涉及什么绩效限制?

还有一个疑问是我检查了 schedule() 我的PC OS(Ubuntu)和手机的功能也可以运行Linux内核。我发现他们两个几乎相同。看门狗手机在哪里完成?我的假设是调度程序是在让过程运行之前启动看门狗的人。有人可以将我指向其完成的代码吗?

有帮助吗?

解决方案

手机“崩溃”是手机设计或特定操作系统的问题,通常不是嵌入OS或RTOSE的问题。它将“挨饿”较低的优先任务(可能包括看门狗服务),这可能是这里正在发生的事情。

在大多数嵌入式rtose中,打算由系统设计器在部署时定义所有过程,并且该设计旨在根据需要安排所有过程。将用户定义或第三方代码放置在此系统上可以像示例一样损害其调度方案。我建议所有此类流程都应与所有其他过程相同的低优先级运行,以便循环调度程序将在不损害系统服务的情况下平均服务用户应用程序。

电话操作系统通常是RTO,但是用户流程不应以更高的优先级运行该系统流程。可能有意的是,此类过程的运行量高于监视狗服务,以保护系统免受您模拟的“行为不当”应用程序。

大多数RTOSE都使用基于优先优先级的调度程序(最高优先级就绪任务运行,直到终止,收益率或被较高的优先任务或中断所抢先)。一些人还安排在相同优先级的任务(任务运行,直到其终止,收益或消耗其时板和其他相同优先级任务的任务)为止。

其他提示

可以通过几种方式实现监管机构,而Linux则没有任何方法:

  • 过程或线程定期运行以测试正在执行重要操作。如果不是,则采取更正措施,例如重新启动机器或重置麻烦的组件。
  • 过程或线程连续运行以吸收额外的CPU时间并重置计时器。如果任务无法运行,则计时器到期并采取纠正措施。
  • 如果硬件组件未定期按摩系统,则将重置该系统;也就是说,硬件计时器已过期。

在RTO或任何其他多任务操作系统上,这里都无法做任何事情。

Linux,在台式计算机或手机上,不是RTO。它的调度策略是按时驱动的。

在RTO上,调度是由事件触发的,从环境到ISR或从软件本身通过系统调用(发送消息,等待Mutex,...)

在正常操作系统中,我们有两种类型的过程。用户流程和内核过程。内核过程有时间约束。但是,用户流程没有时间限制。

在RTO中,所有过程均为内核过程,因此应严格遵循时间限制。所有过程/任务(可以互换使用)是基于优先级,时间限制对于系统正确运行至关重要。

因此,如果您的代码 void task_fun(void){while(1)} 永远运行,其他更高的优先任务将饿死。因此,Watch Dog会崩溃系统,以指定开发人员的时间限制未满足其他任务的时间限制。

例如,GSM调度程序需要每4.6ms运行一次,如果您的任务运行更多的时间,则无法满足GSM调度程序任务的时间约束。因此,该系统必须重新启动,因为其目的被击败。

希望这可以帮助 :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top