TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310 资源互斥问题

我正在用信号量对RF内核这个资源进行保护,但是结果不太理想。目的是另一个任务通过串口可能随时修改工作频段,为了避免命令执行的冲突,所以有了下面的代码。

/* WOR-RX 任务  优先级=2 */
while(1)
{/* Set next wakeup time in the future */RF_cmdPropRxSniff.startTime += WOR_WAKE_UP_INTERVAL_RAT_TICKS(SetPara.wakeTime);/* Get access to resource */Semaphore_pend(semHandle,100);/* Schedule RX */rxCmdhandle = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdPropRxSniff, RF_PriorityNormal, &callback, RF_EventRxEntryDone);RF_pendCmd(rfHandle, rxCmdhandle, 0);/* Unlock resource */Semaphore_post(semHandle);
}

/* 串口任务  优先级=4 */
while(1)
{当接收到指令;if(Semaphore_pend(semHandle, 0) != TRUE){RF_Stat status = RF_cancelCmd(rfHandle, rxCmdhandle, 1);if((status == RF_StatInvalidParamsError) || (status == RF_StatError)) return FALSE;RF_cmdFs.frequency = (uint16_t)((Frequency.output * 1000U) / 1000000);RF_cmdFs.fractFreq = (uint16_t) (((uint64_t)SetPara.frequency - ((uint64_t)RF_cmdFs.frequency * 1000000)) * 65536 / 1000000);/* Set frequency */RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);if(RF_cmdFs.status != 0x0400) return FALSE;}
}

在串口接收到指令后,如果获取信号量失败则认为RF_cmdPropRxSniff命令在占用资源,后面执行删除命令。结果是刚下完程序第一个发指令RF_cancelCmd()返回函数执行正确,但是之后的值一直是0x04。请问这是什么原因?

user4959119:

回复 Felix ZF:

是的,我也参考了,但是RF_cancelCmd(rfHandle, asyncCmdHndl, 0) == RF_StatSuccess 这条代码,除了我第一次上电后能返回0x83,之后状态值都是0x04,WOR任务也被卡死了,你知道是哪里操作不合理吗?

Felix ZF:

回复 user4959119:

1. 调用rf_cancelcmd之前检查参数,参照

if (!EasyLink_CmdHandle_isValid(asyncCmdHndl))
    {
        return EasyLink_Status_Aborted;
    }

2. 串口任务中的while(1)中,return FALSE可能是程序卡死的原因

user4959119:

回复 Felix ZF:

检查了,貌似不起作用。return不是在任务中返回的,是我封装的一个函数,代码里没展现出来。这个问题可难倒我了。。

user4959119:

回复 user4959119:

问一下RF_contrl是不是可以更新所有的RF命令参数?

赞(0)
未经允许不得转载:TI中文支持网 » CC1310 资源互斥问题
分享到: 更多 (0)