rt-thread 怎么确定线程栈大小
答案:1 悬赏:10 手机版
解决时间 2021-01-27 17:25
- 提问者网友:末路
- 2021-01-27 06:03
rt-thread 怎么确定线程栈大小
最佳答案
- 五星知识达人网友:狂恋
- 2021-01-27 07:08
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之后不会释放空间
国产RTOS,比如都江堰实时操作系统?RT-Thread?等,除了这两个,还有其他的?有专门做RTOS的公司?
RT-Thread RTOS
这是一款由国内RT-Thread工作室开发的开源实时操作系统。起初RT-Thread是一个实时的内核(全抢占优先级调度,调度器时间复杂度O(1)),但在发展过程中,RT-Thread实时操作系统得到了来自全国嵌入式开发工程师的鼎力支持,为RT-Thread添砖加瓦,现在它已慢慢变成一个完善的、全功能的操作系统:文件系统,网络协议栈,图形界面组件。。。只有您想不到,没有您做不到:RT-Thread是一个平台,您可以把您的创意汇聚在一起,小平台大社区,RT-Thread的开发人员就在您的身边。
有关rt-thread的编程语言,指教
我觉得有两种可能:
1. 存放结构体内容的空间的首字节地址
2. 结构体的各成员均有各自的地址,这些地址是放在一块连续的内存中,结构体的指针存放的是这块连续的内存的首字节地址。
其实吧,对于这个结构体指针里面的具体内容不是那么重要,只要了解这种指针怎么用就行了,
动态任务相关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之后不会释放空间
国产RTOS,比如都江堰实时操作系统?RT-Thread?等,除了这两个,还有其他的?有专门做RTOS的公司?
RT-Thread RTOS
这是一款由国内RT-Thread工作室开发的开源实时操作系统。起初RT-Thread是一个实时的内核(全抢占优先级调度,调度器时间复杂度O(1)),但在发展过程中,RT-Thread实时操作系统得到了来自全国嵌入式开发工程师的鼎力支持,为RT-Thread添砖加瓦,现在它已慢慢变成一个完善的、全功能的操作系统:文件系统,网络协议栈,图形界面组件。。。只有您想不到,没有您做不到:RT-Thread是一个平台,您可以把您的创意汇聚在一起,小平台大社区,RT-Thread的开发人员就在您的身边。
有关rt-thread的编程语言,指教
我觉得有两种可能:
1. 存放结构体内容的空间的首字节地址
2. 结构体的各成员均有各自的地址,这些地址是放在一块连续的内存中,结构体的指针存放的是这块连续的内存的首字节地址。
其实吧,对于这个结构体指针里面的具体内容不是那么重要,只要了解这种指针怎么用就行了,
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯