在Cortex-M3架构中,FreeRTOS操作系统利用SVC、PendSV和SysTick三个异常来实现任务启动和任务切换。

 1.SVC(系统服务调用)

        SVC异常用于任务启动。在某些操作系统中,应用程序不允许直接访问硬件,而是通过系统服务函数来间接实现。当应用程序需要调用这些系统服务函数时,它会触发SVC异常。这样,操作系统就可以通过SVC异常处理程序来执行相应的服务,从而间接地访问硬件。

2.PendSV(可挂起系统调用): 


        PendSV异常用于完成任务切换。它具有可挂起的特点,即如果当前有优先级更高的中断在运行,PendSV会等待高优先级中断执行完毕后再执行。这种特性确保了任务切换不会打断其他重要的中断服务程序,从而提高了系统的稳定性和响应性。在FreeRTOS中,PendSV异常的优先级被设置为最低,以确保任务切换不会干扰中断服务程序的执行。

3.SysTick


        SysTick是一个硬件定时器,用于产生系统节拍时钟。在FreeRTOS中,SysTick中断用于实现时间片轮转调度。如果多个任务共享同一个优先级,则每次SysTick中断发生时,下一个任务将获得一个时间片。尽管SysTick中断的优先级也被设置为最低,但这并不会影响系统时间的准确性。因为SysTick是硬件定时器,它一直在计时,无论系统是否响应SysTick中断,SysTick的溢出时间间隔都是固定的。因此,即使SysTick中断被延迟响应,也不会导致系统时间出现偏差。

4.总结: 

        FreeRTOS通过巧妙地利用SVC、PendSV和SysTick三个异常,实现了任务启动和任务切换的高效管理。同时,通过将PendSV和SysTick异常的优先级设置为最低,确保了任务切换不会打断中断服务程序的执行,从而提高了系统的稳定性和响应性。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐