RT-Thread入门(二) 线程的创建和管理

RT-Thread 新建进程 动/静态进程及线程的管理

        上一节我们已经建立了一个空白的RT-Thread工程,但这个工程只有一个进程main,今天我们在上次的基础上继续学习,通过创建多个进程感受RT-Thread和裸跑程序的不同。这次我们将将上次工程中控制LED和串口的两部分分离,独立成两个不同的线程。

简介

一、动态线程、静态线程区别

       使用静态定义方式时,必须先定义静态的线程控制块,并且定义好堆栈空间,然后调用rt_thread_init来完成线程的初始化工作。采用这种方式,线程控制块和堆栈占用的内存会放在RW段,这段空间在编译时就已经确定,它不是可以动态分配的,所以不能被释放。而只能使用rt_thread_detach函数将该线程控制块从对象管理器中脱离。
       使用动态定义方式rt_thread_create时,RT-Thread会动态申请线程控制块和堆栈空间。在编译时,编译器是不会感知到这段空间的,只有在程序运行时,RT-Thread才会从系统堆中申请分配这段内存空间,当不需要使用该线程时,调用rt_thread_delete函数就会将这段申请的内存空间重新释放到内存堆中。
       这两种方式各有利弊,静态定义方式会占用RW空间,但是不需要动态分配内存,运行时效率高。动态方式不会占用额外的RW空间,占用空间小,但是运行时需要动态分配内存,效率没有静态方式高。总的来说,这两种方式就是空间和时间效率的平衡,可以根据实际环境需求选择采用具体的分配方式。

二、相关函数介绍

1.首先呢当然是最重要的创建函数 rt_thread_create

rt_thread_t rt_thread_create(const char* name,
							void (*entry)(void* parameter),
							void* parameter,
							rt_uint32_t stack_size,
							rt_uint8_t priority,
							rt_uint32_t tick);

2.只要调用上面这个函数就可以使用动态方式创建一个进程,但这个线程处于初始状态,并未进入就绪线程的调度队列,我们可以在线程初始化创建成功后调用rt_thread_startup 让该线程进入就绪态:

rt_err_t rt_thread_startup(rt_thread_t thread);

3.当一些线程我们不再需要的时候我们需要删除他的时候可以调用 rt_thread_create()将他删除。

rt_err_t rt_thread_delete(rt_thread_t thread);

上面介绍的都是使用动态方法创建的线程,下面就是静态方法创建线程。

4.静态方式使用rt_thread_init()函数进行初始化。

rt_err_t rt_thread_init(struct rt_thread* thread,
						const char* name,
						void (*entry)
  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值