挂起的任务 post后为什么不能恢复
while(1) {
/* Wait for event */
uint32_t events = Event_pend(nodeEventHandle, 0, NODE_EVENT_ALL, BIOS_WAIT_FOREVER);
/* If new ADC value, send this data */
if (events & NODE_EVENT_NEW_ADC_VALUE) {
/* Toggle activity LED */
// PIN_setOutputValue(ledPinHandle, NODE_ACTIVITY_LED,!PIN_getOutputValue(NODE_ACTIVITY_LED));
/* Send ADC value to concentrator */
NodeRadioTask_sendAdcData(latestAdcValue);
}
}
}
void adcCallback(uint16_t adcValue)
{
/* Save latest value */
latestAdcValue = adcValue;
/* Post event */
Event_post(nodeEventHandle, NODE_EVENT_NEW_ADC_VALUE);
}
你的程序能跑到Event_post语句吗?
另外,关注一下while(1)所在的task的优先级。
Event_post 是可以到的。
问题应该出在NodeRadioTask_sendAdcData(latestAdcValue);
这个显现很奇怪,我跑DEMO没问题的,我在原来的DEMO上修改了一下,增加了LBT功能,就出现了这种问题。
而且这个问题很奇怪,我每5秒发送一次数据,正常发送53次后,就会停止发送,Event_post 还是会没5S到一次的。这个过程会持续14分钟这样,然后就会恢复发送,发送53次后,又会停止发送。不知道问题出在哪里?另外追问一个问题,怎样在CCS里看挂起的任务
那你就要仔细查看一下 你自己修改的部分了。
不是挂起的任务不能恢复,而是因为程序卡在某个语句无法继续往下执行,而走不到while(1)下一次循环的Event_pend()。
通过Tools - RTOS Object View,打开ROV窗口,可以查看所有task的状态,是ready、blocked、running等。
程序卡在某个语句后,我怎样确定这个语句?有什么方法?
还有一个疑问,就是为什么程序有问题还能够正常发送53次,而且卡主只后还能自动恢复?
下边是我增加LBT功能,修改的代码,麻烦看一下有没有问题
RF_cmdNop.pNextOp = (rfc_radioOp_t*)&RF_cmdPropCs;
RF_cmdPropCs.pNextOp = (rfc_radioOp_t*)&RF_cmdCountBranch;
RF_cmdCountBranch.pNextOp = (rfc_radioOp_t*)&EasyLink_cmdPropTx;
RF_cmdCountBranch.pNextOpIfOk = (rfc_radioOp_t*)&RF_cmdPropCs;
RF_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM;
RF_cmdPropCs.csEndTime = (IDLE_TIME_US + 150) * 4;
RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
// asyncCmdHndl = RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropTx,
// RF_PriorityNormal, txDoneCallback, EASYLINK_RF_EVENT_MASK);
// RF_runCmd(rfHandle, (RF_Op*)&RF_cmdNop, RF_PriorityNormal, &Wcallback, 0);
RF_runCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropTx, RF_PriorityNormal, &Wcallback, 0);
status = EasyLink_Status_Success;
RF_cmdNop.status = IDLE;
RF_cmdPropCs.status = IDLE;
RF_cmdCountBranch.status = IDLE;
RF_cmdPropTx.status = IDLE;
RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
Semaphore_post(busyMutex);
return status;