|
楼主 |
发表于 2016-10-25 11:44:21
|
显示全部楼层
回 eric2013 的帖子
eric2013:如果还要请求数据的话,整体上就不使用消息队列+事件标志组了,
使用消息队列替换事件标志组,也即是再做一个消息队列。用消息队列做ask,也做数据返回。
 (2016-10-25 10:03)  1. 这个就不太理解了。。 封装《Queue_A(发送消息) + Queue_B(接收消息)》?? 还是别的什么。。
这样在多任务的情况下,Task A中Queue_B里的Ack消息是不能确保唯一来自 Task B的,这样就回到了我最开始疑惑的多任务消息同步问题
2. 已经试验了共享动态内存指针的方式,验证可行,但是否有内存管理方面的风险??请指教下。。
封装代码大致如下:
// 发送同步消息,请求数据
sync_send(..., ackbuf)
{
// 申请动态内存,用于获取Ack数据
pTemp = malloc();
// 发送队列消息
xQueueSend(QHandle, &pTemp, Tick);
// 阻塞
xTaskNotifyWait();
// 拷贝Ack数据并释放动态内存
copy(ackbuf, pTemp, len);
free(pTemp);
}
// 接收同步消息
sync_recv(..., ackbuf)
{
// 接收队列消息
xQueueReceive(QHandle, &RecvData, Tick);
// 填写Ack数据
pTemp = (AckType *)RecvData;
pTemp = ......
// 解除Task A阻塞状态
xTaskNotify()
} |
|