ucosIII 消息传递
来源:互联网 发布:阿里云tv输入法apk 编辑:程序博客网 时间:2024/05/17 07:34
任务间通信
一个任务或者中断服务程序有时候需要和另一个任务交流信息,这个就是消息传递的过程就叫做任务间通信。
任务间的消息传递可以通过2种途径:一z是通过全局变量,二是通过发布消息。
使用全局变量的时候每个任务或者中断服务程序都必须保证其对全局变量的独占访问。消息也可以通过消息队列作为中介发布给任务。
消息传递基本用法跟信号量等内核对象十分相似。
消息构成
消息包含一下几个部分:指向数据的指针,数据长度和记录消息发布时刻的时间戳。
指针指向的可以是一块数据区域或者甚至是一个函数。
消息的内容必须一直保持可见性,可见性是指代表消息的变量必须在接收消息的任务代码范围内有效。这是因为发布的数据采用的是指针传递,也就是引用传递,并不是值传递。也就是说,发布的消息本身并不产生内存拷贝,可以使用动态内存分配的方式来给消息分配一个内存块,或者,也可以传递一个指向全局变量、全局数据结构、全局数组或者函数的指针。
消息队列
消息队列的相关操作,ISR只能发布消息,不能等待。
消息发布方发布消息时可以指定是先入先出模式(FIFO)还是设置为后入先出模式(LIFO),例如ISR发布的消息可以使用LIFO这样可以绕开其他消息最先传递到任务。
广播消息
同理,消息传递也可以使用广播方式,广播至各个任务。
双向通信
外部消息队列API
定义消息队列
OS_Q Msg_Que;
创建消息队列
void OSQCreate(OS_Q *p_q, //指向定义的消息队列 CPU_CHAR *p_name, //消息队列名字 OS_MSG_QTY max_qty, //消息队列长度 OS_ERR *p_err) //返回错误码
发送消息队列
void OSQPost(OS_Q *p_q, //定义的消息队列 void *p_void, //消息内容地址 OS_MSG_SIZE msg_size, //消息大小字节 OS_OPT opt, //消息操作类型 OS_ERR *p_err //返回错误信息)
多个任务等待一个消息时候,最高优先级将获得消息,如果等待消息任务比发送消息任务高将发生任务调度,发送任务会被挂起。
等待消息队列
void *OSQPend(OS_Q *P_Q, //指向定义的消息队列 OS_TICK timeout, //等待超时时间,0一直等 OS_OPT opt, //是否使用阻塞模式 OS_MSG_SIZE *p_msg_size, //消息长度 CPU_TS *p_ts, //时间戳 OS_ERR *p_err //错误返回)
如果消息队列中没有任何消息,OSQPend()任务将被挂起或者阻塞等待,直到接收到消息或者超时。OSQPend()return指针就是消息内容的地址。
任务内建消息
同信号量相似,每个任务都有内建的消息队列,用户可以直接发送消息给任务而不通过外部消息队列。
宏OS_CFG_TASK_Q_EN使能
内建任务的消息队列大小在创建任务时候创建
任务内建消息队列API
发送任务内建消息
void OSTaskQPost(OS_TCB *p_TCB,//指向接收消息任务的TCB void *p_void,//消息内容 OS_MSG_SIZE msg_size,//消息长度 OS_OPT opt, OS_ERR *p_err,//返回错误码 )
等待任务内建消息
void *OSTaskQPend(OS_TICK timeout,//等待超时时间 OS_OPT opt, OS_MSG_SIZE *p_msg_size,//消息大小 CPU_TS *p_ts, )
- ucosIII 消息传递
- UCOSIII 消息传递
- UCOSIII消息传递
- ucosIII 消息传递
- UCOSIII消息传递(消息队列)(待更)
- ucosiii消息队列实例
- ucosiii任务内建消息队列
- 消息队列OSTaskCreate返回值为0 ucosIII
- 消息传递
- 消息传递
- 消息传递
- 消息传递
- 消息传递
- 消息传递
- MFC消息详解 消息传递
- 运用JMS传递消息
- 基本概念:消息传递
- EXE之间传递消息
- Java类和对象 详解(二)
- 使用vlc下载u3m8流媒体并存储为文件
- UI界面概要
- 非阻塞socket-connect
- Segment Tree 线段树总结
- ucosIII 消息传递
- 设计模式---博客地址
- 编码工具类EncodingUtils(解决乱码问题)
- HDU 5512 Pagodas (博弈论、找规律)
- 优酷土豆的Redis服务平台化之路
- 生产者消费者模式
- 常用的12个Git基本命令
- SpringMVC之DispatcherServlet(1)Servlet的初始化
- 递归删除非空文件夹