嵌入式操作系统内核原理和开发(消息队列)

嵌入式操作系统内核原理和开发(消息队列)

ID:14203833

大小:159.50 KB

页数:12页

时间:2018-07-26

嵌入式操作系统内核原理和开发(消息队列)_第1页
嵌入式操作系统内核原理和开发(消息队列)_第2页
嵌入式操作系统内核原理和开发(消息队列)_第3页
嵌入式操作系统内核原理和开发(消息队列)_第4页
嵌入式操作系统内核原理和开发(消息队列)_第5页
资源描述:

《嵌入式操作系统内核原理和开发(消息队列)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、软件英才网软件行业驰名招聘网站嵌入式操作系统内核原理和开发(消息队列)消息队列是线程交互的一种方法,任务可以通过消息队列来实现数据的沟通和交换。在嵌入式系统上,这可以说这是用的最多的一种方法。通过消息队列,无论是发送者,还是接受者都可以循环地处理各种消息。而我们知道,存储消息最好的方式就是循环队列,如果消息已满,那么发送者可以把自己pend到等待队列上;而如果此时没有消息,那么接受者也可以把自己pend到等待队列上。当然实现消息队列的方法很多,甚至用户可以自己利用互斥量和信号量来实现,而嵌入式系统常常会默认提供这样的功能函数,我想主要的目的还是为了方便用户,让他们可以更多地从业务的

2、角度来看问题,而不是把重点关注在这些底层的细节上面。首先,我们还是看看rawos上面关于消息队列的数据结构是怎么定义的,[cpp]viewplaincopy1typedefstructRAW_MSG_Q{23RAW_VOID**queue_start;/*Pointertostartofqueuedata*/4RAW_VOID**queue_end;/*Pointertoendofqueuedata*/5RAW_VOID**write;/*PointertowherenextmessagewillbeinsertedintheQ*/6RAW_VOID**read;/*Pointer

3、towherenextmessagewillbeextractedfromtheQ*/7RAW_U32size;/*Sizeofqueue(maximumnumberofentries)*/8RAW_U32current_numbers;/*Currentnumberofentriesinthequeue*/9RAW_U16blocked_send_task_numbers;/*numberofblockedsendtasknumbers*/10RAW_U16blocked_receive_task_numbers;/*numberofblockedsendtasknumbers*

4、/1112}RAW_MSG_Q;1314typedefstructRAW_QUEUE15{16RAW_COMMON_BLOCK_OBJECTcommon_block_obj;17RAW_MSG_Qmsg_q;1819}RAW_QUEUE;有需要请联系我们软件英才网软件行业驰名招聘网站上面的代码中有两段数据结构,第一段主要表示循环队列的内容,其中包括了队列首地址、队列末尾地址、当前队列读取地址、当前队列插入地址、队列大小、消息个数、阻塞的发送线程数据、阻塞的接受线程数目。而第二段数据结构就比较简单,它把通用等待结构和循环队列合在了一起,共同构成了消息队列的数据结构。根据我们以前的经验

5、,互斥同步数据结构的操作都会分成几个部分,当然消息队列也不例外,也会分成初始化、发送消息、接受消息、清除消息、删除消息队列等几种操作函数。当然,消息队列还是增加了一个新的选项,那就是插入消息的时候可以插入在队列的前方,还是插入在队列的尾部,这在某种程度上决定了消息的优先级。说到这,我们还是看看消息队列是怎么初始化的,[cpp]viewplaincopy1RAW_U16raw_queue_create(RAW_QUEUE*p_q,RAW_U8*p_name,RAW_VOID**msg_start,RAW_U32number)2{34#if(RAW_QUEUE_FUNCTION_CHE

6、CK>0)56if(p_q==0){78returnRAW_NULL_OBJECT;9}1011if(msg_start==0){1213returnRAW_NULL_POINTER;14}1516if(number==0){1718returnRAW_ZERO_NUMBER;19}2021#endif2223list_init(&p_q->common_block_obj.block_list);2425p_q->common_block_obj.name=p_name;26p_q->common_block_obj.block_way=0;27p_q->msg_q.queue_

7、start=msg_start;/*Initializethequeue*/有需要请联系我们软件英才网软件行业驰名招聘网站1p_q->msg_q.queue_end=&msg_start[number];2p_q->msg_q.write=msg_start;3p_q->msg_q.read=msg_start;4p_q->msg_q.size=number;5p_q->msg_q.current_numbers=0;6p_q->msg_q.blocked_send_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。