This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1312R:RFQueue 和 RFC_dataEntryPartial_t

Guru**** 2487425 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1176806/cc1312r-rfqueue-and-rfc_dataentrypartial_t

器件型号:CC1312R

您好!

我一直在使用 RFC_dataEntryPartial_t 来获取消息并在接收到部分数据包后设置数据包的长度字节。 当我使用示例中包含的 RFQueue.h 文件中提供的函数时、我会得到非常奇怪的结果、即数据包被错误地放置在 rxData 区域内。

我尝试在不使用 RFQueue.h 文件的情况下实现相同的缓冲区、并且成功了、我认为问题与 DataQueue 内各个缓冲区的对齐有关。

与我自己设置函数相比、使用 RFQueue 函数时是否缺少任何明显的东西?

共享定义

#define RF_queue_data_entry_header_size 12.
定义 RF_queue_queue_align_padding (长度)(4 -(长度+ RF_queue_data_entry_header_size)% 4)//填充偏移
#define RF_queue_data_entry_buffer_size (NumEntryDataSizeAppendedBytes)\
(NumEntry *(RF_queue_data_entry_header_size + DataSize + AppendedBytes + RF_queue_queue_align_padding (DataSize + AppendedBytes))))
#define MAX_LENGTH 255 /*对讲机将接受的最大长度字节*/
#define NUM_DATA_ENTRIES 2 //注意:目前仅支持两个数据条目*/
#define NUM_SUBSTED_Bytes 1 //数据条目数据字段将包含:\
* 1标头字节(RF_cmdPropRx.rxConf.bIncludeHdr = 0x1)\
*最多255个有效载荷字节*/
#define length_position 4.

修改的 RFQueue 函数:

uint8_t

RFDefineQueueQueue (__attribute__((未使用)) dataQueue_t* DataQueue_puint8_t* buf_puint16_t BufLenuint8_t NumEntryuint16_t Length)

if (BufLen <(NumEntry *(Length + RF_queue_data_entry_header_size + RF_queue_queue_align_padding (Length)))){

/*队列不适合缓冲区*/

返回(1);

/* 4字节对齐需要填充? *

uint8_t 焊盘= 4 -(长度+ RF_queue_data_entry_header_size)% 4);

/*设置数据条目公共配置*/

uint8_t* FirstEntry_p = buf_p;

对于(int64_t Index = 0;Index < NumEntry;Index++){

buf_p = FirstEntry_p +(索引*(RF_queue_data_entry_header_size +长度+焊盘));

((RFC_DataEntry_t*)buf_p)->status = data_entry_pending;//挂起-启动状态

((RFC_DataEntry_t*) buf_p)->config.type = data_entry_type_partial;//对于 C/T 模式选择,data_entry_type_partial;

((RFC_DataEntry_t*)buf_p)->config.lenSz = 0//数据中没有长度指示符字节

((RFC_DataEntry_t*) buf_p)->config.irqIntv = length_position;

((RFC_DataEntry_t*)buf_p)->length =长度;//数据字段的总长度

((RFC_dataEntryPartial_t*)buf_p)->pNextEntry =&(((RFC_dataEntryPartial_t*)buf_p)->rxData)+ Length + Pad;

/*将循环设置为最后。\n 下一页->第一页*/

((RFC_DataEntry_t*)buf_p)->pNextEntry = FirstEntry_p;

/*创建数据条目队列并配置循环缓冲区数据条目*/

DataQueue_p->pCurrent Entry = FirstEntry;

DataQueue_p->pLastEntry = NULL

/*将读取指针设置为第一个条目*/

ReadEntry_p =(RFC_dataEntryPartial_t*) FirstEntry_p;

返回(0);

与我自己在代码中设置的数组相比:

静态 uint8_t rxDataEntryBuf0[rf_queue_data_entry_header_size + MAX_length + length_position + NUM_apped_bytes]__attribute_(aligned (4)));

静态 uint8_t rxDataEntryBuf1[rf_queue_data_entry_header_size + MAX_length + length_position + NUM_apped_bytes]__attribute_(aligned (4)));

RFC_dataEntryal_t* partialReadEntry0 =(RFC_dataEntryPartial_t*)&rxDataEntryBuf0;

RFC_dataEntryal_t* partialReadEntry1 =(RFC_dataEntryPartial_t*)&rxDataEntryBuf1;

RFC_dataEntryPartial_t* currentReadEntry =(RFC_dataEntryPartial_t*)&rxDataEntryBuf0;

然后在函数内部

partialReadEntry0->length = MAX_LENGTH + LENGTH_POSITION + NUM_SUBSTED_BYIES + 4//确保在一个数据条目中有足够的空间容纳完整的数据包。

//此长度字段后面的字节数

//+ 4是为 pktStatus (2字节)和 nextIndex (2字节)腾出空间

partialReadEntry0->config.irqIntv = length_position;

partialReadEntry0->config.type = data_entry_type_partial;

partialReadEntry0->status = data_entry_pending;

partialReadEntry1->length = MAX_LENGTH + LENGTH_POSITION + NUM_SUBSTED_BYIES + 4//确保在一个数据条目中有足够的空间容纳完整的数据包。

//此长度字段后面的字节数

//+ 4是为 pktStatus (2字节)和 nextIndex (2字节)腾出空间

partialReadEntry1->config.irqIntv = length_position;

partialReadEntry1->config.type = data_entry_type_partial;

partialReadEntry1->status = data_entry_pending;

partialReadEntry1->pNextEntry =(uint8_t*) partialReadEntry0;

partialReadEntry0->pNextEntry =(uint8_t*) partialReadEntry1;

dataQueue.pCurrent Entry=(uint8_t*) partialReadEntry0;

dataQueue.pLastEntry =

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  

    我们的射频队列实施仅支持常规数据条目、据我所知、没有计划添加对不同类型数据条目的支持。

    如果我理解正确、那么在您自己设置数据条目时、您就已经准备好并运行了所有内容。 您不能仅仅使用该实现方案有什么原因吗?

    我认为、如果我们能够深入研究这个问题、最好的做法是、如果您可以根据 rfPacketRX 示例提供一个小型演示代码、在该示例中、您已经实现了上述更改。

    如果我们可以运行一些代码来演示您遇到的问题、我们可以在这里更轻松地进行调试。

    BR

    Siri