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
    +关注

    关注

    559

    文章

    8220

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PYQT 应用程序框架及开发工具

    大家好,本团队此次分享的内容为开发过程中使用到的PYQT 应用程序框架及开发工具。 pYqt 是一个多平台的 python 图形用户界面应用程序框架,由于其面向对象、 易扩展(可实现组件编程等
    发表于 10-29 07:15

    如何在应用程序调试期间分析栈和堆使用情况

    ,并在 Unified IDE 中仍可使用。本文涵盖了如何在 Vitis 中使用分析工具应用程序调试期间对栈和堆进行监控。
    的头像 发表于 10-24 16:54 625次阅读
    如何在<b class='flag-5'>应用程序</b>调试期间分析栈和堆使用情况

    蜂鸟E203内核优化方法

    提高程序的响应速度和并行度。 应用程序优化:针对具体的应用场景,优化算法和程序实现,减少资源占用,提高效率。例如,开发需要用到的驱动
    发表于 10-21 07:55

    学生适合使用的SOLIDWORKS 云应用程序

    SOLIDWORKS云应用程序如何满足学生的需求,并介绍其关键功能和优势。 SOLIDWORKS云应用程序是SOLIDWORKS软件与3DEXPERIENCE平台云端设计应用程序和人工智能设计辅助
    的头像 发表于 09-15 10:39 550次阅读
    学生适合使用的SOLIDWORKS 云<b class='flag-5'>应用程序</b>

    使用 USB CDC 下载应用程序固件,用时过长是为什么?

    我已经在PSoC™ 6 WIFI-BT Pioneer Kit 上尝试了 DFU 示例代码,发现了一件奇怪的事情。 如果我使用 UART-over-USB 下载应用程序固件,则只需 20 秒。但是
    发表于 07-14 07:10

    CYBT-343026-01能否使用 HFP 和 AVRCP 制作应用程序

    我们计划使用 CYBT-343026-01 制作使用 HFP 和 AVRCP 的应用程序。 可以使用 CYBT-343026-01 制作使用 HFP 和 AVRCP 的应用程序吗? 根据 QDID
    发表于 07-01 08:29

    Lauterbach TRACE32开发工具现在支持PX5 RTOS

    Lauterbach TRACE32开发工具现在支持PX5 RTOS。这里TRACE32工具支持包括对PX5 RTOS内部结构和数据的访问,使开发人员能够更深入地了解其
    的头像 发表于 06-12 16:38 843次阅读

    HarmonyOS优化应用内存占用问题性能优化

    应用开发过程中注重内存管理,积极采取措施来减少内存占用,以优化应用程序的性能和用户体验。 HarmonyOS提供了一些内存管理的工具和接口,帮助开发者有效地管理内存资源: onMemoryLevel接口
    发表于 05-21 11:27

    如何部署OpenVINO™工具套件应用程序

    编写代码并测试 OpenVINO™ 工具套件应用程序后,必须将应用程序安装或部署到生产环境中的目标设备。 OpenVINO™部署管理器指南包含有关如何轻松使用部署管理器将应用程序打包并
    发表于 03-06 08:23

    请问OpenVINO™工具套件中的验证应用程序是什么?

    OpenVINO™工具套件中的验证应用程序是什么?
    发表于 03-06 06:54

    使用Ozone调试基于nRF9160 Zephyr应用程序

    Ozone是SEGGER免费的嵌入式软件调试器。它是一个强大的工具,可以让你深入了解嵌入式系统中发生的事情。它在调试nRF9160 Zephyr应用程序时特别有用。整理多个线程和多映像构建可能很困难,但这就是你想要的工具
    的头像 发表于 02-25 17:07 1447次阅读
    使用Ozone调试基于nRF9160 Zephyr<b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    导读WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用C语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。用AWTKDesigner新建一个应用程序先安装
    的头像 发表于 02-19 11:49 911次阅读
    AWTK-WEB 快速入门(5) - C 语言 WebSocket <b class='flag-5'>应用程序</b>

    基于HPM_SDK_ENV开发应用程序的升级处理

    基于HPM_SDK_ENV开发应用程序的方式HPM_SDK_ENV是先楫半导体MCU的Windows集成开发环境,其包含HPM_SDK,工具链,依赖工具(cmake,ninja,openocd等
    的头像 发表于 02-08 13:38 1458次阅读
    基于HPM_SDK_ENV开发<b class='flag-5'>应用程序</b>的升级处理

    ANACONDA——关于发布数据应用程序的新简单方法

    我们推出了一款用于发布数据应用程序的开创性解决方案:具有 Panel 应用程序部署功能的 Anaconda Cloud Notebooks。Panel 是一种开源 Python 工具,现在
    的头像 发表于 01-17 11:39 657次阅读
    ANACONDA——关于发布数据<b class='flag-5'>应用程序</b>的新简单方法

    BQ78412应用程序编程接口

    电子发烧友网站提供《BQ78412应用程序编程接口.pdf》资料免费下载
    发表于 12-18 14:46 0次下载
    BQ78412<b class='flag-5'>应用程序</b>编程接口