工具与软件:
我想做一个简单的程序:
从 GPIO 唤醒、发出数据包、进入睡眠状态、等等。
它根据示例 rfPacketTx 和 rfPacketRx 进行工作。
void SendPacket (void)
{
rcl_init();
rclHandle = RCL_open (&R rclClient、&L LRF_config);
rclPacketTxCmdGenericTx.rfFrequency =频率;
/*请尽快启动命令*/
rclPacketTxCmdGenericTx.common.scheduling = RCL_RCL_ Schedule_Now;
rclPacketTxCmdGenericTx.common.status = RCL_20A Status_Idle;
rclPacketTxCmdGenericTx.config.fsOff = FS_OFF;//关闭 FS
/*在最后一条命令完成时触发回调*/
rclPacketTxCmdGenericTx.common.runtime.callback = defaultCallback;
rclPacketTxCmdGenericTx.common.runtime.rclCallbackMask.value = RCL_EventLastCmdDone.value;
/*将 RCL TX 缓冲数据包设置为数据包缓冲*/
txPacket =(RCL_表带* Buffer_Tx)&packet;
//创建具有随机负载的数据包
uint8_t * txData;
txData = RCL_TxBuffer_init (txPacket、NUM_PAD_BYTES、HDR_LEN、MAX_LENGTH);
//在长度字段之前将标头中的数据清零
for (int s = 0;s < LEN_INDEX;s++)
{
txData[s]= 0U;
}
//设置数据包长度
txData[LEN_index]= MAX_LENGTH;
//生成随机有效载荷
对于(int I = HDR_LEN;I < MAX_LENGTH;I++)
{
txData[i]= rand ();
}
//设置要传输的数据包
RCL_TxBuffer_put (&R rclPacketTxCmdGenericTx.txBuffers、txPacket);
rclPacketTxCmdGenericTx.common.status = RCL_20A Status_Idle;
//提交命令
RCL_Command_Submit (rclHandle、&R rclPacketTxCmdGenericTx);
//在命令完成时挂起
RCL_Command_pend (&R rclPacketTxCmdGenericTx);
while (!gCmdDone)
{};
gCMDDONE = 0;
RCL_Close (rclHandle);
}
现在、我想将该程序分为两部分:
以下函数在程序开始时运行一次:
空初始化(空)
{
rcl_init();
rclHandle = RCL_open (&R rclClient、&L LRF_config);
rclPacketTxCmdGenericTx.rfFrequency =频率;
//立即启动命令
rclPacketTxCmdGenericTx.common.scheduling = RCL_RCL_ Schedule_Now;
rclPacketTxCmdGenericTx.common.status = RCL_20A Status_Idle;
rclPacketTxCmdGenericTx.config.fsOff = FS_OFF;//关闭 FS
//在最后一条命令完成时触发回调
rclPacketTxCmdGenericTx.common.runtime.callback = defaultCallback;
rclPacketTxCmdGenericTx.common.runtime.rclCallbackMask.value = RCL_EventLastCmdDone.value;
//将 RCL TX 缓冲数据包设置为数据包缓冲
txPacket =(RCL_表带* Buffer_Tx)&packet;
}
每次由 GPIO 唤醒时运行以下函数:
void SendPacket (void)
{
//创建具有随机负载的数据包
uint8_t * txData;
txData = RCL_TxBuffer_init (txPacket、NUM_PAD_BYTES、HDR_LEN、MAX_LENGTH);
//在长度字段之前将标头中的数据清零
for (int s = 0;s < LEN_INDEX;s++)
{
txData[s]= 0U;
}
//设置数据包长度
txData[LEN_index]= MAX_LENGTH;
//生成随机有效载荷
对于(int I = HDR_LEN;I < MAX_LENGTH;I++)
{
txData[i]= rand ();
}
//设置要传输的数据包
RCL_TxBuffer_put (&R rclPacketTxCmdGenericTx.txBuffers、txPacket);
rclPacketTxCmdGenericTx.common.status = RCL_20A Status_Idle;
//提交命令
RCL_Command_Submit (rclHandle、&R rclPacketTxCmdGenericTx);
//在命令完成时挂起
RCL_Command_pend (&R rclPacketTxCmdGenericTx);
while (!gCmdDone)
{};
gCMDDONE = 0;
}
程序似乎在运行、但它无法正常工作。 从不会接收到包。
每次处理器从睡眠模式唤醒以发出新数据包时、是否必须进行 RCL 初始化?
此致、
Laurent