diff options
| author | 张世争 <[email protected]> | 2020-11-23 21:41:19 +0800 |
|---|---|---|
| committer | 张世争 <[email protected]> | 2020-11-23 21:41:19 +0800 |
| commit | 945053a833cafc9b608a552db252253dbe6657c4 (patch) | |
| tree | 07613605ec35f8c92648d8946d67ac1cbb45b53d /components/drivers | |
| parent | b7dd3cae098e3427443d4238c883ca7631980ce8 (diff) | |
[components][PM][Update]优化PM电源模式选择
Diffstat (limited to 'components/drivers')
| -rw-r--r-- | components/drivers/pm/pm.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/components/drivers/pm/pm.c b/components/drivers/pm/pm.c index dd7cc2ae63..f9190ae9ef 100644 --- a/components/drivers/pm/pm.c +++ b/components/drivers/pm/pm.c @@ -8,6 +8,7 @@ * 2012-06-02 Bernard the first version * 2018-08-02 Tanek split run and sleep modes, support custom mode * 2019-04-28 Zero-Free improve PM mode and device ops interface + * 2020-11-23 zhangsz update pm mode select */ #include <rthw.h> @@ -214,8 +215,6 @@ static void _pm_change_sleep_mode(struct rt_pm *pm, rt_uint8_t mode) */ void rt_system_power_manager(void) { - rt_uint8_t mode; - if (_pm_init_flag == 0) return; @@ -223,8 +222,7 @@ void rt_system_power_manager(void) _pm_frequency_scaling(&_pm); /* Low Power Mode Processing */ - mode = _pm_select_sleep_mode(&_pm); - _pm_change_sleep_mode(&_pm, mode); + _pm_change_sleep_mode(&_pm, _pm.sleep_mode); } /** @@ -248,6 +246,7 @@ void rt_pm_request(rt_uint8_t mode) pm = &_pm; if (pm->modes[mode] < 255) pm->modes[mode] ++; + _pm_select_sleep_mode(pm); rt_hw_interrupt_enable(level); } @@ -273,6 +272,7 @@ void rt_pm_release(rt_uint8_t mode) pm = &_pm; if (pm->modes[mode] > 0) pm->modes[mode] --; + _pm_select_sleep_mode(pm); rt_hw_interrupt_enable(level); } @@ -516,6 +516,10 @@ void rt_system_pm_init(const struct rt_pm_ops *ops, pm->device_pm = RT_NULL; pm->device_pm_number = 0; +#if IDLE_THREAD_STACK_SIZE <= 256 + #error "[pm.c ERR] IDLE Stack Size Too Small!" +#endif + _pm_init_flag = 1; } |
