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

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

3天内不再提示

使用嵌入式代码生成器检查复杂性

星星科技指导员 来源:嵌入式计算设计 作者:Lucio Di Jasio 2022-06-29 14:44 次阅读

Raspberry Pi 产品线是一款具有无线连接功能的 10 美元个人计算机。对于业余爱好者、制造商、修补匠、黑客,以及,是的,我们中为数不多的真正努力设计“真正的”电子产品的人来说,这是多么美好的时光啊!

尽管 Raspberry Pi 的“通用计算”区别和微控制器MCU) 的“嵌入式”分类存在细微差别,但两者的共同目标是为开发人员“控制复杂性”同时“吸引新手用户”。每种类型的平台都提供免费软件工具,包括集成开发环境 (IDE)、编译器、链接器、模拟器、调试器以及或多或少的开放中间件和操作系统 (OS)。两者都严重依赖于相似的(如果不相同的话)基于 GNU 的工具链。在中间件级别,一旦较低(直至金属)驱动程序层被抽象,开源选项再次非常相似。

尽管他们的使命是通过降低复杂性来支持开发人员,但是文档膨胀的问题在双方都很明显。一个完美的例子是基于 PIC 架构的小型 8 位 MCU,PIC16F1619。PIC16F1619 MCU 用于控制小型电器,为此,它在 20 引脚封装中仅包含 16 kB 闪存、12 个数字外设接口和大约同样多的模拟支持模块,但其数据表跨越 650 页(在添加之前表征数据、图表和图形)。PIC16F1619 上提供的外设(例如信号测量定时器 (SMT))需要多达 50 页,这几乎是描述实际 PIC 内核及其整个指令集所需的页数的两倍。

Raspberry Pi 方面的问题类似,只是按比例放大(高达 10 倍)。这里有几个数据表需要考虑,每个数据表只记录片上系统 (SoC) 的一个组件,例如外围设备、GPU 等。仅内核就占据了 750 多页。

不能指望没有人会阅读或简单地跟上如此大量的信息。特别是嵌入式开发人员总是承受着巨大的压力,要在更短的时间内交付应用程序以实现最快的上市时间。

迷失在嵌入式软件架构的层层中

解决信息泛滥的一种常见解决方案是使用分层架构和抽象硬件细节的标准化外围库对应用程序进行分区。这些层可以表示为一个整齐的堆栈,“应用程序”位于硬件抽象层 (HAL) 的顶部。如果需要,可以进一步细化堆栈以识别 HAL 和其上的中间件层,以实现常见的服务/功能,例如网络、文件系统和图形用户界面 (GUI)。

该软件架构模型源自“计算”世界,适用于大多数通用情况。不幸的是,它在嵌入式应用程序中存在两个基本缺点:

1. 分层架构简化了文档膨胀问题,只要关注中间件层提供的标准功能即可。在应用范围的低端,中间件层非常薄,如果存在的话,结果主要是混淆。因此,开发人员必须依靠大型应用程序编程接口 (API) 形式的 HAL 文档,这是一个同样庞大的材料体,可以跨越数千页,而不会真正揭示设备的细节。当出现问题时,开发人员会陷入困境或被迫深入研究大量外来代码。

2. HAL 层为标准中间件服务提供了巨大的支持,但由于其刚性性质,通常最终会抹去特定设备的独特差异化功能。否则,这些功能可以为特定应用程序提供技术优势,并且可能是首先选择特定设备的原因。

代码生成器:让机器做它最擅长的事情!

由于堆叠的软件架构会导致性能损失和独特功能的扁平化,现代 MCU 开发人员在使用标准化 HAL 时获得的收益会减少。然而,强调快速开发的嵌入式控制市场的新一代代码生成器为解决这个难题提供了一条出路。

代码配置器/生成器做机器最擅长的事情,显着缩短或消除重复和容易出错的搜索数据表以配置硬件外围设备和构建 HAL 的过程。用户还可以从单个代码配置器界面了解特定的硬件外围功能,从而完全减少对数据表的需求。因此,HAL 成为嵌入式开发项目的灵活组成部分,可以在工程师优化应用程序性能时快速且频繁地重新生成。

代码配置器工具的显着特点包括:

· 与流行的 IDE 完全集成,允许工具(和用户)了解项目上下文(涉及的型号/部件号、使用中的中间件库等)

· 支持独特而复杂的外围设备,例如前面提到的 SMT。例如,SMT 可以在一个页面/对话框中直观地呈现给用户,其中包括一些直观的滚动列表和复选框(图 2)。

· 一个模板引擎,将用户配置转换为一小组完全定制的函数,减少必须传递给每个函数的参数数量,并保证大多数硬件抽象在编译时静态执行。生成的 API 是最小的,需要学习的功能很少,并利用一致和直观的命名约定。这提高了性能和代码密度(代码示例 1)。

· 由非常短的(C 语言)源文件组成的输出,用户可以完全检查,提供学习和手动优化的机会。现代代码配置器以灵活的方式将生成的代码与用户代码混合在一起,从而保持完整性并允许充分利用高级硬件功能。

poYBAGK79OaAYSddAAEt40zaQYU538.png

【图2 | 此处显示的是 Microchip Technology, Inc. 的 MPLAB 代码配置器 (MCC) 中的信号测量定时器 (SMT) 选项的屏幕截图。

pYYBAGK79O6AHfHpAAMWWwlgwfc288.png

[代码示例 1 | SMT 外围源文件 (smt1.c) 的此示例部分显示了 MCC 生成的代码的节俭性。]

一旦外围配置完成,开发人员可以立即专注于应用程序。使用代码生成器,嵌入经典的“Hello, World!” 示例(总是转换为闪烁的 LED)变成了两行代码练习。

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5NzY1YzQ3NDQ3OWMucG5nJnZlcnNpb249MDAwMCZzaWc9ZTAyZTUyYTlkYjcwNzMxM2VlZjAwM2UxM2JhYzhiNjE253D

[代码示例 2 | 创建“Hello, World!”只需要两行代码。使用 MCC 的应用程序。]

在《In 10 Lines of Code》一书中可以找到其他 20 个有效使用快速开发工具的实际示例。

审核编辑:郭婷

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

    关注

    240

    文章

    23039

    浏览量

    656682
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16852

    浏览量

    349801
  • soc
    soc
    +关注

    关注

    38

    文章

    4081

    浏览量

    217725
收藏 人收藏

    评论

    相关推荐

    使用C2000™嵌入式模式生成器(EPG)进行设计

    电子发烧友网站提供《使用C2000™嵌入式模式生成器(EPG)进行设计.pdf》资料免费下载
    发表于 09-14 10:13 0次下载
    使用C2000™<b class='flag-5'>嵌入式</b>模式<b class='flag-5'>生成器</b>(EPG)进行设计

    ARM MCU嵌入式开发 | 基于国产GD32F10x芯片+嵌入的开始

    嵌人系统的分类方法是依照系统主控制芯片的复杂性进行分类。可以分为型嵌入式系统、中等规模嵌入式系统、复杂
    发表于 09-09 14:48

    Freepik携手Magnific AI推出AI图像生成器

    近日,设计资源巨头Freepik携手Magnific AI,共同推出了革命的AI图像生成器——Freepik Mystic,这一里程碑的发布标志着AI图像创作领域迈入了一个全新的高度
    的头像 发表于 08-30 16:23 1040次阅读

    TSMaster 测试报告生成器操作指南

    用户在基于TSMaster软件开发测试用例时,或需要使用TSMaster生成HTML报告时,需要使用TSMaster测试报告生成器。1Test_Report说明Test_Report是目前
    的头像 发表于 08-03 08:21 357次阅读
    TSMaster 测试报告<b class='flag-5'>生成器</b>操作指南

    软件架构搞好了,还用担心代码可读差?

    :硬件多样嵌入式系统常常面临不同硬件平台和设备的多样,需要一个灵活的软件架构来适应这些差异。软件复杂性:随着嵌入式系统功能的不断增加,
    的头像 发表于 06-14 08:10 231次阅读
    软件架构搞好了,还用担心<b class='flag-5'>代码</b>可读<b class='flag-5'>性</b>差?

    飞凌嵌入式ElfBoard ELF 1板卡-在线二维码生成器

    在线二维码生成器允许用户将文本、网址、图片或其他数据转换为二维码形式。二维码是一种特殊类型的条形码,它可以通过扫描来快速识别和读取信息。在线二维码生成器使用特定的算法将这些信息编码成二维码,用户可以
    发表于 04-24 17:00

    Minitab 交互表格生成器

    生成器
    MinitabUG
    发布于 :2024年04月03日 15:58:54

    RL78的代码生成器发布说明

    电子发烧友网站提供《RL78的代码生成器发布说明.pdf》资料免费下载
    发表于 01-30 09:48 0次下载
    RL78的<b class='flag-5'>代码</b><b class='flag-5'>生成器</b>发布说明

    MicroClock可编程 时钟生成器5X1503数据手册

    电子发烧友网站提供《MicroClock可编程 时钟生成器5X1503数据手册.pdf》资料免费下载
    发表于 01-14 10:56 0次下载
    MicroClock可编程 时钟<b class='flag-5'>生成器</b>5X1503数据手册

    HKA5278 128音符旋律生成器一般说明

    电子发烧友网站提供《HKA5278 128音符旋律生成器一般说明.pdf》资料免费下载
    发表于 01-10 09:09 0次下载

    单片机代码自动生成器程序

    和输入/输出设备的芯片。它通常用于嵌入式系统中,能够完成一系列特定的任务。开发人员编写的单片机代码负责指导单片机执行相应的任务。然而,编写单片机代码是一项繁琐而容易出错的工作,代码
    的头像 发表于 01-08 14:12 2692次阅读

    TSMaster报文发送的信号生成器操作说明

    信号生成器功能是TSMaster分析中的报文发送模块。信号生成器用于发送和配置每个CAN/LIN信号的值变化行为,简而言之,这是一个可以控制和调整CAN/LIN信号值的功能。我们可选择的信号生成器
    的头像 发表于 12-23 08:21 889次阅读
    TSMaster报文发送的信号<b class='flag-5'>生成器</b>操作说明

    嵌入式开发学习的十三法则分享

    有限性法则 嵌入式计算不仅需要网络快速、一致的计算,而 且也要求系统能够井然有序地将其执行代码和数 据,存储在一个“ 共同” 的“ 狭小” 的空间内。 四、结构法则 对于嵌入式
    发表于 12-21 06:32

    simulink自动生成ROS代码

    当我们用simulink完成控制程序的搭建后,我们期望下一次可以直接对ROS进行控制,而不是每次都需要启动matlab和simulink,因此我们可以使用simulink的代码生成器生成ROS
    的头像 发表于 11-15 17:53 777次阅读
    simulink自动<b class='flag-5'>生成</b>ROS<b class='flag-5'>代码</b>

    真随机数生成器TRNG外设模块应用要点

    国产车规微控制器原厂云途半导体设计和发售的YTM32ME微控制器上集成的真随机数生成器TRNG(True Random Number Generator)外设模块
    的头像 发表于 11-08 14:52 1736次阅读
    真随机数<b class='flag-5'>生成器</b>TRNG外设模块应用要点