发送一个消息到邮箱中,OSMboxPost()
来源:互联网 发布:软件界面的英文 编辑:程序博客网 时间:2024/05/18 03:34
程序清单 L6.16是OSMboxPost()函数的源代码。检查了事件控制块是否是一个邮箱后[L6.16(1)],OSMboxPost()函数还要检查是否有任务在等待该邮箱中的消息[L6.16(2)]。如果事件控制块中的OSEventGrp域包含非零值,就暗示着有任务在等待该消息。这时,调用OSEventTaskRdy()将其中的最高优先级任务从等待列表中删除[见6.02节,使一个任务进入就绪状态,OSEventTaskRdy()][L6.16(3)],加入系统的就绪任务列表中,准备运行。然后,调用OSSched()函数[L6.16(4)],检查该任务是否是系统中最高优先级的就绪任务。如果是,执行任务切换[仅当OSMboxPost()函数是由任务调用时],该任务得以执行。如果该任务不是最高优先级的任务,OSSched()返回,OSMboxPost()的调用函数继续执行。如果没有任何任务等待该消息,指向消息的指针就被保存到邮箱中[L6.16(6)](假设此时邮箱中的指针不是非NULL的[L6.16(5)])。这样,下一个调用OSMboxPend()函数的任务就可以立刻得到该消息了。注意,如果OSMboxPost()函数是从中断服务子程序中调用的,那么,这时并不发生上下文的切换。如果需要,中断服务子程序引起的上下文切换只发生在中断嵌套的最外层中断服务子程序对OSIntExit()函数的调用时(见3.09节,µC/OS-II中的中断)。程序清单 L6.16 向邮箱中发送一条消息INT8U OSMboxPost (OS_EVENT *pevent, void *msg){ OS_ENTER_CRITICAL(); if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1) OS_EXIT_CRITICAL(); return (OS_ERR_EVENT_TYPE); } if (pevent->OSEventGrp) { (2) OSEventTaskRdy(pevent, msg, OS_STAT_MBOX); (3) OS_EXIT_CRITICAL(); OSSched(); (4) return (OS_NO_ERR); } else { if (pevent->OSEventPtr != (void *)0) { (5) OS_EXIT_CRITICAL(); return (OS_MBOX_FULL); } else { pevent->OSEventPtr = msg; (6) OS_EXIT_CRITICAL(); return (OS_NO_ERR); } }}
0 0
- 发送一个消息到邮箱中,OSMboxPost()
- 发送一个消息到邮箱中,OSMboxPost()
- 发送一个消息到邮箱中,OSMboxPost()
- OSMboxPost ()
- 发送到邮箱
- SpringBoot,发送到邮箱
- c#中发送excel到指定的邮箱
- 在MFC中从一个线程工作函数中向窗口发送消息以及窗口到窗口消息传送方法
- 无等待地从邮箱中得到一个消息, OSMboxAccept()
- 无等待地从邮箱中得到一个消息, OSMboxAccept()
- 简单的发送到邮箱
- 发送信息到邮箱里
- Log4j 如何发送到邮箱
- Android发送邮件到邮箱
- php 发送邮件到邮箱
- 使用richEditControl 配合自制邮箱发送带图文邮件到邮箱中
- dedecms自定义表单发送到邮箱--163邮箱发送
- 在asp.net邮件发送:将整个页面发送到对方邮箱中
- 文章标题
- 图解正向代理、反向代理、透明代理
- TCP 11种状态
- 蓝桥杯第五届省赛(热身)
- debain 截图工具 实用的
- 发送一个消息到邮箱中,OSMboxPost()
- C++模板实现二叉树(五 树的平衡之dsw算法)
- 全栈必备 JavaScript基础
- eclipse 使用recycleView基础配置和使用
- Leetcode-199. Binary Tree Right Side View
- POJ 1703 Find them, Catch them【并查集】
- 203. Remove Linked List Elements 没做出来
- CCF-CSP-2017-3-1 分蛋糕
- phpExcel导入不同excel版本遇到的问题