工具/软件:
你好!
设置信息:
- 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 ?
提前感谢、
压电执行器
