不會的。
這是消息發送函數,發消息的數據打包發送到隊列裡,在隊列處理後,會釋放的。
具體釋放的地方是在這裡:
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,但消息裡的業務負載數據,往往很大,只能傳遞地址。而這裡的業務數據是存儲在動態分配的內存裡的,所以傳遞這個地址,沒問題。
只是這個地址如何處理,是看地址的屬性,如何去管理它,你也可以修改成使用堆去傳遞它,也沒問題。