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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Lucio Di 2022-06-09 11:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Raspberry Pi 产品线于 2017 年 2 月通过 Raspberry Pi Zero W进行了扩展,这是一款 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)。

poYBAGKhZBuAB5dAAABOG8pCf5s001.png

【图1 | 此处显示的是嵌入式应用程序的软件堆栈的表示,可以通过分离驱动程序和电路板支持层来进一步细化。]

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

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

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

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

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

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

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

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

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

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

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

pYYBAGKhZBWATcC5AADtmaIGywg199.png

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

poYBAGKhZA6AWVUsAAMHJ88JxWU091.png

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

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

pYYBAGKhZAiAA3USAAAe4I6dglE111.png

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

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

对抗复杂性

当我在 Pi Zero W 上观看 Eben Upton 的视频公告时,我不禁想起了我的早年时光。那时是80年代中期。我买不起 BBC 电脑或豪华的 Amiga,但我确实把所有的钱都花在了 Sinclair ZX Spectrum 上。Eben 让计算“人人都买得起”的努力真的引起了我的共鸣。

毕竟,将一台功能强大的 PC 挤进一个 6 厘米 x 3 厘米的微型印刷电路板 (PCB) 中,所达到的创纪录的低价点仍然让我感到惊讶。我经常想知道,是否正是 Spectrum 的节俭和诸多限制教会我更深入地研究电子产品并让我爱上了那个奇怪的机器世界——今天我们称之为嵌入式的软件和硬件之间的边界。

随着小型 MCU 成长为小型片上系统 (SoC),或者 PC 缩小为 Raspberry Pi,复杂性不一定是技术进步的必然结果。现代代码配置器可以帮助我们增强我们的软件开发过程,并最终恢复我们对快速增长的可用功能的控制。

是呢环保局:郭婷

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

    关注

    4415

    文章

    23955

    浏览量

    426009
  • soc
    soc
    +关注

    关注

    40

    文章

    4619

    浏览量

    230079
  • 定时器
    +关注

    关注

    23

    文章

    3372

    浏览量

    124445
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ICS2008B:SMPTE时间码接收器/生成器的技术解析

    ICS2008B:SMPTE时间码接收器/生成器的技术解析 在多媒体技术飞速发展的今天,时间码的精确控制对于音视频同步至关重要。ICS2008B作为一款SMPTE时间码接收器/生成器芯片,为多媒体
    的头像 发表于 04-13 18:10 341次阅读

    探索ICS9FG104E:PCIe Gen1/2、USB3.0等设备的频率生成器解决方案

    探索ICS9FG104E:PCIe Gen1/2、USB3.0等设备的频率生成器解决方案 在电子设备的设计中,频率生成器扮演着至关重要的角色,它为各种高速接口提供稳定的时钟信号,确保设备的正常运行
    的头像 发表于 03-29 17:05 900次阅读

    探索Renesas 9FGV0431:低功耗PCIe时钟生成器的卓越之选

    探索Renesas 9FGV0431:低功耗PCIe时钟生成器的卓越之选 引言 在当今的电子设计领域,PCIe技术的广泛应用对时钟生成器提出了更高的要求。Renesas的9FGV0431作为一款专为
    的头像 发表于 03-15 17:25 1084次阅读

    知识分享-嵌入式系统可靠模型

    嵌入式系统可靠设计技术及案例解析1.3嵌入式系统可靠模型嵌入式系统可靠模型分为两种:串联结
    的头像 发表于 03-11 16:43 374次阅读
    知识分享-<b class='flag-5'>嵌入式</b>系统可靠<b class='flag-5'>性</b>模型

    半导体嵌入式单元测试的核心技术、工具选型与落地全流程

    一、半导体嵌入式软件的质量危机与单元测试的核心价值1.1 半导体嵌入式软件的复杂性演进在摩尔定律的驱动下,半导体芯片的集成度呈指数级增长,嵌入式软件作为芯片功能的核心载体,其
    发表于 03-06 14:55

    什么是嵌入式应用开发?

    系统中,用于控制、监测或通信等特定用途。与一般计算机系统不同,嵌入式系统通常具有较小的存储容量、处理能力和功耗,且需要满足特定的实时、可靠和安全性要求‌。 应用领域 嵌入式系统
    发表于 01-12 16:13

    嵌入式软件单元测试中AI自动化与人工检查的协同机制研究:基于专业工具的实证分析

    裁决者‌。嵌入式系统中,人工检查不是冗余环节,而是保障功能安全与系统可靠的核心防线。 ‌1. 引言:嵌入式软件的测试特殊****‌
    发表于 12-31 11:22

    C语言单元测试在嵌入式软件开发中的作用及专业工具的应用

    ,提高整体系统的稳定性和可靠 嵌入式C语言单元测试面临的特殊挑战包括: 硬件依赖强,测试环境搭建复杂 实时性要求高,测试不能影响系统性能 资源受限,测试
    发表于 12-18 11:46

    深入探讨AMD嵌入式开发框架的三大基石

    随着嵌入式系统复杂性日趋提升,嵌入式开发已不再只是编写软件/固件,更是关乎对软硬件生态系统进行协调。硬件与软件的相互依赖与系统复杂性,实际
    的头像 发表于 11-24 09:52 665次阅读
    深入探讨AMD<b class='flag-5'>嵌入式</b>开发框架的三大基石

    如何通过地址生成器实现神经网络特征图的padding?

    涉及到相应地址的时候,直接输入零数据,第二种则是在对应padding地址存入零数据,正常读取数据。 两种实现方式的主要区别在于:稀疏地址生成器的控制逻辑更为复杂,但其相比于直接输入零数据的方式可以节省
    发表于 10-22 08:15

    嵌入式软件测试与专业测试工具的必要深度解析

    MSO‌:提供电源完整测试、时序分析、数字信号验证等硬件调试功能,以及中断处理分析、代码执行流程跟踪等软件调试能力。 测试工具选型建议选择嵌入式软件测试工具时应考虑以下因素: ‌测试阶段需求
    发表于 09-28 17:42

    嵌入式工程师为什么要学QT?

    受限的环境。 Qt的实现主要是采用p-impl手法,实现接口与实现分离,它有很好的消息循环机制,有助于在资源受限的嵌入式设备上运行。 提升代码质量 Qt的设计理念和架构可以帮助嵌入式工程师编写更加
    发表于 08-14 15:15

    Linux嵌入式和单片机嵌入式的区别?

    Processor Unit)。 2. 单片机嵌入式(也称为嵌入式微控制器MCU): 定义:一种集成电路,能够在一个芯片上完成各种计算、控制和管理任务。 特点:小型化、低功耗、成本低、可靠
    发表于 06-20 09:46

    ETAS全新的嵌入式AI解决方案

    “将训练后的AI神经网络模型,自动化生成安全且高效的C代码,用于嵌入式系统” ,近日ETAS携全新的智能化工具Embedded AI Coder亮相2025上海国际车展。
    的头像 发表于 05-07 11:43 2277次阅读
    ETAS全新的<b class='flag-5'>嵌入式</b>AI解决方案

    嵌入式适合自学吗?

    嵌入式适合自学吗?其实并不建议大家自学嵌入式,主要有以下原因。 一)学习难度大 1)知识体系复杂嵌入式系统是一个复杂的领域,涉及到计算机、
    发表于 04-27 09:54