您好!
我的 mainThread 作为附件
/*
* ======== txTaskFunction ========
*/
void *mainThread(void *arg0)
{
#if 0
#if (POWER_CONSUMPTION_TEST == 1)
#if 0 // shutdown
DBG ("POWER_CONSUMPTION_TEST\n");
/* Go to shutdown */
Power_shutdown(0, 0);
#else // standby
while (1)
{
GPIO_write(CONFIG_GPIO_OP_GLED, 1);
Task_sleep (_TO_TICK(10000));
GPIO_write(CONFIG_GPIO_OP_GLED, 0);
Task_sleep (_TO_TICK(10000));
}
#endif
#endif
#endif
PowerCC26X2_ResetReason resetReason = PowerCC26X2_getResetReason();
/* If we are waking up from shutdown, we do something extra. */
if (resetReason == PowerCC26X2_RESET_SHUTDOWN_IO)
{
/* Application code must always disable the IO latches when coming out of shutdown */
PowerCC26X2_releaseLatches();
/* In this example we toggle LED1 */
//LED_startBlinking(led1Handle, 500, 3);
DBG ("PowerCC26X2_RESET_SHUTDOWN_IO\n");
running_sec = 0;
}
Semaphore_post(task_start_sem);
RF_Params rfParams;
RF_Params_init(&rfParams);
/* Customize the CMD_PROP_TX command for this application */
RF_cmdPropTx.syncWord = AIOT_SYNC_WORD;
RF_cmdPropTx.pktLen = PAYLOAD_LENGTH;
RF_cmdPropTx.pPkt = packet;
#if (MULTI_THREAD == 0)
RF_cmdNop.startTrigger.triggerType = TRIG_ABSTIME;
#else
RF_cmdNop.startTrigger.triggerType = TRIG_NOW;
#endif
RF_cmdNop.startTrigger.pastTrig = 1;
/* Set up the next pointers for the command chain */
RF_cmdNop.pNextOp = (rfc_radioOp_t*)&RF_cmdPropCs; // carrier sense command
RF_cmdPropCs.pNextOp = (rfc_radioOp_t*)&RF_cmdCountBranch;
RF_cmdCountBranch.pNextOp = (rfc_radioOp_t*)&RF_cmdPropTx;
RF_cmdCountBranch.pNextOpIfOk = (rfc_radioOp_t*)&RF_cmdPropCs;
/* Customize the API commands with application specific defines */
RF_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM;
RF_cmdPropCs.csEndTime = (IDLE_TIME_US + 150) * 4; /* Add some margin */
RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
// change tx power
RF_cmdPropRadioDivSetup.txPower = tx_power_table [nvs_cfg_data.rf_tx_power];
/* Request access to the radio */
#if defined(DeviceFamily_CC26X0R2)
rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioSetup, &rfParams);
#else
rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);
#endif// DeviceFamily_CC26X0R2
/* Set the frequency */
//RF_cmdFs.fractFreq = fract_freq[nvs_rf_channel];
RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
#if (POWER_CONSUMPTION_TEST == 1)
#if 0 // shutdown
DBG ("POWER_CONSUMPTION_TEST\n");
/* Go to shutdown */
Power_shutdown(0, 0);
#else // standby
while (1)
{
GPIO_write(CONFIG_GPIO_OP_GLED, 1);
Task_sleep (_TO_TICK(10000));
GPIO_write(CONFIG_GPIO_OP_GLED, 0);
Task_sleep (_TO_TICK(10000));
}
#endif
#endif
我通过移动 Task_sleep()位置来测试功耗。
当我将 Task_sleep ();在 rf_postCmd ()之前为 Ser freq...时、电流消耗是合理的。
但是,我把 Task_sleep ()放在 rf_postCmd ()之后,电流消耗很高,大约是4mA。
我知道 AFA、在使用 TI_RTOS 时、Task_sleep () l 函数本身就是电源管理。
如果没有、我该怎么做?
我称之为 Power_SHUTDOWN ()、在该位置、电流消耗会变得合理。
Br
保罗
