This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OSAL问题咨询

Hi! TI的技术支持:

      为了跟踪睡眠的问题,我在void osal_pwrmgr_powerconserve( void )中添加了点亮LED和关闭LED的代码。

if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )//省电模式
{
HalLedSet(HAL_LED_2,HAL_LED_MODE_OFF);

...

}

else

{

HalLedSet(HAL_LED_2,HAL_LED_MODE_ON);//不省电模式

}

然后我在用户任务中调用void osal_pwrmgr_device(PWRMGR_ALWAYS_ON )。

按道理来说,系统电源会一直保持ALWAYS_ON,并且一直电量LED2.

但是,事实是,点亮一小段时间后就熄灭了。——(osal_pwrmgr_device()这个函数我只调用一次)。

也就是说,可能在其他不了解的地方,被熄灭了LED。

后来我屏蔽了const pTaskEventHandlerFn tasksArr[]中的任务及osalInitTasks();中对应的初始化任务。

发现是LL_ProcessEvent()任务造成的。我想了解下,为何这个任务会关闭我的LED呢?

我只要屏蔽这个任务,就正常了。。。

  • shaokai,

    用的啥工程?

    有连接还是没连接?

  • Yan

          我用的是simpleBLEPeripheral工程。上电即如此,没有连接。。。

          以下是我修改过的所有地方,其他不变:

    1. uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )中

    {

       ...

    if ( events & SBP_START_DEVICE_EVT )
    {

    ...

    osal_pwrmgr_device(PWRMGR_ALWAYS_ON);

    }

    }

    2. void osal_pwrmgr_powerconserve( void )中

    {

    if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )
    {
    HalLedSet(HAL_LED_2,HAL_LED_MODE_OFF);

    ...

    }

    else

    {

    HalLedSet(HAL_LED_2,HAL_LED_MODE_ON);

    }

    }

    希望你能帮我验证下,这对我们分配IO口很重要!谢谢。

  • 又要沉了,不要沉啊,不要啊。。。

  • shaokai,

    根据你的要求, 在main()里面,把 osal_pwrmgr_device(PWRMGR_BATTERY); 改成 osal_pwrmgr_device(PWRMGR_ALWAYS_ON);

  • Yan

          你确定有效吗?我没试出效果哦!

          而且我觉得也说不通啊,main()里的osal_pwrmgr_device()在前, uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )中

    的 if ( events & SBP_START_DEVICE_EVT )在后。我在后面的处理事件里把它设为 osal_pwrmgr_device(PWRMGR_ALWAYS_ON);应该没啥不一样的。

  • shaokai,

    系统有个机制,在每reset,或者从PM3 醒来后,等到32K 晶振稳定之后(这个过程需要几百毫秒,在你收到SBP_START_DEVICE_EVT 之后才完成),都会自动把模式设置成BATTERY 模式。

    所以,建议你,系统初始化完成1秒之后,任何时间,当你需要UART的时候,启动一个timer, 不要让系统进入PM3 模式,然后再用POWER_ALSWAYS_ON,这样就不会存在从PM3 醒来,系统模式重新被设置的问题了。

    当然,UART用完之后,记得停止那个Timer,能让系统再次进入PM3. 

    不一定一次性成功哈,你先照我的方法多试试几种可能性。

  • Thanks Yan.

        昨天你的同事已经为我解答这个问题了,还是感谢你热心的解答。谢谢~

    I will try again!