不会的.
这是消息发送函数, 发消息的数据打包发送到队列里, 在队列处理后, 会释放的.
具体释放的地方是在这里:
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, 但消息里的业务负载数据, 往往很大, 只能传递地址. 而这里的业务数据是存储在动态分配的内存里的, 所以传递这个地址, 没问题.
只是这个地址如何处理, 是看地址的属性, 如何去管理它, 你也可以修改成使用堆去传递它, 也没问题.