工具/软件:
你好!
设置信息:
- CC1310F32微控制器
- NoRTOS 应用程序
- 射频单模
- 专有 RX 和 TX
- SDK 4.20.02.07
- CCS 12.8.1
我想了解在罕见/异常情况下是否会出现 RFQeue 缓冲区溢出? 以下是相关的代码片段、其中显示了如何设置 RFQueue 以及专有 RX cmd (RF_cmdPropRx):
#include DeviceFamily_constructPath(driverlib/rf_prop_mailbox.h) #include "RFQueue.h" /* Packet RX Configuration */ #define DATA_ENTRY_HEADER_SIZE 8 /* Constant header size of a Generic Data Entry */ #define MAX_LENGTH 100 /* Max length byte the radio will accept */ #define NUM_DATA_ENTRIES 2 /* NOTE: Only two data entries supported at the moment */ #define NUM_APPENDED_BYTES 3 /* The Data Entries data field will contain: * 1 Header byte (RF_cmdPropRx.rxConf.bIncludeHdr = 0x1) * Max 100 payload bytes * 1 RSSI byte (RF_cmdPropRx.rxConf.bAppendRssi = 1) * 1 status byte (RF_cmdPropRx.rxConf.bAppendStatus = 0x1) */ #pragma DATA_ALIGN(rxDataEntryBuffer, 4) uint8_t rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE(NUM_DATA_ENTRIES, MAX_LENGTH, NUM_APPENDED_BYTES)]; // CMD_PROP_RX // Proprietary Mode Receive Command rfc_CMD_PROP_RX_t RF_cmdPropRx = { .commandNo = 0x3802, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .pktConf.bFsOff = 0x0, .pktConf.bRepeatOk = 0x0, .pktConf.bRepeatNok = 0x0, .pktConf.bUseCrc = 0x1, .pktConf.bVarLen = 0x1, .pktConf.bChkAddress = 0x0, .pktConf.endType = 0x0, .pktConf.filterOp = 0x0, .rxConf.bAutoFlushIgnored = 0x0, .rxConf.bAutoFlushCrcErr = 0x0, .rxConf.bIncludeHdr = 0x1, .rxConf.bIncludeCrc = 0x0, .rxConf.bAppendRssi = 0x1, .rxConf.bAppendTimestamp = 0x0, .rxConf.bAppendStatus = 0x1, .syncWord = 0x930B51DE, .maxPktLen = 0x64, .address0 = 0xAA, .address1 = 0xBB, .endTrigger.triggerType = 0x1, .endTrigger.bEnaCmd = 0x0, .endTrigger.triggerNo = 0x0, .endTrigger.pastTrig = 0x0, .endTime = 0x00000000, .pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx .pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx }; static dataQueue_t dataQueue; void *mainThread(void *arg0) { RFQueue_defineQueue(&dataQueue, rxDataEntryBuffer, sizeof(rxDataEntryBuffer), NUM_DATA_ENTRIES, MAX_LENGTH + NUM_APPENDED_BYTES)); }
您将看到附加了长度字节(标头)以及 RSSI 和状态字节(#NUM_SUPPTED_Bytes = 3)。 接受的最大长度为100个字节(#MAX_LENGTH = 100且 RF_cmdPropRx.maxPktLen = 0x64)。
我执行了测试、其中绘制了的数据内容 rxDataEntryBuffer 使用幻值(0xCC)、接收到最大长度数据包、但未观察到缓冲区溢出。 大于100字节的射频数据包会被拒绝。 尽管如此、在极少数情况下、我们怀疑可能会发生缓冲区溢出。
在代码片段中、您将看到 RF_cmdPropRx.bIncludeCrc = 0且 RF_cmdPropRx.bAppendTimestamp = 0。 是否存在附加此或其他元数据的射频数据包错误条件(即使不应附加此数据或其他元数据)?
#MAX_LENGTH = 100。 如果元数据附加在的末尾之后、是否存在4字节对齐要求 rxDataEntryBuffer ?
提前感谢、
压电执行器