FreeRTOS Posix原理

Posted theimportanceofliving

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeRTOS Posix原理相关的知识,希望对你有一定的参考价值。

FreeRTOS Posix原理

1. FreeRTOS源码原理

FreeRTOS可以创建不同优先级的taskRTOS负责管理这些任务。同时提供了队列、信号等功能,这些功能能够使task再不满足条件时挂起,当运行条件满足时触发运行。

RTOS依据不同的优先级,创建不同任务链表,相同优先级的任务挂在同一链表中。RTOS要求每当中断退出、主动调度yield或者任务创建删除时,进行任务切换。任务切换时,RTOS提供选择需要运行任务vTaskSwitchContext(),由port.c实现任务切换。

void vPortYield( void )

{

    xTaskToSuspend = prvGetThreadHandle(             
    xTaskGetCurrentTaskHandle() );

    vTaskSwitchContext();

    xTaskToResume = prvGetThreadHandle( 
    xTaskGetCurrentTaskHandle() );

 

    prvResumeThread( xTaskToResume );

    prvSuspendThread( xTaskToSuspend );
 
}    

由上面框架可知,任务的优先级调度是有RTOS实现,port.C只要保证依据RTOS返回需要运行程序正常运行,挂起需要暂停的程序即可。

 

2. FreePort posix原理

每个任务对应一个线程,参考pxPortInitialiseStack()创建线程过程。

任务和线程进行绑定,参考vPortAddTaskHandle()。

每个线程依赖线程信号量进行挂起和暂停操作,参考prvSuspendSignalHandler()和prvResumeSignalHandler()。

系统tick中断创建,参考prvSetupTimerInterrupt()。

每个tick中断,中断退出,yield函数,都会进行任务切换。参考vPortYield()。

这样,就由FreeRTOS管理不同线程的切换了。

以上是关于FreeRTOS Posix原理的主要内容,如果未能解决你的问题,请参考以下文章

FreeRtos学习笔记(10)任务切换原理刨析

基于STM32FreeRTOS低功耗设计思路和原理

FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

技术分享:FreeRTOS实时内核使用指南

FreeRTOS功能和特点都有哪些