RT-Thread 24. 邮箱和队列发送消息的区别

1. 邮箱的消息池存放的是消息的地址(4字节),消息在被接收前不能消被覆盖。
/* 用 于 放 邮 件 的 内 存 池 */
static char mb_pool[16];
static char mb_str1[] = "I'm a mail!";
void MbKeyScanCallBack(void)
{
  static rt_uint8_t count = 0;
  rt_err_t result = RT_EOK;

//  while (count < 10)
//  {
    count ++;
    if (count & 0x1)
    {
      /* 发 送 mb_str1 地 址 到 邮 箱 中 */
      result = rt_mb_send(&mb, (rt_uint32_t)&mb_str1);
}
...
}

int MbTaskInit(void)
{
  rt_err_t result;
  /* 初 始 化 一 个 mailbox */
  result = rt_mb_init(&mb,
                      "mbt", /* 名 称 是 mbt */
                      &mb_pool[0], /* 邮 箱 用 到 的 内 存 池 是 mb_pool */
                      sizeof(mb_pool) / 4, /* 邮 箱 中 的 邮 件 数 目, 因 为 一 封 邮
                      件 占 4 字 节 */
                      RT_IPC_FLAG_FIFO); /* 采 用 FIFO 方 式 进 行 线 程 等 待 */
...
}
2. 队列发送的消息可以是局部的,rt_mq_send实际会把消息内容复制到队列的消息池里,则发送完消息可以被覆盖了。
static rt_uint8_t msg_pool[32];
void MqKeyScanCallBack(void)
{
  int result;
  static char buf = 'A';
  static rt_uint8_t cnt = 0;
  
//  while (1)
  {
    if (cnt == 8)
    {
      /* 发 送 紧 急 消 息 到 消 息 队 列 中 */
      result = rt_mq_send(&mq, &buf, 1);
...
}
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值