RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】

RT-Thread中使用线程这个概念,而不是任务。二者类似,我在这里把他的线程看成任务来理解了函数

1、任务处理spa

动态任务相关API线程

建立任务:rt_thread_create函数,建立任务以后会返回rt_thread_t类型的任务IDcode

建立以后启动任务:rt_thread_startup对象

删除任务:rt_thread_deleteblog

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

任务运行状况可用finish模块,在电脑终端查看编译器

二、动态建立线程和静态建立线程it

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以后不会释放空间

相关文章
相关标签/搜索