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.

[参考译文] TM4C129ENCPDT:针对 TivaWare 使用 ROM 调用时出现问题

Guru**** 1774975 points
Other Parts Discussed in Thread: CODECOMPOSER, TM4C1294NCPDT, TM4C123AH6PM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/628072/tm4c129encpdt-trouble-using-rom-calls-for-tivaware

器件型号:TM4C129ENCPDT
主题中讨论的其他器件:CODECOMPOSERTM4C123TM4C1294NCPDTTM4C123AH6PM

您好!

我已经使用 TivaWare 2.1.4构建了一个项目、并且一直在从闪存中调用 API。 但是、由于我需要更多的闪存空间、我尝试更改为 ROM 调用(我最近发现这存在)。  

当我将 API 调用从(示例) GPIOPinADC (...)更改为 ROM_GPIOPinADC (...)  对于所有 API、我在编译器中得到"未解析的符号保留"错误。

我确实包含了"driverlib/rom.h"并尝试了"#define target_is_TM4C129_RA2"、但这也不起作用。

如何解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我自己不使用 ROM 调用。 不过、如果您让我们知道您使用的编译器、这将有助于您的 ERSTwhile 帮助。

    我怀疑如果您检查映射文件、您会发现 TIVAWare 调用不占用您的存储空间。 换言之,这一步骤不会给发展带来很大的额外空间。

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

    我建议您将这两个头文件添加到程序中:

    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    

    然后我使用"map_"前缀而不是"rom_"。 它的作用是、如果 ROM_PREFIX 是在 ROM.h 中定义的、它相当于 ROM_PREFIX;如果不是、则相当于没有前缀的函数名。 这样、如果一个基于 ROM 的函数被修复并被替换在 TivaWare 库中、新函数将被放置在闪存中并被使用。 如果没有校正、将使用基于 ROM 的函数。

    示例:

    //
    //配置系统频率。
    //
    G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    

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

    我已经看到"map"前缀可用、但 API 仍会使用闪存的一部分、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所需内容:

    在项目配置中预定义符号:

    Target_IS_TM4C129_RA0或 TARGET_IS_TM4C123_RB1
    PART_TM4C1294NCPDT 或 PART_TM4C123AH6PM (使用实际 p/n)

    (如果我没有弄错、在 Tivaware 的最新版本中、第二个符号已经足够了)

    添加标题:

    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"

    但是、正如 Bob 提到的、MAP_是一个更安全的选择、而不是 ROM_.

    正如 Robert 提到过的、结构良好的程序不需要太多的 Tivaware 调用、因为这些调用往往会在以后驻留在您自己的库中、并且不应占用太多空间... 即使这样、如果您选择"针对大小进行优化"而不是速度、优化也应该能够减少此类重复代码段所需的闪存存储。

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

    虽然"引导代码到 ROM"(似乎)提供了"大量"-但存在"影响调用开销"-这会减小"闪存大小缩减"。   (与供应商的"MCU 安全性"提示("MCU 安全性")非常相似、"封面下方一瞥"证明并不令人兴奋...)

    您真的是"与闪存最大值碰撞?"    正如我经常注意到的-也许"独特的代码函数"可以被"扩展"-这样它们可能"在出现时上升"-但是由于它们的(重复)使用而减小了代码大小。  (即"重复使用")  (注意-您不想"降低"重要功能-您必须调查"高使用率通用功能"、这些功能是此类"整合"的主要候选项。)   也许吧!   ("每种"应用程序都不同-没有什么可以阻止您的"快速/脏"实验-并且在不同的实现方式下对大小进行比较/对比...)