不会的。
这是消息发送函数,发消息的数据打包发送到队列里,在队列处理后,会释放的。
具体释放的地方是在这里:
W801\w80x_20211115\platform\sys\tls_sys.c:356
void tls_sys_task(void *data)
{
u8 err;
struct tls_sys_msg *msg;
u8 auto_reconnect = WIFI_AUTO_CNT_OFF;
//u8 oneshotflag = 0;
//u8 auto_mode = 0;
for (;;)
{
err = tls_os_queue_receive(msg_queue, (void **) &msg, 0, 0);
if (!err)
{
switch (msg->msg)
...
break;
}
**tls_mem_free(msg);**
}
else
{
}
}
}
这样操作是不是破坏了free RTOS消息传递的约定?传递拷贝而不是传递引用!
Post an item on a queue. The item is queued by copy, not by reference.
*
消息的控制数据在结构体里,是可以传递copy,但消息里的业务负载数据,往往很大,只能传递地址。而这里的业务数据是存储在动态分配的内存里的,所以传递这个地址,没问题。
只是这个地址如何处理,是看地址的属性,如何去管理它,你也可以修改成使用堆去传递它,也没问题。