微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 挂起的任务 post后为什么不能恢复

挂起的任务 post后为什么不能恢复

时间:12-23 整理:3721RD 点击:


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;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top