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.

[参考译文] TM4C1294KCPDT:在"new"代码中使用 ROM 映射函数的问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/587503/tm4c1294kcpdt-issues-using-rom-mapped-functions-in-new-code

器件型号:TM4C1294KCPDT

我的印象是、应该使用基于闪存的 Tivaware 例程启动新的固件项目、然后在代码被验证后才转到 ROM_routines。

我正在编写测试固件、作为产品开发的硬件验证阶段的一部分。 我碰巧开始使用 Tivaware driverlib 中的 MAP_函数、假设闪存的使用在将来会成为一个问题、并且还假设如果 driverlib 未编译到我的映像中、则下载代码的更改应该更快。

我注意到、我的固件似乎随机挂起、但仅使用我添加的新代码。 起初、我查看了所有常见的可疑情况、例如指针和中断、但很快就消除了这些问题。 真正奇怪的是、我将#if out the problem code、and then ove to accessing new peripherals、and then revisit after a revisit men 我能够包含以前有问题的代码、它可以正常工作! 只有较新的段才会导致问题。 旧代码突然工作而不被重写(只是被逐字添加到之前失败的内容中)这一事实非常令人沮丧。

最后、我决定停止使用 ROM_FFunctions、以便我可以单步进入 driverlib 函数来诊断问题。 为此、我删除了 rom.h include、但保留了 rommap.h include。 因此,我的代码是用 MAP_*编写的,但我假设没有 rom.h,任何 ROM_*函数都不可用。 我完成此操作后、我立即开始处理编译器错误。 我通过为我正在使用的各种外设添加标头来修复这些编译器错误。 这似乎已经消除了神秘的行为。 我还没有通过返回 ROM 来测试东西,但我假设 ROM_*代码现在可以更好地工作,因为我已经包含了所有必要的头文件。

总之、 当通过 map_*宏访问外设以及同时包含 rom.h 和 rommap.h 时,编译器似乎没有抱怨所有缺少的标头-我的抱怨是代码中的随机故障是由我的固件调用 ROM_functions 导致的 没有正确的 C 语言声明、因此可能会错误地向这些函数发送参数、从而导致灾难性故障。

由于这种体验、我建议创建新固件的用户可能应首先关闭 ROM 选项、以确保所有必要的接头都已安装到位。 在编译功能之后、切换到 ROM 库并节省空间应该是安全的。

我是否遗漏了什么? 我很确定我没有遇到任何构建错误。 如果存在严重的构建错误、Code Composer Studio 通常会拒绝运行我的固件。 在我至少暂时搁置 ROM 之前、我显然会有非常可疑的行为。

欢迎提供意见。

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

    有趣的帖子-谢谢。

    如果这确实是一个问题,其他国家是否有类似的经验?    (我们怀疑并非所有人都是您的级别、但供应商员工肯定会发现这种行为。)

    遗憾的是-我们注意到、"并非所有"供应商发现/发现均已发布或升级。   (即、在特定问题到达/爆发之前、他们保持"安静"状态。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Brian、
    很抱歉听到您遇到问题。 我没有听到其他用户的类似问题。 通常、当我们发现基于 ROM 的函数存在问题时、我们会更正基于闪存的版本中的问题、然后通过从 rom.h 中删除 ROM 版本的定义来弃用 ROM 版本 我个人使用"map_"前缀来广泛使用基于 ROM 的函数。 如果您怀疑有特定功能、请告知我们、以便我们可以对此进行检查。

    如果其他用户有类似的经验、我也鼓励他们添加到此帖子。

    此外、Brian、感谢您通过使用 MAP_前缀并注释掉"ROM.h"、在 ROM 和基于闪存的函数之间进行切换的好方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了澄清、我认为 ROM 中实际上没有任何问题。 观察到的行为从一个构建更改为下一个构建、我认为我能够从我使用的每个 ROM 函数中获得正确的结果-而不是每个构建的结果。 我的最佳理论是、我看到的是编译器问题。

    我很想、即使特定外设的标头尚未包含在内、包含 rom.h 也会让编译器认为它具有 ROM 函数的原型。 这会导致编译器为调用 ROM 函数生成不正确的代码。 当我删除 ROM.h 时、编译器抱怨缺少原型、我必须包含给定外设的匹配标头。 当然、我的成功仅仅意味着等效的非 ROM 函数正在工作、但我怀疑还有更多的工作要做。

    在我花更多时间填写固件以练习电路板上的所有硬件后、我计划返回并添加 rom.h 以确认所有硬件仍然正常工作。

    底线:我的帖子旨在警告那些从头开始构建新固件的用户、而不是编辑已包含所有相应标题的示例。

    警告是:如果您使用的是 ROM.h、请不要依赖编译器查找函数原型并发出有关缺少函数原型的警告! 要么关闭 ROM 映射、要么非常小心地包含所有适当的头文件。

    如果有人可以确认我看到的内容、或建议使用 Code Composer Studio 设置、拒绝运行没有适当函数原型的编译、请在此处回复。