任务的状态-挂起和恢复
任务可以通过等待信号量和消息、延时函数使自己挂起,系统开始调度运行其它任务OSTaskSuspend(5)。当然也可以通过相应的函数是自己恢复OSTaskResume(5)。
延时函数:通过短延时OSTimeDly(n)和长延时函数OSTimeDlyHMSM(h,m,s,m)(最长11天)系统进入调度,延时完成后返回继续执行,也可通过STimeDlyResume(n)不经过延时完成随时恢复执行。
信号量:
1创建:OS_EVENT *sem=OSSemCreate(n) //参数n(0~65535的值,不同的值代表不同的意义)
2等待: value=OSSemAccept(sem); //查看资源是否可以使用,返回信号量的值
OSSemPend(sem,timeout,&err);//等待接收信号 才往下执行.任务timeout代表等待timeout个信号量后还没得到信号量,自动恢复运行状态,如果 timeout=0,表示无限等待信号量;
3发送:OSSemPost(sem);//发送信号量
邮箱:用于任务间大数据量(共享数据)的数据传输。把一个指针定义的变量从一个任务传递到另一个或多个任务中去,等待邮箱的任务也是可以设置无限等待和等待若干个时钟节拍后任务自动恢复执行。
1创建:OS_EVENT * Come=OSMboxCreate((void *)0);//建立邮箱
2发送: u16 buffer="0x0FFF";//要发送的信息
OSMboxPost(Come,&buffer);//通过邮箱发送信息(指针)给任务
3接收:u16 msg=OSMboxPend(Come,timeout,&err);//从指定邮箱com中获得信息指针即(指针msg指向buffer),若timeout=0为阻塞式,非0表示等待固定时钟周期后自动运行。
消息队列:其实是多个邮箱的数组,可以看做是个指针数组。用于处理有序的事件。
OS_EVENT *Com1 //定义一个指针
void *ComMsg1[3]; //定义一个指针数组
1创建:Com1=OSQCreate(&ComMsg1[0],3);//建立一个消息队列,即创建一个指针数组。(将数组指针的首地址赋值给com1) ,队列的个数为3
2发送: OSQPost(Com1,(void*)&st[0]); //发送到队列即 *ComMsg1[0]指向数组st的首地址,同时队列消息数加一
OSQPost(Com1,(void*)&aa[0]); //发送到队列
OSQPost(Com1,(void*)&a1); //发送到队列
2接收: void *msg1=OSQPend(Com1,0,&err);获得指针数组里的第一个指针ComMsg1[0],该指针指向st[0].每调用一次OSQPend函数,该函数会将队列的消息减1,Com1指向下一个消息指针*ComMsg1[i++]。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?