搜索
bottom↓
回复: 16

ARM裸奔想降低CPU的使用率和功耗,有什么方法替代while1来轮询吗?

[复制链接]

出0入91汤圆

发表于 2022-4-12 14:13:29 | 显示全部楼层 |阅读模式
本帖最后由 ackyee 于 2022-4-12 14:24 编辑

如题,想到主函数 不跑, 让 中断来进行轮询,  但是这样主函数至少得写个 while(1);对吧, 那请问while(1) 会消耗资源,造成发热吗? 那有没有其他的类似 wait 的方式 但又不消耗资源的呢  

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出50入0汤圆

发表于 2022-4-12 14:18:10 来自手机 | 显示全部楼层
while1里面睡眠,这样内核就hold住了。

出0入91汤圆

 楼主| 发表于 2022-4-12 14:19:09 | 显示全部楼层
本帖最后由 ackyee 于 2022-4-12 14:21 编辑
cddyy 发表于 2022-4-12 14:18
while1里面睡眠,这样内核就hold住了。
(引用自2楼)


也对哦  睡眠不影响中断

相当于我中断唤醒后 ,  然后 执行完后再安排继续睡眠对吧

出0入93汤圆

发表于 2022-4-12 14:19:28 | 显示全部楼层
while(1); 肯定得有啊
可以休眠中断唤醒

出0入91汤圆

 楼主| 发表于 2022-4-12 14:22:18 | 显示全部楼层
tim 发表于 2022-4-12 14:19
while(1); 肯定得有啊
可以休眠中断唤醒
(引用自4楼)


那我外部加了硬件看门狗了 , 看门狗频率1S  多   那我不是得至少500ms 唤醒一次了  这样高的频率可行么

出0入91汤圆

 楼主| 发表于 2022-4-12 14:41:54 | 显示全部楼层
tim 发表于 2022-4-12 14:19
while(1); 肯定得有啊
可以休眠中断唤醒
(引用自4楼)

发现ZYNQ 有 USLEEP 指令   类似 DELAY功能  暂时不知道 功耗是否相当

出0入4汤圆

发表于 2022-4-12 14:44:37 | 显示全部楼层
ackyee 发表于 2022-4-12 14:22
那我外部加了硬件看门狗了 , 看门狗频率1S  多   那我不是得至少500ms 唤醒一次了  这样高的频率可行么 ...
(引用自5楼)

你可以查手册上的唤醒时间,一般不同的休眠方式唤醒时间不太一样,但很多都是us级别的,500ms这个时间已经很长了

出0入91汤圆

 楼主| 发表于 2022-4-12 14:47:14 | 显示全部楼层
LL00 发表于 2022-4-12 14:44
你可以查手册上的唤醒时间,一般不同的休眠方式唤醒时间不太一样,但很多都是us级别的,500ms这个时间已 ...
(引用自7楼)


我刚刚看到 官方的参考例程里 裸奔有用  USLEEP 和SLEEP   ,请教下 在ARM 运行过程中 ,这两个代码 的功能 是硬件挂起一段时间吗? 那在while(1)里增加  这个 应该会比 增加别的执行语句功耗更低吧?

出0入442汤圆

发表于 2022-4-12 15:17:08 来自手机 | 显示全部楼层
ackyee 发表于 2022-4-12 14:47
我刚刚看到 官方的参考例程里 裸奔有用  USLEEP 和SLEEP   ,请教下 在ARM 运行过程中 ,这两个代码 的功 ...
(引用自8楼)

。。cpu支持wfi(wait for interrupt)指令,可以sleep。

出0入91汤圆

 楼主| 发表于 2022-4-12 15:18:55 | 显示全部楼层
wye11083 发表于 2022-4-12 15:17
。。cpu支持wfi(wait for interrupt)指令,可以sleep。
(引用自9楼)


直接上 sleep()或者usleep() 指令就可以了吧?

第一次玩ZYNQ 的ARM 好多地方不太懂   很多都拿单片机的思维去开发了   哈哈

出0入4汤圆

发表于 2022-4-12 15:30:37 | 显示全部楼层
ackyee 发表于 2022-4-12 14:47
我刚刚看到 官方的参考例程里 裸奔有用  USLEEP 和SLEEP   ,请教下 在ARM 运行过程中 ,这两个代码 的功 ...
(引用自8楼)

ARM内核提供SLEEP和DEEP SLEEP两种方式,但是实际上芯片厂商在设计芯片时会具体的来使用这种两方式,比如看手册可能一个芯片会有3种低功耗方式,那么每种对应内核的哪一种模式就看设计了。
从使用者的角度来看,关注哪种低功耗模式符合你的实际应用,并且功耗最优,因为我不知道你应用的具体情况,只能这么泛泛的来说。
从你的问题来看:
在while(1)中运行,哪怕里面没有写代码,但其实内核也在运行,所以功耗肯定是比较高的。
而如果你让芯片进入休眠模式,那么就相当于时钟停下来了,内核不在运行状态,功耗自然就低了。

举个例子:
while(1)
{
        //执行用户代码1
        //进入休眠模式
        //执行用户代码2
}
上面的例子中用户代码1执行后会进入休眠模式,当你以某种方式唤醒MCU后会执行用户代码2(只是以某一种休眠方式举例,不一定所有都是这样的)。

出0入228汤圆

发表于 2022-4-12 16:26:09 | 显示全部楼层
买台低功耗测试仪吧。每种芯片肯定不同的。 测试仪最直观。

前些天测了430,手从边上晃过都能影响电流。当然是不接触。

出0入0汤圆

发表于 2022-4-12 17:45:52 | 显示全部楼层
如果没有休眠,CPU还是在在全速跑的。

出215入169汤圆

发表于 2022-4-12 18:34:59 来自手机 | 显示全部楼层
你放个freertos也不会太麻烦,在idle任务里面调用wfi就行

出0入0汤圆

发表于 2022-4-12 18:36:45 | 显示全部楼层
wxws 发表于 2022-4-12 16:26
买台低功耗测试仪吧。每种芯片肯定不同的。 测试仪最直观。

前些天测了430,手从边上晃过都能影响电流。当 ...
(引用自12楼)

有没有这种可能:
影响的是测试仪产生的噪音?并不是实际的电流消耗

出0入475汤圆

发表于 2022-4-12 18:41:03 | 显示全部楼层
ackyee 发表于 2022-4-12 15:18
直接上 sleep()或者usleep() 指令就可以了吧?

第一次玩ZYNQ 的ARM 好多地方不太懂   很多都拿单片机 ...
(引用自10楼)

个人觉得不就是该单片机思维吗?
即使是电脑不也一样的思维啊,只要是微观上时序执行的东西思维都差不多啊,又不是FPGA并行的,
我觉得吧,你是把那些编程语法语句和硬件绑在一起在考虑问题,而不是先思考架构、流程后再去编写代码
降低功耗什么的有好一些方法啊,常用的前面探讨的这些睡眠,还有一种思想就是动态降低系统工作频率,工作时钟降低了,自然功耗也降低了,而至于到底该用while还是sleep啥的,那是语法或者具体实现问题了,
到底是睡眠/休眠模式还是降低系统时钟,这又是得根据你的需求以及芯片是否支持来了

出0入91汤圆

 楼主| 发表于 2022-4-12 19:38:03 来自手机 | 显示全部楼层
1a2b3c 发表于 2022-4-12 18:41
个人觉得不就是该单片机思维吗?
即使是电脑不也一样的思维啊,只要是微观上时序执行的东西思维都差不多 ...

(引用自16楼)

很简单的代码,原先的架构师fpga加stm32的,所以现在在不大改的基础上裸奔最合适了,只是系统一直在跑导致温度有点高
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-16 04:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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