发送一个消息到邮箱中,OSMboxPost()

2024-06-19 14:08

本文主要是介绍发送一个消息到邮箱中,OSMboxPost(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[cpp] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 程序清单 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()函数的任务就可以立刻得到该消息了。  
  2. 注意,如果OSMboxPost()函数是从中断服务子程序中调用的,那么,这时并不发生上下文的切换。如果需要,中断服务子程序引起的上下文切换只发生在中断嵌套的最外层中断服务子程序对OSIntExit()函数的调用时(见3.09节,µC/OS-II中的中断)。程序清单 L6.16 向邮箱中发送一条消息  
  3. INT8U OSMboxPost (OS_EVENT *pevent, void *msg)  
  4. {  
  5.     OS_ENTER_CRITICAL();  
  6.     if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {              (1)  
  7.         OS_EXIT_CRITICAL();  
  8.         return (OS_ERR_EVENT_TYPE);  
  9.     }  
  10.     if (pevent->OSEventGrp) {                                        (2)  
  11.         OSEventTaskRdy(pevent, msg, OS_STAT_MBOX);                 (3)  
  12.         OS_EXIT_CRITICAL();  
  13.         OSSched();                                                 (4)  
  14.         return (OS_NO_ERR);  
  15.     } else {  
  16.         if (pevent->OSEventPtr != (void *)0) {                      (5)  
  17.             OS_EXIT_CRITICAL();  
  18.             return (OS_MBOX_FULL);  
  19.         } else {  
  20.             pevent->OSEventPtr = msg;                                (6)  
  21.             OS_EXIT_CRITICAL();  
  22.             return (OS_NO_ERR);  
  23.         }  
  24.     }  

这篇关于发送一个消息到邮箱中,OSMboxPost()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075242

相关文章

Python利用qq邮箱发送通知邮件(已封装成model)

因为经常喜欢写一些脚本、爬虫之类的东西,有需要通知的时候,总是苦于没有太好的通知方式,虽然邮件相对于微信、短信来说,接收性差了一些,但毕竟免费,而且支持html直接渲染,所以,折腾了一个可以直接使用的sendemail模块。这里主要应用的是QQ发邮件,微信关注QQ邮箱后,也可以实时的接收到消息,肾好! 好了,废话不多说,直接上代码。 # encoding: utf-8import lo

消息认证码解析

1. 什么是消息认证码         消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。         消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。         根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 提取码:2176 串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。 单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,

rocketmq问题汇总-如何将特定消息发送至特定queue,消费者从特定queue消费

业务描述 由于业务需要这样一种场景,将消息按照id(业务id)尾号发送到对应的queue中,并启动10个消费者(单jvm,10个消费者组),从对应的queue中集群消费,如下图1所示(假设有两个broker组成的集群):  producer如何实现 producer只需发送消息时调用如下方法即可 /*** 发送有序消息** @param messageMap 消息数据* @param

Spring 集成 RabbitMQ 与其概念,消息持久化,ACK机制

目录 RabbitMQ 概念exchange交换机机制 什么是交换机binding?Direct Exchange交换机Topic Exchange交换机Fanout Exchange交换机Header Exchange交换机RabbitMQ 的 Hello - Demo(springboot实现)RabbitMQ 的 Hello Demo(spring xml实现)RabbitMQ 在生产环境

SpringBoot中如何监听两个不同源的RabbitMQ消息队列

spring-boot如何配置监听两个不同的RabbitMQ 由于前段时间在公司开发过程中碰到了一个问题,需要同时监听两个不同的rabbitMq,但是之前没有同时监听两个RabbitMq的情况,因此在同事的帮助下,成功实现了监听多个MQ。下面我给大家一步一步讲解下,也为自己做个笔记; 详细步骤: 1. application.properties 文件配置: u.rabbitmq.ad

基于springboot websocket和okhttp实现消息中转

1、业务介绍 消息源服务的消息不能直接推给用户侧,用户与中间服务建立websocket连接,中间服务再与源服务建立websocket连接,源服务的消息推给中间服务,中间服务再将消息推送给用户。流程如下图: 此例中我们定义中间服务A的端口为8082,消息源头服务B的端口为8081,方便阅读下面代码。 说明:此例子只实现了中间服务的转发,连接的关闭等其他逻辑并没有完善,如需要请自行完善; 2、中

RTSP 详细消息交互

RTSP(Real Time Streaming Protocol)实时流协议,是TCP/IP协议体系中的一个应用层协议。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输。 RTSP没有“连接”这个概念,而由RTSP会话(session)代替(服务器端保持一个由识别符标记的会话)。RTSP会话没有绑定传输层连接(如TCP连接)。在RTSP会话期间,RTSP客户端

示例:推荐一个应用Adorner做的通知和提示消息对话框

一、目的:在开发过程中,增加一些提示消息可以很好的提高用户体验,下面介绍一个用于增加提示消息的库 二、效果如下 可以看到右侧顶端弹出提示消息,消息间隔3s自动退出 三、环境 VS2022 Net7 四、使用方式 安装nuget包:H.Modules.Messages.Dialog和H.Modules.Messages.Notice  添加如下代码 pri

【Orange Pi 5与Linux编程编程】-POSIX消息队列

Linux系统中的POSIX消息队列编程 文章目录 Linux系统中的POSIX消息队列编程1、POSIX 消息队列2、Linux 中的 POSIX 消息队列命名3、POSIX 消息队列调用3.1 mq_open, mq_close3.2 mq_timed_send、mq_send、mq_timed_receive、mq_receive3.3 mq_notify3.4 mq_unlink3