void rt_pm_request(rt_uint8_t mode) { rt_base_t level; struct rt_pm *pm; if (_pm_init_flag == 0) return; if (mode > (PM_SLEEP_MODE_MAX - 1)) return; level = rt_hw_interrupt_disable(); pm = &_pm; if (pm->modes[mode] < 255) pm->modes[mode] ++;//将对应的模式...
PM_SLEEP_MODE_NONE=0,PM_SLEEP_MODE_IDLE,PM_SLEEP_MODE_LIGHT,PM_SLEEP_MODE_DEEP,PM_SLEEP_MODE_STANDBY,PM_SLEEP_MODE_SHUTDOWN, 如果请求了一个rt_pm_sleep_idle_request(PM_BOARD_ID),这里的PM_BOARD_ID为 2,IDLE模式,所以| Mode[1] : 0 | 0x00000004 |,这里的4,其实是1<<2,ID从0 开始 ...
void rt_pm_sleep_light_request(rt_uint16_t module_id); /* 请求不睡眠:light模式 */ void rt...
在 IoT Board 里PM_SLEEP_MODE_TIMER模式可以满足要求,所以我们在创建软件定时器成功之后,使用rt_pm_request(PM_SLEEP_MODE_TIMER)请求 TIMER 休眠模式。以下是示例代码: 1#define TIMER_APP_DEFAULT_TICK (RT_TICK_PER_SECOND * 2) 2 3staticrt_timer_t timer1; 4 5staticvoid _timeout_entry(void *para...
为了在休眠模式下,OS Tick 也能正常工作,我们希望进入的休眠模式也有休眠定时器。在 IoT Board 里PM_SLEEP_MODE_TIMER模式可以满足要求,所以我们在创建软件定时器成功之后,使用rt_pm_request(PM_SLEEP_MODE_TIMER)请求 TIMER 休眠模式。以下是示例代码:
问题:看你给的例子rtt_pm2 测试程序里没有PM_SLEEP_MODE_DEEP? 答:这是新PM框架的使用方法。 系统刚上电时,如果开启了PM框架(初始化),系统上电功耗模式需要有一个预设模式。 新PM框架,明确规定,没有任何request,就要进入更低功耗模式(默认为DEEPSLEEP),上电后,没有任何业务request,会造成无任何request,若进入...
pm组件的控制块: static struct rt_pm _pm; API接口: 请求休眠模式 void rt_pm_request(uint8_t sleep_mode); sleep_mode 取以下枚举值: enum { /* sleep modes */ PM_SLEEP_MODE_NONE = 0, /* 活跃状态 */ PM_SLEEP_MODE_IDLE, /* 空闲模式(默认) */ ...
();rt_pm_request(PM_SLEEP_MODE_DEEP);while(1){if(rt_event_recv(wakeup_event,WAKEUP_EVENT_BUTTON,RT_EVENT_FLAG_AND|RT_EVENT_FLAG_CLEAR,RT_WAITING_FOREVER,RT_NULL)==RT_EOK){rt_pm_request(PM_SLEEP_MODE_NONE);rt_pin_mode(PIN_LED_R,PIN_MODE_OUTPUT);rt_pin_write(PIN_LED_R,0);...
退出休眠的方法是调用rt_pm_request(PM_SLEEP_MODE_NONE)rtc时钟唤醒api如下:void rtc_timer_start(...
特殊情况下,比如某个阶段并不允许系统进入更低的功耗模式,此时可以通过 rt_pm_request 和 rt_pm_release 对该过程进行保护。如 I2C 读取数据期间,不允许进入深度睡眠模式(可能会导致外设停止工作),因此可以做如下处理: /* 请求轻度睡眠模式(I2C外设该模式下正常工作) */rt_pm_request(PM_SLEEP_MODE_LIGHT);/...