码迷,mamicode.com
首页 > 其他好文 > 详细

FreeRTOS Posix原理

时间:2020-06-22 01:02:14      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:color   ack   框架   sign   err   init   port   initial   不同   

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原理

标签:color   ack   框架   sign   err   init   port   initial   不同   

原文地址:https://www.cnblogs.com/TheImportanceOfLiving/p/13174818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!