原创 RT-Thread入门学习笔记_3

2020-2-18 16:50 688 10 10 分类: MCU/ 嵌入式 文集: RT-Thread入门学习文档

笔记内容参考RT-Thread内核入门指南教程视频:https://www.bilibili.com/video/av79513262?p=3

线程是什么?

RT-Thread名为实时线程RTOS,那么什么叫线程?

人们在实际生活遇到复杂问题时,往往采用“分而治之”方法,即把一个很复杂问题分解为若干个相对容易解决小问题,逐一击破。则,复杂问题就迎刃而解。因此,在设计一个复杂应用程序时,引入“分而治之”方法则可把一个大型任务分解为若干小任务,最终较为轻松解决好大任务。

RT-Thread中,与上述小任务对应程序实体称为“线程”或“任务”。RT-Thread就是一个能对这些小“线程”进行管理及调度的多“线程”操作系统。

线程是实体任务载体,其描述一个任务执行运行环境,也描述这个任务所处优先等级。同时,它是RT-Thread中最基本调度单位。

 

线程组成

RT-Thread中,线程由三部分组成:线程代码(入口函数)、线程控制块、线程堆栈。

线程代码

无限循环结构

void thread_entry(void *parameter)

{

while(1)

{

    /*等待事件的发生*/

   

   

    /*处理事件*/

}

}

顺序执行结构

void thread_entry(void *parameter)

{

/*事务1处理*/

    /*事务2处理*/

    /*事务N处理*/

}


线程控制块

线程控制块是操作系统用于管理线程的一个数据结构[1],他会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包括线程与线程之间连接用的链表结构,线程等待事件集合等。

注:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。


线程栈

RT-Thread每个线程都具有独立的栈空间,当进行线程切换时,系统会将当前线程的上下文保存在线程中,当线程要回复运行时,再从线程栈中读取上下文信息,回复线程运行。

线程上下文是指线程执行时的环境,即各个变量和数据。包括所有寄存器变量、堆栈信息、内存信息等。

线程栈在形式上是一段连续内存空间,设计者可以通过定义一个数组或申请一段动态内存作为线程的栈。

 

线程的创建

创建线程

静态线程

rt_errt rt_thread_init(struct rt_thread *thread, //定义线程控制块地址

const char *name,     //起一个线程名字              void (*entry)(void *parameter),  //函数指针—指向入口代码

void *parameter,      //向线程代码带入相关参数

void *stack_start,     //线程栈空间起始地址

rt_uint32_t stack_size, //线程栈大小

rt_uint8_t priority,    //线程优先顺序                rt_uint32_t tick)      //线程时间片参数(后文会详细介绍)

 

动态线程

rt_errt rt_thread_init(const char *name,     //起一个线程名字

                     void (*entry)(void *parameter),  //函数指针—指向入口代码

void *parameter,      //向线程代码带入相关参数

rt_uint32_t stack_size, //线程栈大小

rt_uint8_t priority,    //线程优先顺序             rt_uint32_t tick)      //线程时间片参数(后文会详细介绍)

 

启动线程

rt_err_t rt_thread_startup(rt_thread_t thread)

调用此函数后创建的线程会被加入到现成的就绪队列,执行调度。

 

静态线程与动态线程区别

1)相关资源分配形式

动态线程与静态线程相比,少了控制块地址及栈空间起始地址。静态线程需要提前定义才能使用,后者是动态分配。

2)运行效率

动态线程与静态线程均运行在片内RAM,则运行效率无太大区别。若,运行在外扩RAM,即片外RAM。则,运行效率比片内ROM低。


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
闵大 2020-02-23 18:17
RT-Thread入门学习笔记_6——空闲线程及两个常用钩子函数
笔记内容参考RT-Thread内核入门指南教程视频:https://www.bilibili.com/video/av79513262?p=6什么是空闲线程?由用户创建的线程称为用户线程,由系统本身具...
闵大 2020-02-22 16:28
RT-Thread入门学习笔记_5——优先级和时间片轮询
笔记内容参考RT-Thread内核入门指南教程视频:https://www.bilibili.com/video/av79513262?p=5什么是优先级和时间片 优先级和时间片是线程的两个重要...
闵大 2020-02-20 14:45
RT-Thread入门学习笔记_4——线程状态切换
笔记内容参考RT-Thread内核入门指南教程视频:https://www.bilibili.com/video/av79513262?p=4下图转自教程视频,笔者经消化吸收做出以下整理并画出流程图,...
闵大 2020-02-17 19:23
RT-Thread入门学习笔记_2
笔记内容参考RT-Thread内核入门指南教程视频:https://www.bilibili.com/video/av79513262?p=2 什么是堆栈?在单片机应用中,人们常提及堆栈一词,实...
闵大 2020-02-08 10:48
RT-Thread入门学习笔记_1
参考网址:https://www.rt-thread.org/document/site/入门学习视频:https://www.bilibili.com/video/av79513262?p=11.什...
广告
我要评论
0
10
广告
关闭 热点推荐上一条 /2 下一条