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.

[参考译文] TM4C1294NCPDT:ROM_FUNC(……)之间的特殊差异 vs map_function (……) Vs 函数(.....) 调用

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/578788/tm4c1294ncpdt-particular-differences-between-rom_function-vs-map_function-vs-function-calls

器件型号:TM4C1294NCPDT

你好。 也许这是一个天真的问题、也许过去已经回答过、但我找不到任何有关该问题的信息。 当我的代码调用 SysCtlClockFreqSet (SYSCTL_XTAL_25MHz | SYSCTL_MAIN |  SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480、120000000)函数时的主要区别是什么(如果有),就像它被写入并且是 ROM_SysCtlClockFreqSet ()一样。 作为 MAP_SysCtlClockFreqSet(....) ?  所有三个版本的行为似乎都相同。 这些不同的调用是否会向编译器发出有关库要使用的特定方向的信号? 谢谢你。 John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    假设您的代码打算在项目之间共享、 有些项目在带有 ROM 的器件上运行、有些项目在没有 ROM 的器件上运行、因此代码可以很方便地自动调用 ROM 或 API 的闪存版本、而无需在代码中使用#ifdeF-s。 还可能存在函数的 ROM 版本错误、解决问题的方法是使用重建库来执行闪存、而不是 ROM。
    rom_map.h 为访问 ROM 提供了一个自动映射功能。 类似于 ROM_function()
    由 rom.h 提供的 API,提供了一组 map_function() API。 如果该函数在 ROM 中可用,map_function()只需调用 ROM_function();否则它会调用 function()。 如果 ROM 中的版本有错误、则会调用最新 TivaWare driverlib 库中的闪存版本。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、谢谢。 因此、如果我正确的话、当我的代码调用函数()时、编译器将函数()的源代码从我的生产环境 CCS7下安装的 Tiva 库嵌入到最后的 bin 中。 如果我的代码调用 ROM_function()、那么编译器会直接将指向/调用 Cortex-M4处理器该函数的 ROM 地址的指针嵌入到最终的 bin 中。 如果我的代码使用 map_function(),则编译器会检查微控制器上是否有 ROM,如果有,则指向 ROM 中的函数,否则直接从 Tiva 库嵌入代码。 我假设 ROM_FUNC函 数_call_method()、如果存在 ROM、则会导致容器尺寸更小。 对吧? 但是、从 ROM 运行代码的速度比从闪存存储器的 bin 中运行代码的速度慢一点吗? 除非两个存储器、闪存和 ROM 的速度相同。 TM4C1294 IC 上的情况是否如此? 再次感谢您的参与。 John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 John:
    相反、当从 ROM 执行函数时、您可能会看到一些性能优势、 尤其是在系统时钟速度较高的情况下、ROM 始终以系统时钟速率运行、而没有任何等待状态、而闪存无法以最快的速度运行、在某些情况下可能会停止。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还可以 Charles、现在很清楚、非常感谢您。
    所以:
    1)
    a) rom_function ()->从 ROM 运行它,编译器只会在最后一个单元中插入指向函数() ROM 中地址的指针。
    b) map_function ()->从 ROM 运行它(如果 ROM 存在并且函数()存在于 ROM 中)、否则从 Tiva 库嵌入函数()的代码
    c) function()-> eMbed function()的代码来自 Tiva libs

    2) 2)从 ROM 中运行函数(),因为 ROM_function()大小和速度都很有效。

    以上都是正确的?
    谢谢、
    John
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 John:
    您的理解是正确的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢 Charles、
    John