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

在hal_sleep.c 的hal_sleep()加了一句打印

void halSleep( uint32 osal_timeout )
{

 halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;
 printf("sp %d %lu\n", halPwrMgtMode, timeout);

}

打印如下,怎么进入了PM3还会一直唤醒?

[14:08:20.852] sp 3 0

sp 3 0

sp 3 0

[14:08:20.864] sp 3 0

sp 3 0

[14:08:20.875] sp 3 0

sp 3 0

[14:08:20.895] sp 3 0

[14:08:20.901] sp 3 0

sp 3 0

[14:08:20.909] sp 3 0

[14:08:20.925] sp 3 0

[14:08:20.937] sp 3 0

sp 3 0

sp 3 0

….省略几千行打印

YiKai Chen:

z-stack不會進PM3,只會進PM2,如果有事件就會被喚醒,比如說polling

one Man:

回复 YiKai Chen:

-DPOLL_RATE=0 ,我的PollRate为0

one Man:

回复 YiKai Chen:

唤醒得很频繁,几毫秒就醒来一次

YiKai Chen:

回复 one Man:

只要有timer event就會被喚醒不是只有polling

one Man:

回复 YiKai Chen:

我在void osal_run_system( void )加了红色部分代码,并没有任何事件产生。

#if defined( POWER_SAVING ) && !defined(USE_ICALL)  else  // Complete pass through all task events with no activity?  {     for(uint8 i=0; i<tasksCnt ; i++)    {        for(uint8 j=0; j<16 ; j++)        {           if(osal_get_timeoutEx( i, BV(j)))           {             printf("%d %04x, %lu\n", i, BV(j), osal_get_timeoutEx( i, BV(j)));             break;           }        }    }        osal_pwrmgr_powerconserve();  // Put the processor/system into sleep  }#endif

YiKai Chen:

回复 one Man:

改成下面的程序碼試試

#if defined( POWER_SAVING ) && !defined(USE_ICALL)  else  // Complete pass through all task events with no activity?  {     printf("%d %04x, %lu\n", i, BV(j), osal_get_timeoutEx( i, BV(j)));    osal_pwrmgr_powerconserve();  // Put the processor/system into sleep  }#endif

one Man:

回复 YiKai Chen:

这样  i,j 并没有用。

发现其实是

if (halSleepPconValue != 0 && MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS)

这句代码问题,返回的好像并不是Success。

改为如下却可以,不知道为什么。

  halIntState_t ien0, ien1, ien2;

  uint8 mac=1;

   HAL_ASSERT(HAL_INTERRUPTS_ARE_ENABLED());

   HAL_DISABLE_INTERRUPTS();

    mac = MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP);

    printf("v %d, %d\n", halSleepPconValue, mac);

   /* always use "deep sleep" to turn off radio VREG on CC2530 */

   if (halSleepPconValue != 0 && mac == MAC_SUCCESS)

  {

   …

  }

YiKai Chen:

回复 one Man:

請問你想要達成的目的是什麼?

one Man:

回复 YiKai Chen:

就是未入网的时候进入deep sleep

YiKai Chen:

回复 one Man:

如果你使能POWER_SAVING,未入网的时候就會进入PM2

赞(0)
未经允许不得转载:TI中文支持网 » 在hal_sleep.c 的hal_sleep()加了一句打印
分享到: 更多 (0)