当前位置:网站首页>嵌入式开发:提示和技巧——退出时休眠
嵌入式开发:提示和技巧——退出时休眠
2022-08-11 11:00:00 【粤嵌教育】
低功耗系统的一种软件架构是让系统始终处于睡眠模式,仅在运行单个中断服务程序(ISR)时唤醒,然后立即返回睡眠状态。如果嵌入式开发人员试图从他的电池中榨出最后一点电,那就有一个严重且经常被忽视的缺陷。运行一个中断会浪费很多时间和时钟周期。
执行中断的顺序是一个多步骤的过程。首先,将寄存器值和其他当前状态信息压入堆栈,以便以后恢复。接下来,CPU指向ISR,执行ISR代码,最后弹出堆栈,将寄存器恢复到原始状态。整个序列可以用图1中的流程图来概括。

图1–标准ISR操作
这样做的问题是,即使嵌入式开发人员使用现代的快速处理器,将所有寄存器推到堆栈中然后再恢复它们的效率仍然很低。这可能需要很少的时间,甚至可能是几纳秒,但是在数百万或数十亿次执行的过程中,这可能相当于在低功率模式下花费的大量时间。结果就是浪费电池电量!
大多数ARM微控制器都有一个非常酷的特性,叫做退出时休眠。该特性的作用是,当ISR完成时,使能该特性会使MCU立即进入睡眠状态,而不是让处理器每次都进入和退出ISR,浪费玩堆栈的开销。通过这样做,MCU仍然被配置为运行ISR,因此当它再次触发时,系统唤醒并立即执行ISR,开销最小。结果如图2所示。

图2–退出时休眠的ISR开销
不过,在不使用其他低功耗设计技术或设计周期中没有时间进行节能优化的应用中,这一特性的真正优势是显而易见的。如果嵌入式开发人员将它内置于软件架构中,并且是首批优化之一,则可以节省几毫安的电流。然而,如果这个特性是在大部分优化已经实现的最后实现的,那么很可能节省的空间非常小。
边栏推荐
猜你喜欢

Calculate the sum of an element of an array

Revelations!The former Huawei microservice expert wrote 500 pages of practical notes on the landing architecture, which has been open sourced

Analyzes how Flink task than YARN container memory limit

Ali Ermian: Do you know how to tune the JVM?

Configuring vim(12) from scratch - theme configuration

【Mask2Former】 解决代码中一些问题

【综合练习12】实现静态网页的相关功能

漫画手绘之临摹篇

宝塔一键部署WordPress(含宝塔添加站点、阿里云安全组配置、阿里云子域名解析)

Qihua stores the future and interprets the origin of distributed
随机推荐
论文笔记:《Time Series Generative Adversrial Networks》(TimeGAN,时间序列GAN)
LeetCode每日一题(1754. Largest Merge Of Two Strings)
How to build programming ideas and improve programming ideas
php获取微信小程序码并存储到oss
【Mysql系列】04_事务
SDS观察站
如何建立编程思想和提高编程思想
Some time function records commonly used in mysql
算法---跳跃游戏(Kotlin)
小目标绝技 | 用最简单的方式完成Yolov5的小目标检测升级!
国产数据库有没有在国外的应用案例?
C# 调用高德地图API获取经纬度以及定位【万字详解附完整代码】
【阿克曼运动控制】
PerfView project (first) : how to find hot spots function
【学习笔记】尚未用过的图论知识
当科学家决定搞点“花里胡哨”的东西
如何在游戏中实现一场下雨效果
巧用自定义函数,文本控件秒变高速缓存
全新FIDE 编译简单评测
工程师如何对待开源 --- 一个老工程师的肺腑之言