Thread 中讨论的其他器件:SYSBIOS、 TMS320F28379D
你(们)好
你好。
我的客户跟进上一个帖子
信息:
因此、在过去的2周内、我尝试使用 rfPacketRx 示例、并建议您替换发布和打开 rfHandle 的位置。
我还尝试了对信标函数的集成、但是、我发现我的程序仍然在停止、并且在首次加载数据后没有接收到任何内容。
当我查看它的停止位置时、它位于276行(请参阅随附的代码)、程序进入未捕获的错误事件状态、如 rf_mailbox.h 中所述
您知道我可以通过什么方法解决这个问题吗?
/*
*版权所有(c) 2019、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*
/***** 包括***** /
/*标准 C 库*/
#include
/* TI 驱动程序*/
#include
#include
//#include
#include
#include
/* Driverlib 头文件*/
#include DeviceFamily_constructPath (driverlib/rf_prop_mailbox.h)
/*板头文件*/
#include "Board.h"
/*应用程序头文件*/
#include "RFQueue.h"
#include "smartrf_settings/smartrf_settings.h"
/***** 定义了***** /
/*数据包 RX 配置*/
#define DATA_Entry_header_size 8 //通用数据条目的恒定标头大小*/
#define MAX_LENGTH 30 //对讲机将接受的最大长度字节*/
#define NUM_DATA_ENTRIES 2 //注意:目前仅支持两个数据条目*/
#define NUM_SUBSTED_Bytes 2 //数据条目数据字段将包含:
* 1标头字节(RF_cmdPropRx.rxConf.bIncludeHdr = 0x1)
*最多30个有效载荷字节
* 1个状态字节(RF_cmdPropRx.rxConf.bAppendStatus = 0x1)*
//静态信标_Structt 信标;
静态 Semaphore_handle semHandle;
//sem_t semHandle;
uint32_t cmdStatus;
/***** 原型***** /
静态空回调(rf_handle h、rf_CmdHandle ch、rf_EventMask e);
/***** 变量声明***** /
静态 RF_Object rfObject;
静态 RF_Handle rfHandle;
/*引脚驱动器手柄*/
静态 PIN_Handle ledPinHandle;
静态 PIN_STATE ledPinState;
int potatotrack = 0;
/*缓冲区,包含用于接收数据的所有数据条目。
需要* pragma 以确保此缓冲区是4字节对齐的(RF 内核的要求)*/
#if defined (__TI_Compiler_version__)
#pragma DATA_ALIGN (rxDataEntryBuffer、4);
静态 uint8_t rxDataEntryBuffer[rf_queue_data_entry_buffer_size (
num_data_entries、max_length、NUM_apped_Bytes)];
#Elif defined (_IAR_systems_icc_)
#pragma DATA_alignment= 4.
静态 uint8_t
rxDataEntryBuffer[RF_queue_data_entry_buffer_size (NUM_DATA_entries、
MAX_LENGTH、
num_apped_Bytes)];
#Elif defined (_GNU_)
静态 uint8_t
rxDataEntryBuffer[RF_queue_data_entry_buffer_size (NUM_DATA_entries、
MAX_LENGTH、
num_apped_bytes)]
__attribute__((aligned(4)));
其他
错误不支持此编译器。
#endif
/*接收用于射频内核的数据队列以填充数据*/
静态 dataQueue_t dataQueue;
静态 RFC_dataEntryGeneral_t* currentDataEntry;
静态 uint8_t packetLength;
静态 uint8_t* packetDataPointer;
静态 uint8_t packet[MAX_LENGTH + NUM_SUBSTED_BYTES - 1];//长度字节存储在单独的变量中*/
/*
*应用 LED 引脚配置表:
*-所有 LED 板 LED 均熄灭。
*
PIN_Config pinTable[]={
Board_PIN_LED2 | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull
| PIN_DRVSTR_MAX、
PIN_TERMINATE };
/***** 函数定义***** /
void * mainThread (void * arg0)
{
// SEM_INIT (semHandle、0、0);
Potatotrack = 1;
rf_params rfParams;
rf_params_init (&rfParams);
Potatotrack = 2;
/*打开 LED 引脚*/
ledPinHandle = PIN_OPEN (&ledPinState、pinTable);
if (ledPinHandle ==空)
{
while (1)
;
}
Potatotrack = 3;
if (RFQueue_defineQueue (&dataQueue、rxDataEntryBuffer、
sizeof (rxDataEntryBuffer)、
num_data_entries、
max_length + NUM_apped_bytes))
{
/*未能为所有数据条目分配空间*/
while (1)
;
}
Potatotrack = 4;
/*根据应用需求修改 CMD_PROP_RX 命令*/
/*为接收的数据设置数据实体队列*/
RF_cmdPropRx.pQueue =&dataQueue;
/*丢弃来自 Rx 队列的已忽略的数据包*/
rf_cmdProprx.rxConf.bAutoFlushIgnored = 1;
/*丢弃来自 Rx 队列的 CRC 错误数据包*/
rf_cmdPropRx.rxConf.bAutoFlushCrcErr = 1;
/*实施数据包长度过滤以避免 PROP_ERROR_RXBUF */
RF_cmdPropRx.maxPktLen = MAX_LENGTH;
rf_cmdPropRx.pktConf.bRepeatOk = 1;
rf_cmdPropRx.pktConf.bRepeatNok = 1;
Potatotrack = 5;
/*请求对讲机的访问*/
#IF 已定义(DeviceFamily_CC26X0R2)
rfHandle = RF_OPEN (&rfObject、&RF_prop、(RF_RadioSetup*)&RF_cmdPropRadioSetup、&rfParams);
其他
rfHandle = rf_open (&rfObject、&rf_prop、
(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);
#endif// DeviceFamily_CC26X0R2
Potatotrack = 6;
/*设置频率*/
rf_postCmd (rfHandle、(rf_Op*)&rf_cmdf、rf_PriorityNormal、NULL、0);
Potatotrack = 61;
/*进入 RX 模式并一直保持在 RX 中*/
RF_EventMask terminationReason = RF_postCmd (rfHandle、
(RF_OP*)&RF_cmdPropRx、
RF_PriorityNormal、回调(&R)、
RF_EventRxEntryDone);
Potatotrack = 7;
交换机(终端重新接通)
{
案例 RF_EventLastCmdDone:
//独立无线电操作命令或最后一个无线电
//链中的操作命令已完成。
中断;
案例 RF_EventCmd 取消:
//命令在启动前被取消;这可能是导致的
//按 RF_cancelCmd ()或 RF_flushCmd ()。
中断;
案例 RF_EventCmdAborted:
//由 RF_cancelCmd ()或导致命令终止突然
// rf_flushCmd ()。
中断;
案例 RF_EventCmdStopped:
// RF_cancelCmd ()或导致正常命令终止
// rf_flushCmd ()。
中断;
默认值:
//未捕捉错误事件
while (1)
;
}
Potatotrack = 8;
cmdStatus =((volatile RF_OP*)&RF_cmdPropRx)->status;
交换机(cmdStatus)
{
案例 PROP_DONE_OK:
//接收到的数据包,CRC 正常
Potatotrack = 81;
中断;
PROP_DONE_RXERR 案例:
//接收到的数据包带有 CRC 错误
Potatotrack = 82;
中断;
案例 PROP_DONE_RXTIMEOUT:
//同步搜索时观察到的结束触发
Potatotrack = 83;
中断;
案例 PROP_DONE_break:
//在命令为时接收数据包时观察到结束触发
//配置的 endType 设置为1
Potatotrack = 84;
中断;
案例 PROP_DONE_ENDended:
//观察完结束触发后收到的数据包;如果
//命令配置为 endType 设置为0,即结束触发器
//不会终止正在进行的接收
Potatotrack = 85;
中断;
案例 PROP_DONE_STOPPED:
//命令启动后接收到 CMD_STOP,如果发现 SYNC,
//数据包被接收
Potatotrack = 86;
中断;
案例 PROP_DONE_ABORT:
//命令启动后收到 CMD_ABORT
Potattrack = 87;
中断;
PROP_ERROR_RXBUF 案例:
//没有足够大的 RX 缓冲区来存放处可用的接收数据
//数据包开始
Potatotrack = 88;
中断;
PROP_ERROR_RXFULL 案例:
//在接收部分读取期间超出 RX 缓冲区空间
Potattrack = 89;
中断;
案例 PROP_ERROR_PAR:
//观察到非法参数
Potatotrack = 810;
中断;
PROP_ERROR_NO_SETUP 案例:
//在受支持的中未设置无线电的情况下发送命令
//模式使用 CMD_PROP_RADIO_SETUP 或 CMD_RADIO_SETUP
Potatotrack = 811;
中断;
案例 PROP_ERROR_NO_FS:
//发送命令而不对合成器进行编程
Potatotrack = 812;
中断;
案例 PROP_ERROR_RXOVF:
操作期间观察到// RX 溢出
Potatotrack = 813;
中断;
默认值:
//未捕获的错误事件-这些可能来自
// rf_mailbox.h 中定义的状态池
Potattrack = 814;
while (1)
;
}
Potatotrack = 9;
while (1)
{
Semaphore_pend (semHandle、BIOS_wait_forever);
}
}
空回调(rf_handle h、rf_CmdHandle ch、rf_EventMask e)
{
Potattrack = 91;
IF (e 和 RF_EventRxEntryDone)
{
Potatotrack = 10;
/*切换引脚以指示 RX */
PIN_setOutputValue (ledPinHandle、Board_PIN_LED2、
!PIN_getOutputValue (Board_PIN_LED2);
Potatotrack = 11;
/*获取当前未处理的数据输入*/
currentDataEntry = RFQueue_getDataEntry();
Potatotrack = 12;
/*处理位于¤tDataEntry->data 的数据包数据:
*-长度是当前配置的第一个字节
*-数据从第二个字节开始*/
packetLength =*(uint8_t*)(¤tDataEntry ->数据);
packetDataPointer =(uint8_t*)(¤tDataEntry->data+1);
Potatotrack = 13;
/*将有效载荷+状态字节复制到数据包变量*/
memcpy (packet、packetDataPointer、(packetLength + 1));
Potatotrack = 14;
RFQueue_nextEntry();
Potatotrack = 15;
Semaphore_post (semHandle);
}
}
此致
Aosker