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;
count ++;
if (count & 0x1)
{
result = rt_mb_send(&mb, (rt_uint32_t)&mb_str1);
}
...
}
int MbTaskInit(void)
{
rt_err_t result;
result = rt_mb_init(&mb,
"mbt",
&mb_pool[0],
sizeof(mb_pool) / 4,
RT_IPC_FLAG_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;
{
if (cnt == 8)
{
result = rt_mq_send(&mq, &buf, 1);
...
}