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

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

3天内不再提示

架构性需求的基础知识

汽车ECU开发 来源:汽车ECU开发 2024-11-15 11:01 次阅读

第一次接触“架构性需求”,大约在六年前,当时一位大佬指导我们说,在前期产品规划时,最重要的就是找到“架构性需求”。本人就一头的问号,“架构性需求”是什么?我没有听错吧?当时也没怎么放在心上,直到近年架构设计经验增多,才领悟这句话的正确性。

什么是?

首先,什么是需求?

需求是一个多义词,它的准确所指往往取决于你所处的位置。在汽车行业我们往往会利用ASPICE的V模型来找到自己需求的来源。比如做详细设计,其需求来源就是架构设计。

03aa8ec6-9071-11ef-a511-92fbcf53809c.png

但是这个理解是不准确的,下图的表述会更加准确,也就是说本层次的需求往往有三个来源,以Domain level - Functional architecture步骤为例:

Vehicle level的Functional architecture

Vehicle level的Logical architecture

Domain level的Requirements

03caa738-9071-11ef-a511-92fbcf53809c.png

RFLP: MBSE背后的方法论

什么是架构性需求?

架构性需求是整个系统的最重要的那些需求,它可能出现在产品开发的各个层次和各个阶段,对产品的形态、功能、开发周期等等往往起着决定性的作用。它们最大的特征是:只能在项目早期出现,在项目中期出现往往会导致巨大的工作量,甚至需要将整个项目推倒重来。

典型的架构性需求一般有这么三类(但也有不少不在其中):

系统的主要功能需求,它们确定了这个系统必须拥有的功能。比如:汽车必须能在路上开、SOA通信框架必须能跨MPU和MCU通信等等。

质量需求和非功能性需求,一般是指这个系统的那些功能要完成的有多好。比如刹车系统必须达到ASIL-D标准、最差通信时延必须在1ms以内等等。

决定了解决方案和项目的各种约束条件。比如X项目必须在1年之内完成、某ECU的内存只有100KB等等。

那么接下来以汽车行业的典型“架构性需求”为例,从不同的层次依次展开讲讲。

2. 整车级别

整车级别的架构性需求会特别多,就会有下面这些:

车辆的售价:定价20万区间的车,如果中途说改成要卖40万,几乎就是不可能完成的任务。

上市时间:一辆新车的正向开发时间普遍要3年左右,如果说要1年内上市一款新车,那整体的开发策略会完全不一样。

这个环节离用户会比较接近,大家一看就明白,我就不多讲了。

3. 域(子系统)级别域指的是功能域,一般乘用车会分为“座舱域”、“智驾域”、“车辆控制域”、“动力底盘域”等等。这里以座舱域的“3秒内倒车影像启动”展开讲。

种类:非功能性需求

这个需求是由整车级别的R和F同时作用下,才决定了是否需要这个需求: -车辆的售价决定了是否需要高品质

-车辆的功能拆解决定了是否有倒车影像

03e0e8c2-9071-11ef-a511-92fbcf53809c.png

自从车载倒车影像出现以来,在车辆启动之后3秒内,倒车影像就可以正常工作就是个基础需求。否则的话,司机系好安全带后若要倒车,就只能傻坐着,用户体验非常之差。 这个需求对于Linux时代的车载多媒体系统不是问题,因为Linux本身启动就比较快。但是当车载多媒体系统进入Android时代,就要了命了。

下图是Android的启动顺序,Android的界面要能显示图像,需要至少到下面的Normal Mode处。当前行业的优秀水平是15秒以内完全启动。那怎么办呢?

040367bc-9071-11ef-a511-92fbcf53809c.png

http://www.ryantzj.com/boot-sequence-in-android.html

行业一般有几种办法:

驼鸟大法:忽略这个需求,15秒就让用户等吧,反正我这车也便宜。

深度改造法:对Android系统进行深度定制,比如将倒车影像的启动顺序直接提前到跟Zygote并行启动。但这个的研发成本很高,需要引入一套新的GUI系统,因为这时Android的UI系统还没启动完毕呢。

Hypervisor法:近年来不少芯片都支持Hypervisor,就直接将倒车影像的精简版本部署到启动较快的系统上,如Linux或QNX。在快启阶段使用精简版本的功能,等到Android完全启动后再切换至完整版本。

042c6cac-9071-11ef-a511-92fbcf53809c.png

休眠法:某些芯片支持在关机时将当前系统状态保存至Flash上,这样下次开机就能更快了。但支持这个功能代价是很高的,首先是这种芯片就不多,然后还得浪费几个G的宝贵空间用于保存状态。

不下电法:对于纯电车,干脆就不让车机下电,后果就是每天要多掉个几公里续航,并且对系统的稳定性提出了更高的要求。毕竟每次关机都是清除系统垃圾的机会,不关机就没有这个时机了。

不管哪个解决办法,这个看似简单的“3秒启动”的需求,搞出了这么多解决方案,也是让各大厂商的工程师掉了好多头发。

4.ECU级别

各个域的功能设计做进一步的拆解,就落到了ECU里面。这里就以MCU的“极少的内存(以KB为单位)”做展开。

种类:约束条件

这个需求的来源大致如下:

为了实现车内的各种功能,如无线钥匙、远程解锁、防盗报警等等,车内的电子器件现在已经是不可或缺的了 (Vehicle Level - Functional)

受限于成本考虑,能由MCU完成的,绝不用MPU (Domain Level - Functional)

044e8558-9071-11ef-a511-92fbcf53809c.png

说到“极少的内存”,没接触过MCU编程的工程师都会想,那又怎么样?那我就少实现点功能呗。但其实对你的编程模式发生极大的影响。

MCU的一大特点是内存极小,在车载行业较常见的Renesas V850系列,其内存最小8K,最大也就192K。

0468aa28-9071-11ef-a511-92fbcf53809c.png

这么一点内存,在MPU端,往往启动一个进程就可以耗光了,根本就不够用。启动一个线程,至少需要给它分配两部分内存,TCB和Stack,TCB还好,但Stack会较大,比如Linux的默认配置就是8MB。那么怎么办呢?这就引出了一条软件架构设计阶段的“架构性需求”。

基于RTE运行

很多针对MCU的软件架构都会包含RTE这一角色,其核心的功能就是大部分的线程/Task由RTE创建,并由各个应用共享,这样就可以节省很多Stack的内存开销。

最著名的就是AUTOSAR了,你的程序(应用)被拆成了一个个的Runnables,多个Runnable可以运行在同一个Task中,共享同一个栈。

0489d360-9071-11ef-a511-92fbcf53809c.png

而一旦你的程序需要基于RTE运行,那么随之而来的,就是要做几件基础的事情:

对你的程序进行配置,主要是配置有哪些Runnable。

配置触发这些Runnable对应的事件Event。

实现这些Runnable。

下图为Mathworks对Runnable的配置界面:

04a26b3c-9071-11ef-a511-92fbcf53809c.png

支持的Event类型

04b5f850-9071-11ef-a511-92fbcf53809c.png

https://www.mathworks.com/help/autosar/ug/configure-runnables-events-irvs.html

这种开发方式就跟MPU端的灵活开发有非常大的不同。一切都是由事件触发,没有main()函数,并且需要时刻牢记一点:不能block当前的task,否则整个ECU可能都会卡死。

5. 模块级别

各个ECU确定了选型后,做了整体的系统设计和软件架构设计后,最终的实现会落到软件模块级别。我们以“禁止动态分配内存”为例展开这部分。

种类:约束条件

这个需求的来源大致如下:

车辆的动力底盘域要绝对可靠 (Domain Level - Requirement)

动力底盘域的某ECU上的软件的可靠性要达到ASIL-D级别(ECU Level -Requirement)

想达到ASIL-D级别,是必然不允许动态分配内存的。(Module Level - Requirement)

04d32506-9071-11ef-a511-92fbcf53809c.png

动态分配内存有很多好处,但是坏处也不少

内存利用率相对较低

需要内存管理程序,会额外占用内存

产生内存碎片,需要定期清理

不确定性较大

虚拟内存往往会大于物理内存,不可避免的引发缺页中断,使得分配内存的时间不确定性较大

分配内存时,查找可用内存也会引入一定的不确定性

分配内存可能会失败,为避免这种情况往往需要较为复杂的内存回收机制(如Android的OOM killer),而不定时的触发会进一步导致不确定性)

所以,像SafeRTOS这种对可靠性要求极高的OS干脆就禁用了动态分配内存。

04f6b106-9071-11ef-a511-92fbcf53809c.png

这又意味着什么呢?这就意味着本来在系统层面上的资源分配会前移到代码编写阶段,对编程模式是个重大的改变。

051b7c70-9071-11ef-a511-92fbcf53809c.png

比如AUTOSAR中的Component配置就包含了这些东西:

提供哪些接口,类型是啥?

需要使用哪些接口,类型是啥?

05458f10-9071-11ef-a511-92fbcf53809c.png

6. 如何识别架构性需求

既然架构性需求是如此的关键,那么如何才能在项目前期将绝大部分的架构性需求识别出来呢?个人觉得主要‍有两大类方法:

用常见的架构性需求分类来帮助梳理,就如文章开头所讲的:

系统的主要功能需求

质量需求和非功能性需求

决定了解决方案和项目的各种约束条件

进行行业对标和调研,对于行业中各个领域的解决方案中特殊的点要知其然且知其所然,而不是简单的想当然,因为这些特殊的点往往就是为了满足特定的“架构性需求”而来的。

结语

三年前,有位大佬问我,架构设计那么多环节,哪个环节最重要?我回答说:“把需求弄清楚最重要”。现在想来,确实如此,万一你漏了一条“架构性需求”,可该怎么办?

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

    关注

    8

    文章

    3016

    浏览量

    73989
  • 架构
    +关注

    关注

    1

    文章

    511

    浏览量

    25468

原文标题:架构性需求是什么

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview基础知识

    labview基础知识labview基础知识labview基础知识labview基础知识
    发表于 03-08 17:56

    FPGA架构和应用基础知识

    ASIC慢3到4倍。本文介绍了FPGA的基础知识和FPGA架构模块,包括I / O焊盘,逻辑块和开关矩阵。FPGA是VLSI的一些新兴趋势领域。FPGA架构通用FPGA架构由三种类型的
    发表于 12-14 17:39

    ARM架构基础知识小结

    从单片机转到ARM —— ARM架构基础知识小结从单片机转到ARM,主要需要学习ARM的架构,ARM相比单片机多了一些外设和总线。在仅仅是裸奔的情况下,如果熟悉了ARM架构,那么可以认
    发表于 05-12 17:06

    ARM架构基础知识小结

    从单片机转到ARM ―― ARM架构基础知识小结
    发表于 12-29 06:16

    【HarmonyOS基础知识】HarmonyOS系统架构

    这个视频带大家揭秘HarmonyOS基础知识之HarmonyOS系统架构,一起来看看?
    发表于 01-19 18:32

    Cortex-A7 MPCore架构基础知识点汇总,不看肯定后悔

    Cortex-A7 MPCore架构基础知识点汇总,不看肯定后悔
    发表于 11-30 06:45

    ARM架构基础知识点汇总

    之所以更复杂,当然是为了跑更快以及更好地支持片上系统,所以在某种程度上来说对片上系统不是很了解的话那对于ARM架构的理解也不会那么深。ARM架构基础知识小结通用寄存器R13通常被用作栈指针,进入异...
    发表于 12-13 06:26

    通信基础知识教程

    通信基础知识 1、电信基础知识2、通信电源技术3、配线设备结构、原理与防护4、防雷基础知识5、EMC基础知识6、防腐蚀原理与技术7、产品安
    发表于 03-04 16:48 33次下载

    电子电路基础知识

    电子电路基础知识 电路基础知识(一)电路基础知识(1
    发表于 01-15 09:47 23.1w次阅读

    电池基础知识(集全版)

    电池基础知识(集全版)  电池基础知识
    发表于 11-10 14:19 2511次阅读

    计算机基础知识介绍

    计算机基础知识计算机基础知识计算机基础知识
    发表于 12-03 16:13 0次下载

    使用Eclipse基础知识

    使用Eclipse 基础知识 使用Eclipse 基础知识 适合初学者学习使用
    发表于 02-26 10:30 0次下载

    电源管理基础知识电源管理基础知识电源管理基础知识

    电源管理基础知识电源管理基础知识电源管理基础知识
    发表于 09-15 14:36 76次下载
    电源管理<b class='flag-5'>基础知识</b>电源管理<b class='flag-5'>基础知识</b>电源管理<b class='flag-5'>基础知识</b>

    优质LDO基础知识分享

    本节分享下LDO的基础知识,主要来源于Ti的文档《LDO基础知识》。
    的头像 发表于 03-26 11:03 1339次阅读

    架构模式的基础知识

        作为软件工程师,为什么至少要学习基本的架构模式?     我相信有很多人回答了这个问题,但我会给你一些考虑的理由。     首先,如果您了解架构模式的基础知识,那么您就更容易遵循架构
    的头像 发表于 06-13 16:13 729次阅读
    <b class='flag-5'>架构</b>模式的<b class='flag-5'>基础知识</b>