当前位置:网站首页>嵌入式开发:提示和技巧——退出时休眠
嵌入式开发:提示和技巧——退出时休眠
2022-08-11 11:00:00 【粤嵌教育】
低功耗系统的一种软件架构是让系统始终处于睡眠模式,仅在运行单个中断服务程序(ISR)时唤醒,然后立即返回睡眠状态。如果嵌入式开发人员试图从他的电池中榨出最后一点电,那就有一个严重且经常被忽视的缺陷。运行一个中断会浪费很多时间和时钟周期。
执行中断的顺序是一个多步骤的过程。首先,将寄存器值和其他当前状态信息压入堆栈,以便以后恢复。接下来,CPU指向ISR,执行ISR代码,最后弹出堆栈,将寄存器恢复到原始状态。整个序列可以用图1中的流程图来概括。
图1–标准ISR操作
这样做的问题是,即使嵌入式开发人员使用现代的快速处理器,将所有寄存器推到堆栈中然后再恢复它们的效率仍然很低。这可能需要很少的时间,甚至可能是几纳秒,但是在数百万或数十亿次执行的过程中,这可能相当于在低功率模式下花费的大量时间。结果就是浪费电池电量!
大多数ARM微控制器都有一个非常酷的特性,叫做退出时休眠。该特性的作用是,当ISR完成时,使能该特性会使MCU立即进入睡眠状态,而不是让处理器每次都进入和退出ISR,浪费玩堆栈的开销。通过这样做,MCU仍然被配置为运行ISR,因此当它再次触发时,系统唤醒并立即执行ISR,开销最小。结果如图2所示。
图2–退出时休眠的ISR开销
不过,在不使用其他低功耗设计技术或设计周期中没有时间进行节能优化的应用中,这一特性的真正优势是显而易见的。如果嵌入式开发人员将它内置于软件架构中,并且是首批优化之一,则可以节省几毫安的电流。然而,如果这个特性是在大部分优化已经实现的最后实现的,那么很可能节省的空间非常小。
边栏推荐
猜你喜欢
Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)
宝塔一键部署WordPress(含宝塔添加站点、阿里云安全组配置、阿里云子域名解析)
【教程】区块链是数据库?那么区块链的数据存储在哪里?如何查看数据?FISCO-BCOS如何更换区块链的数据存储,由RocksDB更换为MySQL、MariaDB,联盟链区块链数据库,区块链数据库应用
SDS观察站
I got the P8 "top" distributed architecture manual that went viral on Ali's intranet
Analyzes how Flink task than YARN container memory limit
分析 Flink 任务如何超过 YARN 容器内存限制
4. 继承
LeetCode 剑指 Offer 35. 复杂链表的复制
Neuropathic pain classification picture Daquan, neuropathic pain classification
随机推荐
ASP.NET Core 6框架揭秘实例演示[32]:错误页面的集中呈现方式
mySQL事务及其特性分析
LeetCode69:牛顿迭代法和二分法求解x的平方根
为什么有些人不喜欢出身底层的人?
阿里内网疯传的P8“顶级”分布式架构手册被我拿到了
【Mysql系列】03_系统设计
学习二叉树
Word小技巧之图表实现自动编号和更新
数据库导出的csv文件纯数字被转为科学计数法
沃土云创计划重磅来袭
LeetCode每日一题(1754. Largest Merge Of Two Strings)
Analyzes how Flink task than YARN container memory limit
Getting Started with Chrome Plug-in Development - Nanny Level Raiders
C语言手写魂斗罗(一)
Incredible, thanks to this Android interview question, I have won offers from many Internet companies
天花板级微服务大佬总结出这份451页笔记告诉你微服务就该这么学
servlet——servlet执行流程 | servlet关系视图
七、一起学习Lua 函数
【教程】区块链是数据库?那么区块链的数据存储在哪里?如何查看数据?FISCO-BCOS如何更换区块链的数据存储,由RocksDB更换为MySQL、MariaDB,联盟链区块链数据库,区块链数据库应用
AcWing 273. 分级(线性DP+结论)