This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/CC2650:如何防止 UART 驱动程序代码链接到我的应用程序中

Guru**** 2585595 points
Other Parts Discussed in Thread: TIMAC, SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/666524/rtos-cc2650-how-to-prevent-uart-driver-code-from-getting-linked-into-my-application

器件型号:CC2650
主题中讨论的其他器件:TIMACSYSBIOS

工具/软件:TI-RTOS

我正在维护一个基于 TI-RTOS 2.11构建的基于 TIMAC 的应用程序。  我的应用程序以前包含 UART 支持、但现在我需要将其删除以节省空间用于其他用途。  我已经从我的应用程序中删除了几乎所有代码、但在我构建代码时、链接 器会根据.map 文件保留来自 UARTCC26XX.orm3的几乎2KB 代码和来自 UART.orm3文件的几个字节。  我在我的应用程序中留下的唯一代码是驱动程序模块似乎需要的代码: uartCC26XXObjects、  uartCC26XXHWAttrs 和 UART_CONFIG 数组的声明。  如果我删除它们、链接器会抱怨 UART.orm3找不到 UART_CONFIG 的定义。  如何删除所有这些与 UART 相关的内容?  谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Michael、

    您使用的是 TI ARM 还是 GCC ARM 工具链? TI ARM 和 GCC ARM 链接器均可配置为删除死码段(默认情况下、TI ARM 可能会这样做? 不确定)。

    根据链接器错误判断、您的代码引用了器件特定板级配置文件中定义的 UART_CONFIG 表。 UART_CONFIG 是 UART_OPEN、引用了 uartCC26XX 对象和 uartCC26XXHWAttrs。 是否确定未调用 UART_open? 即使不是由您提供、而是由您使用的其他驱动程序/堆栈提供? UART (当然)和 Display 驱动程序都使用 UART。

    您能否向我们解释/展示您的应用正在做什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的开发环境是 IAR。  它们的编译器工具链通常会从最终固件映像中删除所有未使用的对象。  如果在某个位置调用 UART_open、它将不会出现在我的应用程序中、因为我删除了所有 UART_open()调用。  我将尝试通过 driverlib 代码进行搜索、以查看使用 UART 可能还有哪些其他功能。  为了回答您的问题、该应用仅基于 TIMAC 库附带的示例、执行一些802.15.4通信并控制一些 GPIO 引脚。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是什么 IAR 版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 IAR Embedded Workbench for ARM 7.40.3。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    浏览 driverlib 代码、似乎不依赖于 UART 驱动程序。 但是、我确实找到了一个生成项目使用的 driverlib.lib 库文件的 makefile、而 makefile 包含 UART 驱动程序。 库不是由我创建的、我不知道生成该文件需要何种环境。 当我从项目中删除 driverlib.lib 并将目录包含在 driverlib 源代码中时、我会收到错误消息、例如"Error[Li005]:No definition for "NOROM_OSCClockSourceGE"[引用自 managed_BIOS_lib.obj (sysbios.arm3)]或"Error[LibertPkg]:no definition for "NOROM_OSCClockSourceGE"[referenced from managed_BIOS_lib_lib_lib_lib.obe.gm (sysb\cntc\vertm3\en\en\cm3\en\cpin_en\cpined\en\cpin_en\cpin_\cpin 顺便说一下、我正在构建引导加载程序应用程序、因此我无法在 ROM 中使用函数、因此上面的"NOROM"版本引用。 如果我想在没有 UART 驱动程序的情况下在 driverlib.lib 上构建我自己的版本、或者绕过 driverlib.lib 文件的创建、直接编译 driverlib 库并将其链接到我的应用、有什么关于如何处理的想法?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    出于某种原因、在 driverlib.lib 库中进行链接时、我不再看到对.map 文件中任何 UART 对象的任何引用、即使自上次重建项目以来、我的配置中没有任何变化。
    此外、我尝试通过将特定文件添加到 IAR 项目树中来将 driverlib 源代码包括在内(而不是使用.lib 库文件)。 代码大小在最高优化级别下降了大约200字节、因此我假设链接器仅链接我的应用所需的 driverlib.lib 库中的对象。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴听到您以某种方式解决了它。

    我应该提到的是、与最新版本相比、您使用的是相对较旧版本的 IAR。 自那时以来、IAR 工具链已经进行了很多错误修复和改进、因此可能会有一个错误、除非您彻底清理/重建项目、否则无法清除未使用的对象。