根据simplici TI说明,网络层数据队列分为输入队列和输出队列,输入队列用于存储从射频层取回的数据帧,输出队列用于暂存等待发送的数据帧,它们使用了LRU淘汰机制。
单个队列数据队列单元如下所示:
其中fi_usage代表数据单元使用状况,一共有如下几种状态,FI_AVAILABLE代表数据单元可用,FI_INUSE_UNTIL_DEL表示等待释放存储空间,FI_INUSE_UNTIL_TX表示等待发送,FI_INUSE_UNTIL_FWD表示等待AP转发,FI_INUSE_TRANSITION表示取回,不在中断中删除。
oderStamp个人理解用于表示数据在队列中停留时间,mrfiPkt当然就是射频数据包
存储结构如图所示:
Simplici Ti针对队列管理主要提供如下API:
void nwk_QInit(void) |
队列初始化 |
frameInfo_t *nwk_QfindSlot(uint8_t which) | 找到一个位置用于从射频取回帧数据 |
void nwk_QadjustOrder(uint8_t which, uint8_t stamp) | 调整队列 |
frameInfo_t *nwk_QfindOldest(uint8_t which, rcvContext_t *rcv, uint8_t fi_usage) | 查看帧队列并查找停留在队列时间最长的可用帧 |
frameInfo_t *nwk_getQ(uint8_t which) | 获取指定帧队列的地址 |
&nb