PM组件的疑问

发表在 PM2019-1-15 14:38 [复制链接] 8 1080

微信截图_20190115142545.png & J7 O  n! a# v6 J
PM组件会在系统唤醒之后进行tick补偿。但是我遇到一种情况,系统是由外部中断唤醒的,在中断的回调里面调用rt_timer_start开启了一个软定时器,假设定时1000个tick,因为中
( G! |" }, ~+ S, T! t. Y6 O0 p断在rt_pm_exit()之前执行,还没有进行tick补偿,之后执行rt_pm_exit(),假设在中断之前3 @+ X" |' J# d
睡眠了2000个tick,那么系统补偿了2000个tick之后,定时器马上timeout了,这就有问题了。5 l6 I9 H2 Q7 i, f4 I( Y
请问这个问题要如何避免?, ]1 C2 e/ N' E( k, j2 {6 b
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-1-15 21:04:58 | 显示全部楼层
看下文档是否能解决你的疑问,https://www.rt-thread.org/docume ... ystem/pm/an0025-pm/
使用道具 举报 回复
发表于 2019-1-16 09:56:42 | 显示全部楼层
楼主可以尝试,在系统睡醒的第一时间,调用下 rt_pm_exit() 函数,将 tick 值补偿上去
使用道具 举报 回复
发表于 2019-2-1 11:13:53 | 显示全部楼层
楼主 请问下 stm32f103 可以使用PM 组件吗?在env里面使能pm组件之后,自己是不是还有写pm的驱动程序啊? 具体怎么使用 可以指点一下吗?谢谢!官方的两篇文章都看过了,也没写具体如何移植在其他BSP上的方法。
使用道具 举报 回复
发表于 2019-2-1 11:16:58 | 显示全部楼层
我这里只是在env上面使能pm request 其他模式 也没看到有什么变化的。 微信图片编辑_20190201111450.jpg 1 v& _0 P# `( b( B
4 s. \7 B' g# R% Q, X) x
麻烦指点一下该如何使用的。谢谢了!
, a# ]4 w2 d  a  N* a
使用道具 举报 回复
发表于 2019-2-1 11:57:47 | 显示全部楼层
应该是没驱动吧
使用道具 举报 回复
发表于 2019-2-14 10:30:02 | 显示全部楼层
看看文档吧,要自己写休眠的驱动的。
使用道具 举报 回复
发表于 2019-3-29 19:45:24 | 显示全部楼层
我今天仔细想了一下,你说的问题并不存在呀,进入低功耗的时候全局中断已经被关闭了,当外部中断唤醒他的时候,此时中断是不能够立刻被响应的,会回到IDLE函数里,执行补偿之后,全局中断开启,才进行相应。因此中断里启动定时器的时候,TICK已经补偿完毕了。
9 L$ F9 A. R4 Q7 ]) [
$ _) P+ x' p% I; s6 ~  E还是说你使用的片子比较特殊一些。
使用道具 举报 回复
发表于 2019-4-3 22:18:49 | 显示全部楼层
水清沙白 发表于 2019-3-29 19:45
. z: Y% q+ l) A5 U# A4 {$ z我今天仔细想了一下,你说的问题并不存在呀,进入低功耗的时候全局中断已经被关闭了,当外部中断唤醒他的时 ...

( W) U4 N( g" c1 V. R# m2 P6 p我用的是3.0的版本,那是还存在这个问题,事实上我截图的的那个代码已结修复了这个BUG
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 7 主题
  2. 274 帖子
  3. 274 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表