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

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

3天内不再提示

代码的可重用性是代码开发和确保可维护性的关键

星星科技指导员 来源:嵌入式计算设计 作者:Colin Walls 2022-06-30 14:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

实现嵌入式应用程序的过程很好理解:

代码(用 C/C++/汇编或其他语言)编写并放置在许多文件(模块)中。

每个模块都经过编译/组装以创建可重定位的目标文件。该文件包含目标处理器的机器指令,但地址信息尚未提交。

所有模块都使用链接器(有时称为链接器/定位器)集成在一起。此过程解析所有内存引用并生成一个绝对目标文件:最终系统内存的图像。

这种观点有些简单化,因为还有许多其他细微差别:

增量链接可用于将一个或多个可重定位对象连接在一起以形成单个可重定位对象。

可以调整链接/定位过程,以便代码存储在一个地方,但地址解析为在另一个地址执行,已被引导加载程序复制到那里。

可以将可重定位的目标文件链接在一起是产生目标模块库的一种特殊方式。

“图书馆”一词在各种情况下被使用和滥用。它的含义在这里定义明确。可以将库文件连同可重定位的目标文件一起提供给链接器。它的功能是解析可重定位目标文件未提供的符号(通常是函数名)。例如,如果您在一个模块中的代码调用了函数MyFun()并且在另一个模块中有此函数的定义,那么一切都很好。如果链接器没有找到这个函数,就会产生错误。但是,如果包含一个库(或多个库),则链接器将首先查找那里以解析符号。如果库包含MyFun()函数,则提取代码并在最终的绝对文件中使用。

图书馆的意义可能并不明显。你可以用一种简单的方式将所有的可重定位文件链接在一起——为什么还要麻烦图书馆呢?这个想法是该库包含大量函数,但链接器仅提取当前应用程序所需的函数。未使用的永远不会从库中提取,因此它们不会耗尽(即浪费)目标内存。

库的主要目的是作为大量可重用代码的存储库。在大型开发团队的项目中,这可能是一种很好的工作方式,在这种情况下共享代码非常有益,“重新发明轮子”是不可取的,但很常见。应仔细规划和记录项目库。设计函数时必须考虑重用:不使用全局数据、干净、定义良好的接口、可重入性等。

开发工具供应商通常会提供针对 C/C++ 标准化的库。它们包含两种类型的功能。显而易见的是开发人员在需要时调用的显式函数——比如printf()。其他库函数是隐式的;它们由编译器生成的代码调用,并提供常用的功能,方便共享。

软件 IP 供应商也可能以库的形式提供他们的产品。实时操作系统 (RTOS) 通常以这种方式分布。这使得 RTOS 可以直接扩展;应用程序中仅包含所需的 RTOS 功能。

库分布的一个问题是它们的“粒度”;可以提取多小的代码?一些库是由大块构建的。这意味着库中的模块可能包含属于特定 RTOS 设施的所有服务功能。因此,例如,使用一个 RTOS 调用对信号量进行操作将导致所有与信号量相关的服务调用函数都包含在应用程序中。一个非常细粒度的库可以与较小的单元一起使用。因此,使用单个服务调用将导致仅包含其代码而不是相关函数的代码。有一个权衡。一个非常细粒度的库会延长链接时间,但目标内存不会浪费在未使用的服务调用函数上。

所有嵌入式软件开发人员都应该了解库的工作方式及其提供的好处。代码的可重用性是高效、高效的代码开发和确保可维护性的关键。

审核编辑:郭婷

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

    关注

    5186

    文章

    20145

    浏览量

    328717
  • RTOS
    +关注

    关注

    25

    文章

    862

    浏览量

    122587
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式测试软件设计

    认识到测试软件的好处了吧? 所以,之后写代码,写之前,有必要先想清楚,这个模块最后要怎么进行自测?要测哪些地方? 设计的软件测试
    发表于 12-02 06:06

    C语言的编程技巧

    代码的灵活性和可维护性。 ‌6、使用合适的条件语句‌:选择合适的条件语句(如if、else if、else、switch)可以提高程序的执行效率和可读。‌ ‌7、模块化和分层开发‌:
    发表于 11-27 06:46

    HarmonyOS应用代码混淆技术方案

    代码混淆技术可以增加代码的复杂和模糊,从而提高攻击者分析代码的难度。
    的头像 发表于 11-21 16:17 5330次阅读
    HarmonyOS应用<b class='flag-5'>代码</b>混淆技术方案

    确保X光设备检测的有效和准确关键技巧

    在工业和安全领域,X光设备检测已成为不可或缺的重要环节。然而,许多用户常常面临检测效果不理想、准确不足的问题,影响生产效率和安全保障。如何确保X光检测设备能够发挥最大效能,准确捕捉目标信息,是当前
    的头像 发表于 11-18 11:27 94次阅读

    代码开发平台推荐:2025国内低代码开发平台排名TOP10

    代码开发平台排行榜 在企业数字化转型的浪潮中,低代码开发平台正逐渐成为企业实现高效开发和快速迭代的重要工具。随着技术的不断进步和市场需求的
    的头像 发表于 10-28 10:22 304次阅读

    2025主流低代码平台有哪些:低代码开发平台选型指南指南

    年,超过70%的企业将采用低代码平台构建关键业务系统。然而,市场上的低代码平台在复杂场景支撑、技术可控、行业适配等方面存在显著差异。本文
    的头像 发表于 10-22 11:49 181次阅读

    统计过程控制在预防维护中的应用

    引言在制造设备设计中,一个常被忽视的方面是可维护性。设备是否具备可维护性相关特性,会显著影响设备的运维成本;而这些运维成本,又直接关系到维护合同的盈利能力。因此,找到降低运维成本的有效方法,对于提升
    的头像 发表于 09-03 18:04 739次阅读
    统计过程控制在预防<b class='flag-5'>性</b><b class='flag-5'>维护</b>中的应用

    什么是零代码平台?

    代码平台是一种无需编写传统代码,通过可视化拖拽、参数配置、逻辑连线即可快速搭建业务流程与应用系统的工具平台。它将复杂的软件开发过程转化为 “搭积木” 式的操作,让非技术人员(如业务人员、运营人员
    发表于 07-12 20:28

    如何确保模拟示波器信号源的标准

    确保模拟示波器信号源的标准是保证测量结果准确和可靠关键。以下从信号源选择、校准与验证、操作规范三个方面,提供系统
    发表于 04-07 14:49

    PCBA应变测试:确保电子产品可靠关键

    PCBA应变测试:确保电子产品可靠关键
    的头像 发表于 02-25 17:28 877次阅读
    PCBA应变测试:<b class='flag-5'>确保</b>电子产品可靠<b class='flag-5'>性</b>的<b class='flag-5'>关键</b>

    代码与传统开发的区别 低代码与无代码开发的区别

    在软件开发领域,传统开发、低代码开发以及无代码开发是三种不同的
    的头像 发表于 01-31 10:48 1052次阅读

    如何提高嵌入式代码质量?

    嵌入式代码的质量是至关重要的。本文将探讨如何通过有效的开发方法和工具来提高嵌入式代码的质量,以确保系统的可靠
    发表于 01-15 10:48

    电源滤波器的可维护性如何

    电源滤波器可维护性包括模块化设计、易拆卸结构、耐腐蚀及散热材料、定期清洁检查、元件更换,维护成本低,智能化设计减少人工需求,定期性能测试监控性能变化。
    的头像 发表于 01-09 09:48 659次阅读
    电源滤波器的<b class='flag-5'>可维护性</b>如何

    SMT来料质检:确保电子生产质量的关键

    关键方面。 1、外观检验 确认元器件 无物理损伤、变形或锈蚀 ,并符合订单规格。 2、规格验证 核对元器件的型号、规格及参数与采购要求是否一致。 3、评估 确保元器件引脚能够满足
    发表于 01-07 16:16

    探讨篇(三):代码复用的智慧 - 提升架构的效率与可维护性

    的案例,介绍几种分布式架构中管理代码复用的技术。包括代码复制、共享代码库(jar包)、共享服务、边车服务。对于每一种技术,列出优缺点、适合场景权衡。 本文的观点源自我在学习与实践过程
    的头像 发表于 12-27 15:58 855次阅读
    探讨篇(三):<b class='flag-5'>代码</b>复用的智慧 - 提升架构的效率与<b class='flag-5'>可维护性</b>