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

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

3天内不再提示

嵌入式代码的可移植性和可复用性

strongerHuang 来源:最后一个bug 作者:bug菌 2022-11-10 09:06 次阅读

最近几天在完成一个项目的EVT收尾工作,EVT这个名词可能有些朋友不是很熟悉,EVT(Engineering Verification Test)表示进行工程验证测试阶段。

一般的新产品开发都分为三个阶段 : EVT、DVT和PVT,EVT主要是调试单板,设计方案的可行性验证,所以这个阶段非常的关键,而后面几个阶段在流程比较成熟的公司,一般都是顺理成章的事。

这次给我感受颇深的是代码的可移植性和可复用性,所以给大家分享一下。

代码的价值

其实软件都是朝着,高内聚、低耦合、良好的可移植性以及较强的可复用性来不断发展的,其中高内聚和低耦合就不多说了,这两点跟项目的软件功能结构划分存在较大的联系,而可移植性和可复用性就相对比较通用和独立

可移植性与我们平时所说的跨平台能力比较相近,而软件复用则是一种通过已有软件子件来构建新产品软件的能力。

这些代码属性都将成为评估代码价值的指标,很多朋友该说了,嵌入式中的代码不就是在满足客户需求的前提下稳定运行吗?bug不要太多就好。

没错,但这属于代码最基本的价值,也是被称为代码本该有的价值,否则那不叫代码,叫"随随便便默写的abc"。

要想成为一名优秀的程序员,满足基本的代码价值还远远不够,还要有能力创造代码的其他价值,让代码的生命力延续得更久,其中可移植性和可复用性是衡量的重要指标。

可移植与可复用

开发一套软件,犹如生产一套工具,大部分情况下都不提倡一次性工具,你所开发的东西不仅能够满足当前需求,还需要为以后相似的开发或者应用以及产品的更新换代提供支持。

比如拿构建的滤波算法库,每次用到新的滤波算法都不会与实际的项目耦合,而是单独分离出来与算法库融合,并且开放出较全的对外接口

这样仅仅只是考虑了软件的可复用能力,还要考虑该库的跨平台能力,比如把与平台相关的部分抽出来进行各平台的兼容等处理来加强各部分的可移植性。

其实很多时候有些人把软件的可复用更多的看成是一种纵向的可移植能力。

这样当我们进行下一个项目软件开发的时候,前期就可以直接把该库移植过去,后面就不需要再“重复造轮子”了。

一方面缩短了嵌入式软件的开发周期,另一方面相应的代码也会更加的稳定,从而提高了产品交付能力。

嵌入式更需要

在嵌入式软件开发中,代码的可移植和可复用能力相对而言会有更多的诉求。嵌入式就是用有限的资源来构建特定的应用场景,这句话里面有两个词"有限"“特定”,我觉得这不仅把嵌入式描述清楚了,而且把嵌入式与其他领域的区别道出来了。

很多做嵌入式的朋友玩了一段时间更上层的应用开发,就会觉得上层开发是那么的轻松,确实那很轻松,因为那些所带来的便利都是建立在过盛的硬件资源条件下完成的,然而嵌入式与此并不协调。

有过较长时间嵌入式软件开发的朋友,应该有一个感受--"嵌入式太杂了",首先还不说各种应用的场景,单单嵌入式平台的底层驱动就非常的繁杂,平台种类繁多,同一平台下不同系列外设也会存在差异等等,甚至这些繁多的软件版本管控都是一个大学问。

刚开始学单片机的朋友,在起初都会有这样的挫败感,”又换MCU了呀?感觉又要重头开始学了?有开发板吗?有参考demo吗?“等等。

其实真正参加工作以后,几年下来接触到好几款芯片应该不是什么新鲜事了,甚至那些芯片都非常的冷门,所以在各平台上都游刃有余是一种重要能力的体现。

随着芯片工艺和技术的提升,MCU各方面的性能和功能都有加强,底层驱动部分的开发也是越来越复杂,datasheet更是需要经常查阅,因为很多时候厂家的例程无法满足目前的使用需求。

然而各大厂家都有自己的一套外设驱动流程和配套开发风格,没有得到统一,如果经常使用同一家厂家的产品,影响相对小一点。

比如st库就为大家做了这一块的工作,只要是使用st系列的MCU很多驱动都是通用的,但是也免不了标准库的停更和hal库与llc库的诞生,为了适应新鲜的东西,都需要花时间去测试、评估和修改。

所以对于底层驱动开发的复杂度,目前来看并没有很好的办法,如果驱动部分与应用部分再杂糅在一起,这样的代码就大大降低了我们今天谈的这两大属性。

所以驱动部分、平台相关的都要与具体应用代码进行分离

54608cb6-6090-11ed-8abf-dac502259ad0.png

构建中间层

对于底层驱动为了达到分离的目标,我们需要构建中间层,也有人称之为硬件抽象层,既然在MCU上底层驱动库很难得到较好的统一,通过分层的思想,把驱动和上层进行分离,通过构建一个中间层,中间层就相当于一个万能转换器,提供给上层的将是一套统一的接口,而内部通过API适配把底层的差异进行统一,以达到屏蔽掉底层的各种差异性的目的。

说起来好像挺简单的,其实不然,这套统一的接口是需要定义者对多个平台非常的熟悉,建立之前丰富的软件设计经验之上,并不简单的传递几个参数,封装成一个函数就完事了,往往如果接口统一不好,不仅仅达到到较好的可移植目的,甚至反而降低了处理的效率。

最后

在可移植性方面,对代码进行平台驱动的适配,以及平台属性方面的适配(比如数据类型的平台差异等),就可以满足系统的运作。

面对目前缺芯的境况,代码的可移植性的价值就体现出来了,可移植性好的改动也非常小。

而对于可复用能力,体现在新产品软件的快速构建能力了,代码的可复用能力越高,公司培养的CV工程师就越多,可复用性是一个解放程序员的代码属性。

为什么有些人越来越强,开发速度越来越快,很大程度上是因为他们所积累的软件子类具有较强的可移植性和可复用能力。

当你要进行一个新项目开发中,只需要把这些可复用的软件以模块的方式进行拼凑和协调即可实现一个你想要的工程,就跟我们建房子也是类似的道理。

中间件以上的软件部分,尽量不要使用编译器或者平台的特有属性,比如特定的关键字、函数、或者编译器的扩展语法等。

当然尽量不要用,并不是说你不要去了解和学习,如果其对系统性能提升有非常大的帮助,最好是想办法与实际的应用代码进行分离。







审核编辑:刘清

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

    关注

    4982

    文章

    18281

    浏览量

    288448
  • 滤波算法
    +关注

    关注

    2

    文章

    82

    浏览量

    13661
  • DVT
    DVT
    +关注

    关注

    0

    文章

    7

    浏览量

    8485
  • MCU芯片
    +关注

    关注

    3

    文章

    218

    浏览量

    11144

原文标题:嵌入式的可移植性和可复用性

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [原创]嵌入式操作系统的可移植性

      嵌入式操作系统的可移植性创易电子整理出品,创易更懂电子, http://52edk.taobao.com/ 全系列阻容感一本全掌控。许多操作系统夸耀自己的可移植性时,爱这样说
    发表于 03-16 22:11

    一线研发之声:嵌入式C编程经验 之 请写可移植性高的模块

    :一线研发之声:嵌入式C编程经验 之 请写可移植性高的模块* Author:SedateFire E-mail:SedateFire@126.com* Version:1.000 Time
    发表于 02-05 21:31

    [转]一线研发之声:嵌入式C编程经验 之 请写可移植性高的...

    :一线研发之声:嵌入式C编程经验 之 请写可移植性高的模块* Author:SedateFire E-mail:SedateFire@126.com* Version:1.000 Time
    发表于 07-22 14:44

    嵌入式操作系统及其特点

    系统的灵魂,它使得嵌入式系统的开发效率大大提高,系统开发的总工作量大大减少,并且极大地提高了嵌入式软件的可移植性。为了满足嵌入式系统的要求,嵌入式
    发表于 07-11 16:51

    DSP小系统接口电路可移植性设计方案

    1 引 言 所谓可移植性是指系统或电路不改动或者通过跳线、可编程器件的擦写等简单改动就可以适应不同的外部系统的能力。可移植性有两方面的含义:一是系统或电路可调;二是系统或电路可以适应不同的外部系统
    发表于 11-26 11:21

    如何设计嵌入式Linux下的PCI设备驱动?

    ]。Linux因其开放源代码以及稳定的性能,越来越受到广大用户青睐。同时,基于Linux内核的嵌入式操作系统应用势头强劲,开发基于Linux的设备驱动程序,具有很强的实用可移植性[
    发表于 08-13 07:49

    嵌入式软件代码保护系统是由什么构成的?

    嵌入式产品由于其独特的稳定性、低廉的成本优势以及优良的可移植性, 已经在互联网、科学研究、军事技术、工业控制、通讯以及人们的日常生活中得到了广泛的应用。在嵌入式系统中, 如何保护核心的嵌入式
    发表于 08-15 07:59

    如何将嵌入式操作系统μC/OS-Ⅱ面向数控系统改进?

    嵌入式操作系统μC/OS-Ⅱ是一个裁剪、源码开放、结构小巧、抢先的实时多任务内核,主要面向中小型嵌入式系统,具有执行效率高,占用空间小,可移植性
    发表于 10-30 07:42

    嵌入式Linux下的LCD驱动程序怎么编写?

    随着嵌入式Linux的迅速发展,由于其没有昂贵的版权费,完全开放源代码裁减可移植性,因此是开发
    发表于 11-11 07:33

    基于ARM怎么搭建嵌入式Linux系统?

    。Linux操作系统作为一种源代码开放、同时支持多种处理器结构的多任务操作系统,具有内核小、易裁剪、可移植性好等优点,是目前嵌入式系统应用与开发的主流操作系统。本文主要研究在ARM9
    发表于 04-17 06:56

    嵌入式硬件构件与底层驱动构件

    嵌入式硬件构件与底层驱动构件基本规范构件化设计嵌入式硬件构件核心构件中间构件终端构件构件化设计构件是核心和基础。复用为必要的手段。提高软硬件设计重用
    发表于 10-27 09:01

    嵌入式底层开发为什么选择C语言

    一、嵌入式系统开发概述1、传统开发模式的缺点:软件直接和硬件打交道,软件移植差。嵌入式三要素:软件、操作系统、硬件嵌入式优点:操作系统(
    发表于 12-17 08:32

    基于Linux的嵌入式浏览器的实现方法

    摘要:在嵌入式产品中利用嵌入式浏览器获得网络信息是必不可少的,所以嵌入式浏览器技术成为技术热点之一,发展是必然趋势.嵌入式浏览器具有速度快,实时
    发表于 12-21 07:31

    组件技术在嵌入式软件中有何作用

    巨大成功,但在嵌入式这一领域影响甚微,其主要原因是嵌入式系统受到时间、空间和功耗的限制,主流组件技术很难应用。随着嵌入式应用程序复杂度的增加以及对程序可移植性的期望,
    发表于 12-21 07:35

    嵌入式系统的复杂对接口标准有何影响

    微处理器专用软件层来处理处理元件之间的通信。随着时间的推移,对可移植性的需求推动了新开放标准的发展。例如,MPI(消息传递接口)不断发展,使开发人员能够创建在这些同构并行体系结构上运行的高性能,伸缩...
    发表于 12-22 07:52