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!