rtthread线程

线程属性

rtthread操作系统是多任务,多线程来操作,线程主要是由两类线程,(1)系统线程.(2)用户线程。rtthread的最小操纵单位就是线程,那么,线程由什么来设置的呢,答案就是线程结构体,一个名为rt_thread的结构体,该结构体如下
在这里插入图片描述
该结构体包含了结构体对象的信息,例如姓名,类型,标志等,还包含了内存空间等信息,例如指针、栈大小、地址,入口函数等信息,还包含状态码等信息
在这里插入图片描述

包含了优先级,事件集等信息。还包括一个默认的清除函数,当线程退出时,由idle线程回调这个函数,进行用户层面的清楚现场,这个函数由用户自己编写。

线程状态

rtthread线程状态主要由以下状态
(1)初始状态,线程初始化完成,未被调用状态
(2)就绪态,线程排队,等待被调用状态
(3)运行态,
(4)挂起状态,线程被挂起,阻塞,例如调用延时函数
(5)关闭状态。
注意:为了避免线程堵塞,导致低优先级线程得不到调用,必须在代码中调用延时函数等,让低优先级线程得到执行。
线程间状态切换如图:
在这里插入图片描述

创建线程,线程辅助函数

rtthread支持动态创建线程、静态创建线程两种创建线程的方式,分别调用的函数是,rt_thread_create("th_demo", th1_enrty, NULL,1024, 20, 5),该函数返回的是线程属性结构体;静态创建线程调用rt_thread_init(&th2, "th2_demo", th2_entry, NULL, th2_stack, 512, 19, 5);,该函数返回的是调用状态rt_err_t,这两个函数都能创建线程,区别在于creat线程是由系统自动分配线程内存,init函数是给出具体的内存地址,在内存地址上建立线程,注意返回值的不同。
线程辅助函数如下
(1)获得当前线程

rt_thread_t rt_thread_self`

返回线程句柄。
(2)让出处理器资源。

rt_err_t rt_thread_yield(void)

让出后进入就绪态,并未休眠
(3)线程睡眠。

rt_thread_mdelay();

(4)线程控制函数。

rt_err_t rt_thread_control(rt_thread_t thread,int cmd,void *arg)

(5)设置和删除idle线程的hook函数

钩子函数表示系统在没有到达线程处理函数时,函数对该线程调度之间信息的处理和截获,并且一直跟随该线程。

rt_err_t rt_thread_idle_delhook(void(*hook)(void))

空闲线程不允许处于挂起状态,比如delay,sleep函数
(6)调度器的hook函数
系统处于线程运行、中断触发、响应中断、切换线程的过程中,用户想知道在一个时刻发生了什么样的线程切换,可以通过设置相应的钩子函数,在系统线程切换时,这个钩子函数被调用。

void scheduler_hook(struct rt_thread *from, struct rt_thread *to)
{
  rt_kprintf("from:%s --->to:%s\n",from->name,to->name);
}
rt_scheduler_sethook(scheduler_hook);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值