当前位置:首页 > 公众号精选 > 嵌入式大杂烩
[导读]C与C的选择其实是“面向过程”与“面向对象”的选择。Sugar认为这两种编程思想的选择取决于软件的特性,软件特性包括几个方面,都是Sugar总结出来的经验。本文力求把“软件特性”与“语言选择”结合图示理清晰。嵌入式最简IO模型“最简IO模型”自然是输入直接输出,比如房间里的照明灯...

CC 的选择其实是“面向过程”与“面向对象”的选择。Sugar 认为这两种编程思想的选择取决于软件的特性,软件特性包括几个方面,都是 Sugar 总结出来的经验。本文力求把“软件特性”与“语言选择”结合图示理清晰。

嵌入式最简 IO 模型

“最简 IO 模型”自然是输入直接输出,比如房间里的照明灯给电就亮,这是不需要嵌入式的。按现在的潮流说法,加嵌入式进去那得叫智能硬件。因此,嵌入式的最简 IO 模型就是在输入和输出之间加入“嵌入式运算平台”,如“图1”。

图1. 嵌入式最简 IO 模型



在嵌入式最简 IO 模型下的产品功能大多都相对简单,有明确的输入和明确的输出,也就是说嵌入式软件的运算过程是明确的。这是自然“面向过程”的情况,这种情况下选 C 还是 C 没有多大差别。简单的控制过程就算选 C 也是写面向过程的软件。

举个例子来说就是现在小孩子都玩儿腻了的“巡线小车”,上电就跟着线跑。这个用 Arduino C 来实现就可以了,其实 Arduino 是 C 库,在这种简单功能上体现不出 CC 有多大区别。

嵌入式受控 IO 模型

所谓“嵌入式受控 IO 模型”可以认为是一个遥控智能车一样的设备。在受控模型下,嵌入式硬件平台多了一路“指令”输入。这时候不妨再加个显示器,用于显示当前处于“受控模式”还是“自动模式”,如“图2”。

图2. 嵌入式受控 IO 模型



这里引入的“模式”是一个软件概念,软件是有无限可能的,能加一个模式进去就有可能再加很多个模式。模式在软件流程上是一个环节,但这个环节如上所述有多种不同的可能,这种情况最适合用 C 的面向对象思想来写程序。

即:软件上“单点多样”的情况下用 C 使软件模块化,用父、子类来实现,代码的可读性和可维护性都会远强于用 C 来写。有关“模式”的详细展开请看《从 ArduPilot 学习模式管理机制并移植和改进》。

嵌入式终级 IO 模型

随着人工智能的逐步发展,越来越多的算法需要强劲的 CPU 甚至 GPU,这都不是嵌入式平台能做的。嵌入式平台长于实时控制而非快速大量运算,因此需要与机载 PC 配合工作。这样种情况下的模型如“图3”。

图3. 嵌入式终级 IO 模型



这样的模型毫无疑问用 C 会得到可维护性更好的嵌入式软件。如上所述 C 用在“单点多样”的环节,也就是说在考虑 C 代码之前要先确认有“哪些点”以及每个点有“哪些样”。

嵌入式软件的语言选择

下面基于“嵌入式终极 IO 模型”展开说嵌入式软件的语言选择。在嵌软部分从前往后展开,首先是传感器输入数据。

传感器输入部分的语言选择

图4. 传感器输入部分语言选择



软件特性语言
软件运行平台的相关硬件不经常改变C
软件运行平台的相关硬件经常改变C
上表根据软件的运行平台差异直接给出了选择建议,平台差异也决定了软件特性的不同。

对于医疗、工业、运输/铁路、航空航天设备、汽车、核应用、家电系列产品,一般生产出来之后嵌入式硬件将不再改变,这类产品开发就适合选择 C 语言。在这些产品上 C 语言占用资源相对少、较率相对高。因为硬件固定所以软件源文件数量也是明确的,源码文件管理的负担也不重。另外传感器驱动开发这件事本身就是“面向过程”的,开发经验是决定开发效率的关键,“面向对象”在开发效率上的优势于这种情况下很难体现出来。

对于玩具、教具类产品或者是开源软件,灵活适配同类硬件是基本要求。这类嵌软的特点是同一种硬件需要适配不同厂家、不同型号的“同功能设备”,这就符合“面向对象”的思想。就以 GPS 来说,不论哪个厂家都要输出经纬度、速度、时间戳这些数据,我们可以把这些共性数据做成 C 的基类,用子类解决厂家差异。这部分 Sugar 在《一文读懂 ArduPilot 的前后台架构》中有详述。

嵌入式运算部分的语言选择

图5. 嵌入式运算部分语言选择



这一部分的软件特性是:算法与硬件平台无关。算法本身是数学和逻辑,平台提供运算能力,因此运算部分理应在任何运算能力达到要求的平台上都能够运行。另外算法本身具有多样性,一个目标往往不只一种算法可以达到。

“单点多样”、“跨平台”这两点对软件代码的文件管理都有比较高的要求,这些要求用 C 就非常容易满足。

协议数据部分的语言选择

图6. 协议数据部分语言选择



协议本质是对传输数据的打包和解包,这是一个面向过程的事,所以用 C 语言来实现协议代码最合适。

从数据传输方面考虑,在把数据送给协议代码打包前,最好将数据分类,以明确数据是“给谁”和“干什么”的,这些事 Sugar 统称为“协议数据管理”。从嵌入式软件整体来看“协议数据管理”就是整体中的“一个点”,而嵌入式平台的通信对象可能不唯一,比如“图6”中就有给显示器的和给机载 PC 的,也就是说管理起来是“多样的”。这从软件整体来看也是一个典型的“单点多样”,所以协议数据管理这部分选 C 面向对象写软件更有优势。

往期推荐:

嵌入式开发小记,实用小知识分享

分享几个Ubuntu必装的软件

嵌入式行业需要什么样的技术人才?

常用的开源协议有哪些?

在公众号聊天界面回复1024,可获取嵌入式资源;回复 ,可查看文章汇总。


点击阅读原文,查看更多分享。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭