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

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

3天内不再提示

优化 DSP 应用程序的工具支持

刘刚 来源:q153605268 作者:h1654155957.9185 2022-07-21 11:34 次阅读

我之前写过关于编写代码和设计数据结构以优化嵌入式系统中的代码大小、性能和功率时可以采取的步骤。这种压缩软件以适应的需求在早期计算机上很常见,但现在在具有千兆字节内存的普通 64 位系统上几乎被遗忘了。嵌入式系统将我们带回到未来,需要恢复这些技能以平衡代码功能与高度受限的内存容量。

pYYBAGLXUUuANssOAABtxomcvSM239.jpg


资料来源:CEVA

很多可能的优化将取决于您对代码的仔细设计和调整。但是构建工具——尤其是编译器和链接器——也可以提供帮助。在本博客中,我将讨论可用于 CEVA 工具箱中这些步骤的选项。在所有情况下,我都将专注于优化代码大小,因为这将是您的主要约束。

编译器选项

当您设计和调试代码时,您几乎肯定会使用-g选项运行,要求生成调试信息。使用此选项运行可防止编译器执行任何可能以使调试复杂化的方式扭曲代码的优化。当您认真考虑优化代码大小时,您将不得不删除该选项。

下一个考虑因素是编译器如何选择优化。默认情况下,它将通过多种方法优化性能。一种方法将通过为循环的每次迭代复制代码来展开(有限大小)for循环。这避免了在每次迭代时设置和测试循环索引的开销,但显然会消耗更多内存。使用-Oz选项将阻止展开,更喜欢较小且稍慢的实现。

编译器可以用来优化性能的另一个选项是内联某些函数(特别是小函数)。这可以消除将参数推入和弹出堆栈以及跳入和跳出被调用函数的开销。但是,如果多次调用该函数,它将再次增加代码大小。使用-INLINE=no选项来禁止这种自动内联。

另一种优化在传统平台上似乎不值得付出努力,但可以对 DSP 上的代码大小产生重要影响。这是为了禁用(视情况而定)编译器对指针别名的保护。这种保护的目的是确保在选择在VLIW机器上并平行一组指令(例如DSP)时,编译器将确保这些说明中的任何指针参考在两个或更多的情况下都无法进入比赛条件其中指向同一位数据。这会限制某些指令可以并行运行的程度。您可以使用选项-alias=restrict强制解释不会发生此类情况,这应该允许推断出更多的并行性。当然,您应该仔细检查并完全回归,以确保这种解释是安全的。

链接器

链接器还可以执行与大小相关的优化。其中之一是删除未引用的函数。这需要一些小心。一些函数可以通过数据指针甚至直接跳转到硬编码地址来调用。而中断服务函数通常通过传统的调用协议来访问。因此这个选项必须考虑多种可能性。它将被自动调用,并且可以使用-keepUnrefFuncs选项禁用。

另一个链接器优化可以进一步减小代码的大小,其中某些符号未被汇编器解析,以便在链接时进行寻址。由于它们开始未解析,因此汇编器必须假定最大可能的大小来寻址目标处理器,当最终在链接器中解析时,这实际上可能是浪费的。如果不采取特殊措施,许多此类符号可能会解析为非常小的地址,但仍会占用最大可能的地址字长。缩小这些位置可以显着缩小总代码大小。这是另一个微妙的任务。在缩小任何给定地址时,必须调整代码中任何位置对该符号后面位置的直接引用。还必须考虑数据对齐要求(有时是特定于处理器的)。每次减少都必须考虑最佳最小编码,不仅对节省空间的影响,而且对其余代码的影响。幸运的是,这些优化是默认执行的。

结合最佳编码实践,谨慎使用这些编译器和链接器选项可以帮助进一步缩小代码和数据大小,以最具成本效益的方式适应您的嵌入式系统。这反过来又增加了您作为经验丰富的嵌入式系统程序员的价值,这始终是一个理想的目标!

审核编辑 黄昊宇

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

    关注

    552

    文章

    7958

    浏览量

    347847
收藏 人收藏

    评论

    相关推荐

    PCM2912应用程序的操作环境

    电子发烧友网站提供《PCM2912应用程序的操作环境.pdf》资料免费下载
    发表于 10-21 09:33 0次下载
    PCM2912<b class='flag-5'>应用程序</b>的操作环境

    Adobe将推出全新免费应用程序

    Adobe近日宣布了一项令人振奋的新举措——从明年起,将推出一款免费的基于网络的应用程序。这款应用的主要功能是为图像、视频和音频创作者提供便捷的“内容凭证”管理工具
    的头像 发表于 10-10 16:54 296次阅读

    DSP/BIOS 5应用程序迁移到SYS/BIOS 6

    电子发烧友网站提供《将DSP/BIOS 5应用程序迁移到SYS/BIOS 6.pdf》资料免费下载
    发表于 09-27 10:54 0次下载
    将<b class='flag-5'>DSP</b>/BIOS 5<b class='flag-5'>应用程序</b>迁移到SYS/BIOS 6

    使用HIC启用外围扩展应用程序应用说明

    电子发烧友网站提供《使用HIC启用外围扩展应用程序应用说明.pdf》资料免费下载
    发表于 09-14 09:44 0次下载
    使用HIC启用外围扩展<b class='flag-5'>应用程序</b>应用说明

    CYW20829应用程序支持GFPS吗?

    CYW20829 应用程序支持 GFPS 吗?
    发表于 06-03 06:56

    无法在Modustoolbox 3.2工具类别中找到客户端控制应用程序,如何解决?

    我最近从 2.4 版升级到了 MTB 3.2 版 我为 343026 BSP 添加了一些示例 但我无法在工具类别中找到客户端控制应用程序。 如何才能解决问题?
    发表于 05-22 07:50

    Anthropic推出iPhone应用程序和业务层

    Anthropic 推出 iPhone 应用程序和业务层,支持使用Claude 3 Opus、Sonnet 和 Haiku 模型
    的头像 发表于 05-07 10:22 380次阅读

    优化嵌入式DSP软件的编译器

    确定哪个索引或一组索引对于优化很重要取决于应用程序开发人员的目标。例如,性能优化意味着开发人员可以使用速度较慢或成本较低的 DSP 来完成相同数量的工作。
    发表于 05-03 09:45 184次阅读
    <b class='flag-5'>优化</b>嵌入式<b class='flag-5'>DSP</b>软件的编译器

    使用Docker部署Go Web应用程序步骤

    大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版和配置文件。而当一个项目中有很多文件的时候,由于很多文件没有同步就会导致错误的发生并且产生很多的问题。
    发表于 04-20 09:33 460次阅读
    使用Docker部署Go Web<b class='flag-5'>应用程序</b>步骤

    应用程序中的服务器错误怎么解决?

    在使用应用程序时,可能会遇到服务器错误的问题。这种错误通常会导致应用程序无法正常运行 ,给用户带来不便。下面将介绍应用程序中的服务器错误及其解决方法,帮助您快速解决这一问题。
    的头像 发表于 03-12 15:13 5431次阅读

    LTE MQTT通信应用程序说明

    电子发烧友网站提供《LTE MQTT通信应用程序说明.pdf》资料免费下载
    发表于 02-21 10:47 0次下载
    LTE MQTT通信<b class='flag-5'>应用程序</b>说明

    为什么无法在modustoolbox™工具箱中打开新应用程序

    我无法在modustoolbox™工具箱中打开新应用程序。 如何解决这个问题?
    发表于 01-31 07:32

    解决方案工具包QE显示[RX,RA]V3.2.0:用于显示应用程序的开发辅助工具

    电子发烧友网站提供《解决方案工具包QE显示[RX,RA]V3.2.0:用于显示应用程序的开发辅助工具.pdf》资料免费下载
    发表于 01-03 09:59 0次下载
    解决方案<b class='flag-5'>工具</b>包QE显示[RX,RA]V3.2.0:用于显示<b class='flag-5'>应用程序</b>的开发辅助<b class='flag-5'>工具</b>

    开发java应用程序的基本步骤是

    ava是一种面向对象的编程语言,广泛用于开发各种类型的应用程序。在开发Java应用程序时,有一些基本步骤需要遵循,以确保应用程序的正确性和可靠性。 1.确定需求:这是开发任何应用程序
    的头像 发表于 11-28 16:52 1482次阅读

    【从0开始创建AWTK应用程序】开发及调试环境搭建

    AWTK是基于C语言开发的跨平台GUI框架。本系列文章介绍如何从0开始创建AWTK应用程序,包括搭建开发调试环境、使用AWTK创建Hello工程并在模拟器上运行、将AWTK应用程序移植到其它平台
    的头像 发表于 11-11 10:00 610次阅读
    【从0开始创建AWTK<b class='flag-5'>应用程序</b>】开发及调试环境搭建