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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Colin Walls 2022-06-30 14:58 次阅读

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

审核编辑:郭婷

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

    关注

    5056

    文章

    18950

    浏览量

    301494
  • RTOS
    +关注

    关注

    21

    文章

    809

    浏览量

    119338
  • C++
    C++
    +关注

    关注

    21

    文章

    2094

    浏览量

    73442
收藏 人收藏

    评论

    相关推荐

    单片机芯片开发-单片机方案开发关键技巧和流程步骤!

    和驱动,将简化后续开发的复杂。 编写与调试代码: 在编写代码时,建议采用模块化设计,这样便于后续的维护和升级。
    发表于 09-26 17:04

    单CPU 双项目开发实现更好的维护和可行应用说明

    电子发烧友网站提供《单CPU 双项目开发实现更好的维护和可行应用说明.pdf》资料免费下载
    发表于 09-12 09:42 0次下载
    单CPU 双项目<b class='flag-5'>开发</b>实现更好的<b class='flag-5'>维护</b><b class='flag-5'>性</b>和可行<b class='flag-5'>性</b>应用说明

    代码整洁之道-大师眼中的整洁代码是什么样

    几个月前写了一篇文章“如何写出难以维护代码”,从中能大概了解到不好维护代码是什么样,有哪些坏味道,那肯定有人会反问,难以维护
    的头像 发表于 09-09 16:30 243次阅读
    <b class='flag-5'>代码</b>整洁之道-大师眼中的整洁<b class='flag-5'>代码</b>是什么样

    深入浅出系列之代码可读

    ”,这是对我最大的鼓励。 一、老生常谈,到底啥是可读 一句话:见名知其义。有人说好的代码必然有清晰完整的注释,我不否认;也有人说代码即注释,是代码简洁之道的最高境界,我也不否认。但我
    的头像 发表于 08-09 16:00 212次阅读

    该如何提高代码容错率、降低代码耦合度?

    提高RT-Thread代码的容错率和降低耦合度是确保代码质量和可维护性关键,下面列举了几种在编写代码
    的头像 发表于 06-26 08:10 532次阅读
    该如何提高<b class='flag-5'>代码</b>容错率、降低<b class='flag-5'>代码</b>耦合度?

    EMI测试整改:确保电子设备电磁兼容关键步骤

    深圳比创达|EMI测试整改:确保电子设备电磁兼容关键步骤
    的头像 发表于 04-29 14:40 484次阅读
    EMI测试整改:<b class='flag-5'>确保</b>电子设备电磁兼容<b class='flag-5'>性</b>的<b class='flag-5'>关键</b>步骤

    代码开发有哪些优势?

    代码平台以其高效、便捷、低成本的优势,正逐渐成为软件开发领域中的性价比之王。它不仅能够满足快速开发的需求,还能够降低技术门槛和维护成本,提高开发
    的头像 发表于 04-09 16:03 810次阅读
    低<b class='flag-5'>代码</b><b class='flag-5'>开发</b>有哪些优势?

    新能源电池气密检测仪在电池维护中的重要

    密封。电池密封直接关系电池的防水级别。假如电池组轻微泄露,可能会致使水浸蚀电池内部,造成腐蚀或短路等安全隐患。因而,定期开展气密检测是维护确保电池安全的关键一步。
    的头像 发表于 04-06 11:16 319次阅读
    新能源电池气密<b class='flag-5'>性</b>检测仪在电池<b class='flag-5'>维护</b>中的重要<b class='flag-5'>性</b>

    CPCI设计与制造:提高制造关键要素

    。 华秋DFM软件是国内首款免费PCB制造和装配分析软件,拥有 500万+元件库 ,轻松高效完成装配分析。其PCB裸板的分析功能,开发了 19大项,52+细项检查规则 ,PCBA
    发表于 03-26 18:34

    【华秋干货铺】4点搞定Type-C接口的PCB制造设计优化!

    确保信号同步和完整。 CC1/CC2关键引脚的布局 :CC1/CC2是两个关键引脚,它们的作用包括:探测连接,区分正反面,区分DFP(下行端口)和UFP(上行端口),以及主从配置Vb
    发表于 12-08 10:18

    4点搞定Type-C接口的PCB制造设计优化!

    确保信号同步和完整。 CC1/CC2关键引脚的布局 :CC1/CC2是两个关键引脚,它们的作用包括:探测连接,区分正反面,区分DFP(下行端口)和UFP(上行端口),以及主从配置Vb
    发表于 12-08 10:15

    4点搞定Type-C接口的PCB制造设计优化!

    来增加短线长度,以确保信号同步和完整。 CC1/CC2关键引脚的布局 : CC1/CC2是两个关键引脚,它们的作用包括:探测连接,区分正反面,区分DFP(下行端口)和UFP(上行端口
    发表于 12-05 15:06

    php设计模式和应用场景

    PHP设计模式是一套经过实践验证的软件设计经验,它们可以帮助开发人员解决常见的问题,提高代码重用
    的头像 发表于 12-04 14:54 771次阅读

    python如何换行而不运行代码

    Python程序中的换行是指在代码中使用特定的语法来表示换行,以使代码更易读。换行的目的是为了让程序更具可读并提高代码可维护性。然而,换
    的头像 发表于 11-24 09:50 3020次阅读

    基于嵌入式ASIL D产品的开发经验

    软件开发始于需求却不能终于需求,我们在满足需求的同时,还需要考虑代码本身的质量,包括可读可维护性扩展性、可移植
    的头像 发表于 11-21 16:32 398次阅读
    基于嵌入式ASIL D产品的<b class='flag-5'>开发</b>经验