能降低嵌入式系统功耗的三个技术

news2024/11/18 20:39:49

为电池寿命设计嵌入式系统已经成为许多团队重要的设计考虑因素。优化电池寿命的能力有助于降低现场维护成本,并确保客户不需要不断更换或充电电池,从而获得良好的产品体验。

团队通常使用一些标准技术来提高电池寿命,例如将处理器置于低功耗模式,关闭未使用的外设等。然而,我发现开发团队经常忽视一些标准技术。

在今天的文章中,我们将探讨我经常看到被忽视但可以产生重大影响的几种低功耗设计技术。

技术 1 – 放弃 GCC,选择商业编译器

作为软件开发人员和团队,我们已经习惯了使用免费和开源的工具。我们经常忘记,在大多数情况下,你得到的是你付出的。虽然 GCC 是一个非常好的工具,但在所有情况下并不适用。其中一种情况是对于低功耗的,以电池为动力的设备。

我最近对 GCC 和 IAR 的 EWARM 编译器的代码执行进行了一些性能测量。使用相同的设置为同一处理器编译相同的代码,测试代码的性能提高了20% - 30%。结果根据操作的不同而有所不同,但这些数字还是让人震惊。

这意味着什么?这意味着使用商业编译器,你可能能够更快地执行相同的代码,这意味着你可以更快地回到休眠模式。在休眠模式下花费更多的时间意味着更少的电流消耗和电池寿命更长的可能性!

使用商业编译器可能是你可以利用的一种方式,不仅可以从你的代码中得到更好的性能,而且还可以节省电池寿命。

注意:结果将根据你手动优化代码的能力而有所不同。但为什么要浪费所有的时间,当工具可以为你做呢?

技术 2 – 使用 Tickless 模式以保持更长时间的睡眠

低功耗模式的一个问题是,如果你使用RTOS,内核tick将周期性地唤醒系统。tick设置为一毫秒并不罕见。如果你希望你的设备在唤醒前睡眠一整分钟会发生什么?好吧,你将在那分钟内多唤醒6000次,浪费宝贵的电池寿命。

在许多RTOS中,一个简单的解决方案是使用 tickless 模式。该模式的思想是,当系统进入休眠状态时,它会将一个低功耗定时器进行缩放,以便RTOS tick不会每毫秒发生一次。相反,它可能在几分钟、几小时或甚至一天之后才会发生!

你可以想象,这会保持系统处于睡眠状态,防止它唤醒并运行一堆不必要的CPU周期。结果是使用的电流更少,等于电池使用寿命更长。

注意:启用 tickless 模式的方法和你可能需要作为开发者投入的工作量从一个RTOS到另一个RTOS是不同的。

技术 3 – 利用内部缓存

多年来,微控制器并没有缓存。他们是资源受限的设备,相对于他们更具特色的老一代设备来说相对简单。今天的情况并非如此。如果你看看来自ST、NXP和许多其他公司的微控制器部件,你会发现性能部件都有一个内部缓存。如果你正在为低功率设计,你可以利用缓存来改善能耗。

有几种机制允许缓存帮助你减少当前消耗。大多数与缓存的主要功能有关:提供对频繁使用的数据或指令的更快访问,从而减少CPU访问较慢的主内存的时间。

例如,你可以使用缓存来优化内存访问模式。在具有可预测的内存访问模式的应用程序中,缓存可以显著优化能源使用。通过有效地预取和缓存所需的数据和指令,微控制器最大限度地减少了对主存储器的能耗高昂的访问。

缓存提供的延迟更低,速度更快,比其他板载内存更好。结果是在内存访问上花费的时间更少,这使得CPU有更少的空闲周期。更快的访问也意味着CPU可以更早地完成任务,从而减少整体的CPU活动时间。所有这些都有助于减少处理器的总体能耗,从而使电池使用寿命更长。

结论

当开发者和团队看低功耗设计时,他们经常直接跳到睡眠模式,时钟门控和其他减少能耗的技术。虽然这些都是很好的技术,但他们有时会忽略那些简单技术。我们在这篇文章中看到了你可以使用的几种技术,以帮助提高你的设备的电池寿命或减少你的有源设备的能耗。

总的来说,低功耗设计中涉及到很多东西。你可以无限优化能源,但通常在优化过程中会有一个“膝点”,在这个点之后,电池寿命的提高会变得更少。一定要记住你的技术如何改善你的电池寿命;当你达到那个膝点时,就是停止优化的时候了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1540336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业微信可以更换公司主体吗?

企业微信变更主体有什么作用?当我们的企业因为各种原因需要注销或已经注销,或者运营变更等情况,企业微信无法继续使用原主体继续使用时,可以申请企业主体变更,变更为新的主体。企业微信变更主体的条件有哪些&#xff1…

上位机图像处理和嵌入式模块部署(qmacvisual图像识别)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 所谓图像识别,就是对图像进行分类处理,比如说判断图像上面的物体是飞机、还是蝴蝶。在深度学习和卷积神经网络CNN不像现在这…

2024-03-23 作业

网络聊天室 运行代码: main.c #include "link.h" #define SER_PORT 8888 int main(int argc, const char *argv[]) {if(argv[1]NULL){printf("请输入IP地址\n");return 0;}//创建套接字文件int sfd socket(AF_INET,SOCK_DGRAM,0);if(sfd …

【计算机网络】常见面试题汇总

文章目录 1.计算机网络基础1.1网络分层模型/OSI七层模型是什么?1.2TCP/IP四层模型是什么?每一层的作用?1.2.1TCP四层模型?1.2.2为什么网络要分层? 1.2常见网络协议1.2.1应用层常见的协议1.2.2网络层常见的协议 2.HTTP2…

MongoDB知识

1、部署MongoDB (1)new好一个mongo文件之后执行 (出现mongodb.key)记得放行端口 openssl rand -base64 666 > mongodb.key (2)放到一个docker-compose.yml之后docker-compose up -d执行 version: 3.…

数学(算法竞赛、蓝桥杯)--快速幂

1、B站视频链接&#xff1a;G01 快速幂_哔哩哔哩_bilibili 题目链接&#xff1a;P1226 【模板】快速幂 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; typedef long long LL; int a,b,p; int quickpow(LL a,int n,int p){…

【wails】(10):研究go-llama.cpp项目,但是发现不支持最新的qwen大模型,可以运行llama-2-7b-chat

1&#xff0c;视频演示地址 2&#xff0c;项目地址go-llama.cpp 下载并进行编译&#xff1a; git clone --recurse-submodules https://github.com/go-skynet/go-llama.cpp cd go-llama.cpp make libbinding.a项目中还打了个补丁&#xff1a; 给 编译成功&#xff0c;虽然有…

力扣面试150 阶乘后的零 数论 找规律 质因数

Problem: 172. 阶乘后的零 思路 &#x1f468;‍&#x1f3eb; 大佬神解 一个数末尾有多少个 0 &#xff0c;取决于这个数 有多少个因子 10而 10 可以分解出质因子 2 和 5而在阶乘种&#xff0c;2 的倍数会比 5 的倍数多&#xff0c;换而言之&#xff0c;每一个 5 都会找到一…

vue3与Electron构建跨平台应用(webpack)

一、创建vue3项目 vue create vue3_webpack_electron 二、安装Electron npm install --save-dev electron Electron 三、vue add electron-builder vue add electron-builder

VMware中UbuntuServer扩展硬盘空间

VMware中UbuntuServer扩展硬盘空间 没有不可治愈的伤痛&#xff0c;没有不能结束的沉沦&#xff0c;所有失去的&#xff0c;会以另一种方式归来 ——【约翰-肖尔斯】 第一步 lxalxa:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 …

鸿蒙Harmony应用开发—ArkTS-像素单位

ArkUI为开发者提供4种像素单位&#xff0c;框架采用vp为基准数据单位。 说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 名称描述px屏幕物理像素单位。vp屏幕密度相关像素&#xff0c;…

OpenCV学习笔记(十一)——利用Sobel算子计算梯度

Sobel算子是基于一阶导数的离散差分算子&#xff0c;其中Sobel对于像素值的变化是十分敏感的&#xff0c;在进行边缘检测的时候&#xff0c;Sobel算子常用于对周围像素的重要性进行检测。 Sobel算子包括检验水平方向的算子和检测竖直方向的算子 计算机梯度值的操作如下&#x…

XUbuntu22.04之安装Plantuml(二百二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

微信小程序Skyline搜索框吸顶到navtab胶囊位置,丝滑Q弹动画

进入下面小程序可以体验效果&#xff1a; 基于官方原版demo加入了回弹动画 WXML: <scroll-viewclass"scroll-area"type"custom"scroll-yshow-scrollbar"{{false}}"worklet:onscrollend"handleScrollEnd"worklet:onscrollupdate&q…

【工具】cassetteai — 制作音乐就像现在写提示一样简单

Cassette 是一种人工智能驱动的音乐创作工具,使各种技能水平的用户都可以根据自己的特定需求和偏好生成高质量、免版税的音乐曲目。它基于基于潜在扩散 (LDM) 的机器学习模型,可以使用用户提供的文本描述来想象节拍。它具有易于使用的界面,用户可以输入各种参数,例如所需的…

Qt播放音乐代码示例

主界面 点击play按钮播放或暂停音乐&#xff0c;拖动进度条&#xff0c;音乐对应播放。 QWidget window;QPushButton* playButton new QPushButton("Play");// Qt 播放音乐// 创建 QMediaPlayer 对象QMediaPlayer* player new QMediaPlayer;// 指定音频文件的路径…

查立得php+mysql源码通用数据库配置教程

适用范围&#xff1a; 查分吧PHP多条件都输对版已有表万用查询系统 phpMySql已有数据表通用搜索可增删改查 查立得快搜系统(phpMysql) v20220208 查立得万能查&#xff08;phpmysql&#xff09; v20220512 及 各付费版 等几十款源码 数据库配置路径 数…

Redis的String类型为什么重新设计使用了SDS数据结构呢

Redis 选择重新设计其 String 类型的底层数据结构&#xff0c;采用 SDS&#xff08;Simple Dynamic String&#xff09;而不是直接使用 C 语言标准库提供的原生字符串&#xff08;char*&#xff09;的原因主要包括以下几点&#xff1a; O(1) 时间复杂度获取长度&#xff1a; 在…

SpringBoot健康监控

文章目录 1-SpringBoot2-监控-健康监控服务2-SpringBoot2-监控-Admin可视化 在Spring Boot中&#xff0c;可以通过Actuator模块实现应用程序的健康监控。Actuator是Spring Boot提供的一个用于监控和管理应用程序的模块&#xff0c;可以轻松地查看应用程序的运行状况、性能指标和…

部署prometheus 监控k8s集群

目录 1、主机清单 2、拉取镜像 3、服务安装 4、安装prometheus-operator 5、查看custom metrics api 6、获取prometheus端口 7、将 alertmanager-main 、grafana、prometheus-k8s的端口暴露出来 8、再次查看prometheus端口 9、浏览器访问IP&#xff1a;31940 部署k8集群…