MAC_McpsDataAlloc的使用

zigbee数据帧由高层(应用层)发起,在ZigBee设备之问进行数据传输的时候,要传输的数据由应用层生成,经过逐层数据处理后发送给MAC层,形成MAC层服务数据单元(MSDU)。通过添加MAC层帧头信息和帧尾,便形成了完整的MAC数据帧MPDU,其帧结构如附件内所示。


据载荷传输到MAC子层就称之为MSDU,在MSDU的前面加上MHR,后面加上MFR就构成了MAC数据帧,也就是MPDU。其中MFR包含帧控制域、序列号和寻址信息域。MFR由16bitFCS构成。MPDU传输到物理层后就作为物理层数据静载荷,也就是PSDU。PSDU的前面加上SHR和PHR就形成了PPDU,其中SHR包含前导序列和SFD域;PHR由PSDU的长度值(字节表示)组成。


MAC_McpsDataAlloc获得的一段ram,里面包含了tx buffer打包到MPDU中,其中一个固定的offset(24字节)后指向MSDU。
MAC_McpsDataAlloc分配帧缓冲区时,会分配出整个PSDU需要的空间,而msdu.p是指向PSDU中MAC payload对应的offset。但是MAC_CbackEvent返回 MAC_MCPS_DATA_CNF时,msdu.p指向出错,误指向了帧头。
通过加入以下代码可以修正


  if ( event == MAC_MCPS_DATA_CNF )
  {
    uint8 *originalMsdup = (uint8 *)pData->dataCnf.pDataReq + sizeof(macMcpsDataReq_t) + MAC_DATA_OFFSET;
    pData->dataCnf.pDataReq->msdu.len -= (uint8)(originalMsdup - pData->dataCnf.pDataReq->msdu.p);
    pData->dataCnf.pDataReq->msdu.p = originalMsdup;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值