博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RT-Thread的线程(任务)处理 rt_thread_create/rt_thread_init区别
阅读量:7230 次
发布时间:2019-06-29

本文共 1691 字,大约阅读时间需要 5 分钟。

RT-Thread中使用线程这个概念,而不是任务。两者相似,我在这里把他的线程当作任务来理解了

1、任务处理:

动态任务相关API

创建任务:rt_thread_create函数,创建任务之后会返回rt_thread_t类型的任务ID

创建之后启动任务:rt_thread_startup

删除任务:rt_thread_delete

任务延时函数:rt_thread_delay 延时时候,任务处于suspend状态

任务运行情况可用finish模块,在电脑终端查看

2、动态创建线程和静态创建线程

RT-Thread中支持静态和动态两种定义方式。用线程来举例的话,rt_thread_init对应静态定义方式,rt_thread_create对应动态定义方式。

  • 使用静态定义方式时,必须先定义静态的线程控制块,并且定义好堆栈空间,然后调用rt_thread_init来完成线程的初始化工作。采用这种 方式,线程控制块和堆栈占用的内存会放在RW段,这段空间在编译时就已经确定,它不是可以动态分配的,所以不能被释放,而只能使用 rt_thread_detach函数将该线程控制块从对象管理器中脱离。
  • 使用动态定义方式rt_thread_create时,RT-Thread会动态申请线程控制块和堆栈空间。在编译时,编译器是不会感知到这段空 间的,只有在程序运行时,RT-Thread才会从系统堆中申请分配这段内存空间,当不需要使用该线程时,调用rt_thread_delete函数就会 将这段申请的内存空间重新释放到内存堆中。

这两种方式各有利弊,静态定义方式会占用RW/ZI空间,但是不需要动态分配内存,运行时效率较高,实时性较好。 动态方式不会占用额外的RW/ZI空间,占用空间小,但是运行时需要动态分配内存,效率没有静态方式高。

静态创建线程代码:

创建线程:rt_thread_init

启动线程:rt_thread_startup

脱离线程:rt_thread_detach

//静态创建线程    result = rt_thread_init(&thread1,                          //线程handle                            "static",                          //线程名                            rt_init_thread_entry,              //线程入口函数                            RT_NULL,                           //线程入口参数                            &thread1_stack[0],                 //线程栈地址                            sizeof(thread1_stack),             //线程栈大小                            6,                                 //线程优先级                            10);                               //线程时间片

动态创建线程代码:

创建线程:rt_thread_create

启动线程:rt_thread_startup

线程启动成功后,当OS调度开始,即可被OS调度执行。

tid = rt_thread_create("init",        rt_init_thread_entry, RT_NULL,        2048, 10, 5);    if (tid != RT_NULL)        rt_thread_startup(tid);

空间使用比较

动态创建的线程,delete之后会释放出空间

静态创建的线程,detach之后不会释放空间

转载地址:http://hvdfm.baihongyu.com/

你可能感兴趣的文章
Java springcloud B2B2C o2o多用户商城 springcloud架构(八)springboot整合mongodb
查看>>
3年工作经验的Java程序员面试经过
查看>>
Mysql 批量写入数据,对于这类性能问题,你是如何优化的
查看>>
MySQL无法启动几种常见问题小结
查看>>
阿里CTO:阿里所有技术和产品输出都将必须通过阿里云进行
查看>>
更好用的集群限流功能,Sentinel 发布 v1.4.2
查看>>
Python(生成执行文件)
查看>>
redis安装配置 - ttlsa教程系列之redis
查看>>
Linux --DHCP服务器配置;DHCP服务器中继
查看>>
IE版本多的可爱_已迁移
查看>>
eclipse查看jar包中class的中文注释乱码问题的解决
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
mariadb安装
查看>>
vue+vuex+axios+echarts画一个动态更新的中国地图
查看>>
5.8 volumetric post-processing--game programming gems5 笔记
查看>>
8086的地址空间
查看>>
Android开发动画效果被遮掉的解决方法
查看>>
Apache2.2.17源码编译安装以及配置虚拟主机
查看>>
2017年开发语言排名
查看>>