"); //-->
RTT线程管理
RRT是将一个大任务分解成多个小任务,线程是实现任务的载体,是RTT的最基本调度单位,描述了一个任务执行的运行环境和优先等级线程在运行时会认为自己是以独占CPU的方式运行。
功能特点:
主要功能:对线程进行管理和调度将所有线程分为系统线程和用户线程
系统线程:由RTT内核创建的线程
用户线程:由应用程序创建的线程
线程从内核对象容器中分配线程对象,当线程被删除时也会被从对象容器中删除
RTT线程调度器为抢占式:从就绪线程列表中查找最高优先级线程,保证它能够被运行,最高优先级任务一旦就绪,总能得到CPU的使用权;当一个运行着的线程使一个比它优先级高的线程满足运行条件,当前线程的CPU使用权就会被让出给更高优先级的线程;当中断服务程序让一个高优先级的线程满足运行条件,中断完成时,被中断的线程挂起,优先级高的线程开始运行
调度器切换线程的步骤:
1、保存当前线程上下文/挂起被中断线程
2、切换到高优先级线程
3、等待高优先级线程运行完毕
4、切换回之前的线程
5、恢复当前线程上下文
线程的基本操作:创建/初始化线程、启动线程、运行线程、删除/脱离线程。对于动态线程使用rt_thread_create()创建,动态线程会自动从动态内存堆上分配栈空间与线程句柄(隐含条件:初始化heap后才能使用create创建动态线程);使用rt_thread_init()初始化静态线程,由用户为其分配栈空间和线程句柄。
注意分配出的栈空间是按照rtconfig.h中配置的RT_ALIGN_SIZE方式对齐。
线程创建成功返回线程句柄,失败则返回RT_NULL。
使用rt_thread_delete()删除线程。
这个函数仅在使能了系统动态堆时才有效(即已经定义RT_USING_HEAP)。
用此函数删除线程接口仅仅释放掉了部分控制资源,让线程变为关闭态,不让它再使用CPU,真正释放线程控制块和释放线程栈要到下次执行空闲线程时,由空闲线程执行最后的线程删除任务。
也就是说rt_thread_delete()负责把线程弄死,但尸体还堆在内存里,空闲线程会完成收尸工作。
RT-Thread 线程的优先级是表示线程被调度的优先程度。每个线程都具有优先级,线程越重要,赋予的优先级就应越高,线程被调度的可能才会越大。
RT-Thread 最大支持 256 个线程优先级 (0~255),数值越小的优先级越高,0 为最高优先级。在一些资源比较紧张的系统中,可以根据实际情况选择只支持 8 个或 32 个优先级的系统配置;对于 ARM Cortex-M 系列,普遍采用 32 个优先级。最低优先级默认分配给空闲线程使用,用户一般不使用。在系统中,当有比当前线程优先级更高的线程就绪时,当前线程将立刻被换出,高优先级线程抢占处理器运行。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。