在普通的操作系统中,我们有两种类型的进程。用户流程&内核进程。内核进程有时间限制。但是,用户进程没有时间限制。
在RTOS中,所有进程都是内核进程和进程。因此应严格遵守时间限制。所有过程/任务(可以互换使用)都基于优先级,时间约束对于系统正确运行很重要。
所以,如果你的代码 的 void task_fun(void){while(1)} 强> 永远运行,其他更高优先级的任务将挨饿。因此,看门狗会使系统崩溃,以指定开发人员不满足其他任务的时间限制。
例如,GSM Scheduler需要每4.6ms运行一次,如果您的任务运行时间更长,则无法满足GSM Scheduler任务的时间限制。因此系统必须重新启动,因为它的目的被打败了。
希望这可以帮助 :)
Linux,在台式计算机或移动电话上,不是RTOS。其调度策略是时间驱动的。
在RTOS上,调度由事件触发,无论是从环境到ISR还是从软件本身通过系统调用(发送消息,等待互斥,...)
可以通过多种方式实现监视程序,其中没有一种是由Linux强加的:
这里没有任何东西无法在RTOS或任何其他多任务操作系统上完成。
手机“崩溃”是手机设计或特定操作系统的问题,而不是嵌入式操作系统或RTOS。它会“挨饿”低优先级任务(可能包括看门狗服务),这可能就是这里发生的事情。
在大多数嵌入式RTOS中,系统设计人员在部署时定义所有进程,并且设计是根据需要调度所有进程。在这样的系统上放置用户定义或第三方代码可能会损害其调度方案,如您的示例所示。我建议所有这些进程应该以与所有其他进程相同的低优先级运行,以便循环调度程序能够在不影响系统服务的情况下平等地为用户应用程序提供服务。
电话操作系统通常是RTOS,但用户进程不应以系统处理的更高优先级运行。可能有意的是,此类进程的运行速度高于看门狗服务,以保护系统免受您模拟的“行为不当”应用程序的影响。
大多数RTOS使用基于优先级的优先级调度程序(最高优先级就绪任务运行,直到它终止,产生或被更高优先级的任务或中断抢占)。有些还为相同优先级的任务安排循环(任务运行直到它终止,产生或消耗其时间片,并且具有相同优先级的其他任务已准备好运行)。