0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式业务软件设计介绍

麦辣鸡腿堡 来源:嵌入式系统 作者:嵌入式系统 2023-12-07 15:09 次阅读

业务软件设计

低功耗从硬件上能够解决一部分,但单纯依靠硬件肯定是不行的,需要软件的密切配合,才能达到最好的效果。以上是从硬件驱动层面的,一般情况下都比较关注,但实际上软件业务层的灵活性高,发掘低功耗的效果比硬件低功耗本身的效果更加显著,通俗地讲,底层硬件辛辛苦苦地优化设计节省的效果,远远不如软件设计得好的表现。

从软件的业务逻辑、产品需求方面的设计,在功耗方面更有意想不到的效果,软件功耗优化简单总结就是“能睡就睡”。

4.1 任务周期化

一个嵌入式产品包括很多子功能、子任务,一个应用是对若干服务的调用实现的。这里服务可以是硬件服务,比如AD电压采样、UART串口通讯,也可以是软件服务,比如TCP/IP网络通信等。简单的功能如CRC校验,纯软件实现,函数运行立即获得结果,对功耗无所谓影响;复杂的功能,尽量使用任务的方式来实现,并不是特指操作系统的task或者thread,可以理解为一个流程,即一个子功能运行的完整过程。一件事有始有终就可以根据需要循环反复,周期运行的任务,明确运行的起止时间点,区分运行与非运行状态就能更好的优化,比如减少运行持续时间或者其中大电流的时间段,在功耗方面效果比较明显。

4.2 休眠自理与协调

将整个嵌入式软件系统分成了很多周期性工作的小任务,它们可能是交错的或者毫无关系并行的。从本质上说,每个小任务只需关注自身的起止时间点。系统的功耗管理就是为每个任务的功耗进行管理,整体在一个有效的协调方式下才能做到功耗最小。基于任务的功耗管理实际上分成两个部分,微观角度单任务自身的功耗管理,和宏观角度多任务的休眠协调。

从微观角度来看,一个任务能独立完成自己的功能,任务中所有的步骤都是确定的,都是“自己说了算的”,对外界来说是“黑盒子”,对低功耗的要求,不外乎以下几种情形:

(1)、任务执行的过程中不允许休眠,因此任务的开头和结尾处要设置标志,告知协调系统,“只要我不同意,就不允许系统休眠”。 (2)、任务执行的过程中,某些阶段允许休眠,某些阶段不允许休眠;任务的执行过程中,不同阶段允许不同的休眠等级。 (3)、任务执行的过程中,不在乎是否休眠。

三类任务同时存在于系统中,第一类任务是相当霸道的,只要它在执行,根本不允许休眠;第二类任务既完成了任务,又兼顾了休眠;第三类任务基本上可当做空气无视。系统任务设计时应尽可能编写后两类任务,避免或者尝试拆分第一类任务。

从宏观角度来看,任意时刻可能有多个任务同时在执行,每个任务对休眠的需求都是不同的。如果要设立一个协调机制,该怎么办呢?每个任务按最低需求,随时来休眠协调机构签到投票,表明自身当前能够容忍的最低功耗对应的休眠等级,休眠协调机构的仲裁者定时或轮询检查所有任务的投票结果,找到最小的休眠等级,类似水桶的最矮一环作为“共识”,然后进入相应的休眠等级。

如果有人投了“不休眠”的票,仲裁就只能放弃休眠。所以,每一个任务都应该是一个负责的任务,都应该根据自己的不同步骤及时的更新自己对休眠的容忍度,从而保证投票能够达成有意义的结果。

这种机制实现也很容易,比如

//微信公众号:嵌入式系统

uint16_t sleep_enable = 0xFFFF; //0xFFFF表示可以进入休眠

uint16_t sleep_enable=0xFFFF,表示系统可以进入休眠,每个任务独立的操作相应的一位,禁止休眠时清0,允许休眠则置1。休眠协调机制即定时查询sleep_enable是否为0xFFFF,可以在main轮询或RTOS的待机任务查询,进行休眠的进出。

任务的划分合理,尽量允许休眠,通过这种协商机制可以解决“能睡就睡”的问题。

4.3 任务等待合并

设备运行中必然存在定时唤醒的任务,多个定时任务随机的在任意时刻唤醒工作,导致频繁退出休眠。这种情况下,在最大允许延迟的情况下,多个任务可以在一次唤醒全部执行。比如去超市买菜,肯定是一次把当天需要的菜都买了,而不是每餐前都去买,一天到晚跑超市。在4G物联网产品应用,比如设备每3分钟需要向服务器发送一个TCP/IP心跳包,同时传感器每10秒采集一个数据也需要上报服务器,可以实现为数据缓存,等到3分钟的定时器溢出上报时,将采集的多组传感器数据组合一并上报,减少无线网络模块唤醒的次数。

4.4 及时止损

因为环境或外设组合不同,可能在某些时间段无法实现需求,或者结合当前信息大概率无法实现,或者硬件部分故障,软件监测到这种异常后,需要及时止损,减少不必要的消耗。例如GNSS卫星定位,其属性就是必须在开阔区域才能定位,如果设备开启GNSS但发现信号很差,可初步判断当前位置可能在室内,即使继续工作也不能定位,可以立刻关闭GNSS节省电量;当然产品在需求层面需要考虑不定位的其他操作。或者通信中确认外设不存在或者损坏,就没必要继续供电定时交互,进行异常报警即可。

4.5 需求层面

在需求定义时,充分考虑某个任务或外设工作的起止要求,避免长时间进行无效工作。例如可以根据加速度传感器判断设备是否处于运动状态在开启监控,或者通过红外或声控判断有人接近才开启工作。这种都是通过产品定义,在需求层面组合,满足要求才唤醒工作,不满足则及时停止进入休眠,当然也可能增加硬件成本。部分设备也可以考虑使用场地增加太阳能充电板,开源节流。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1739

    浏览量

    84587
  • 硬件
    +关注

    关注

    11

    文章

    2989

    浏览量

    65357
  • 嵌入式软件
    +关注

    关注

    4

    文章

    230

    浏览量

    26459
收藏 人收藏

    评论

    相关推荐

    诚聘嵌入式软件设计

    猎头职位:嵌入式软件设计师【成都】岗位职责:1.负责燃气类产品的嵌入式开发及调试;2.参与产品开发方案的设计;3.协助硬件设计师完成产品硬件设计;4.负责项目研发过程中的技术文档编写及归档;5.参与
    发表于 03-13 10:29

    嵌入式软件设计之思想与方法

    本帖最后由 lee_st 于 2018-2-24 17:16 编辑 嵌入式软件设计之思想与方法
    发表于 02-24 17:15

    如何查找嵌入式软件设计的缺陷?有什么技巧?

    如何查找嵌入式软件设计的缺陷?有什么技巧?
    发表于 04-22 07:10

    嵌入式软件设计中查找缺陷的技巧有哪些?

    嵌入式软件设计中查找缺陷的技巧有哪些?
    发表于 04-28 06:42

    基于QT的嵌入式linux图形应用软件设计

    嵌入式数据库或图形软件开发有兴趣,可以进一步学习嵌入式linux数据库开发或基于 QT的嵌入式linux图形应用软件设计。...
    发表于 11-05 08:11

    掌握嵌入式系统软件设计方法

    实验目的(1)掌握嵌入式系统软件设计方法,培养分析问题、解决问题、应用知识的能力和创新精神,全面提高综合素质。(2)熟悉嵌入式Linux开发环境,学会基于UP-CUP6410-II型平台的Linux
    发表于 11-09 09:05

    嵌入式环境下软件设计的特点是什么

    详见微信公众号,二进制人生。目录:嵌入式环境下软件设计的特点设计目标设计思路多进程解耦嵌入式环境下软件设计的特点要谈嵌入式
    发表于 11-09 06:31

    嵌入式软件设计开发工具有哪些呢?分别有何用途

    什么是嵌入式软件嵌入式系统的硬件包括哪些部分呢?嵌入式软件设计开发工具有哪些呢?分别有何用途?
    发表于 12-24 07:47

    嵌入式系统软件设计的原则是什么

    嵌入式系统软件设计的原则1、基本原则是“物尽其用”,嵌入式系统的硬件和软件都必须高效率地设计,去除冗杂 还应尽可能采用高效率的设计方法,标准化开发方法和开发流程
    发表于 12-24 06:29

    如何去实现嵌入式中的硬件设计和软件设计

    什么是嵌入式?如何去实现嵌入式中的硬件设计和软件设计呢?
    发表于 01-19 07:55

    嵌入式软件设计和单片机软件设计的区别是什么?

    嵌入式软件设计和单片机软件设计目前的应用很多,这两者有什么区别? 嵌入式主要说的什么?结构是啥!
    发表于 11-10 07:46

    如何查找嵌入式软件设计中的缺陷

    如何查找嵌入式软件设计中的缺陷 本文将介绍如何避免那些隐蔽然而常见的错误,并介绍的几个技巧帮助工程师发现软件中隐藏的错
    发表于 04-09 14:37 691次阅读

    ARM的嵌入式系统软件设计

    ARM的嵌入式系统软件设计
    发表于 10-27 15:00 8次下载
    ARM的<b class='flag-5'>嵌入式</b>系统<b class='flag-5'>软件设计</b>

    基于RTOS的嵌入式系统软件设计

    基于RTOS的嵌入式系统软件设计说明。
    发表于 04-19 14:38 17次下载

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 309次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件设计</b>的原则分享