关于CC2541POWER_SAVING的睡眠定时器事件
作为新手,我查找睡眠定时事件的过程是这样的
与查找外围事件一样,我也是从初始化部分开始查找,首先是MAIN中找到
/* Initialize the operating system */
osal_init_system();
再进去找到任务初始化
// Initialize the system tasks.
osalInitTasks();
再进,找到硬件抽象层的初始化
/* Hal Task */
Hal_Init( taskID++ );
再进,发现里面没有设置要执行的事件,
再在下面
uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )
事件处理中找到事件
if ( events & HAL_SLEEP_TIMER_EVENT )
{
halRestoreSleepLevel();
}
其中halRestoreSleepLevel();即为定时器的睡眠时间,要用时在Hal_Init( taskID++ );中
使用osal_set_event( Hal_TaskID, HAL_SLEEP_TIMER_EVENT);来设置睡眠定时器事件。
不知道我的想法是否正确,烦请大大们指正!
你不需要手工设置事件标志,系统hal会自动处理的。你可以在iar工程配置中找到POWER_SAVING宏,使能这个宏就启用了省点模式。另,在ble—stack手册中有电源管理的详细说明,仔细看一下
我的意思是设置当系统进入PM2时的睡眠时间,比如说我想让系统运行一段时间后睡眠一会再运行,你说的自动处理能说明系统具体怎么处理的吗,感觉没有睡觉时间。
只有系统所有应用都同意进入休眠模式,协议栈才会真正进入休眠。你说感觉没进入休眠,估计是某个任务hold住mcu了,仔细检查一下检查。至于 休眠-->唤醒——>休眠 ,你可以在休眠前设置一个定时事件,然后进入休眠模式,等时间到了,他会自动唤醒mcu的
我就是在找这个定时事件、时间在哪儿设置,是不是我上面说的地方设置的,还是只要是定时,哪儿都行,
还有就是开启POWER_SAVING后,在hal_sleep.c中找到,
HalLedEnterSleep();
意思是关闭所有LED后进入低功耗模式吧,也就是说进入和退出低功耗模式是以关闭和打开LED为标志的,但是我设置了定时事件后,LED灯亮灭的间隔时间依然不变,就是不断地亮灭,是不是就是说在不断地进入和退出低功耗模式呢。
实在不知道这个低功耗怎么用的,烦请指正。。。
您好,我想问一下,PM2模式被唤醒后进入什么地方执行程序,比如我想1分钟唤醒一下,唤醒后发送一条数据出去,这个唤醒后到什么地方发送这个数据,发送完成后继续休眠 我使用的是CC2530 协议栈使用的是ZSTACK CC2530 2.5.1A