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.

[参考译文] TMS320F28235:可以#39;t 进入 CPUTIMER ISR 例程、直到我们在此定点 MCU 上将变量的某些声明从"float"更改为"uint&quot

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/725611/tms320f28235-can-t-enter-the-cputimer-isr-routine-until-we-change-some-declaration-of-variable-from-float-to-uint-on-this-fix-point-mcu

器件型号:TMS320F28235

您好专家、

简而言之、我的客户将应用代码 放在 F28235的一个闪存扇区中、将引导加载程序放在另一个闪存扇区中。 在此应用代码中、CPUtimer ISR 例程用于馈入外部看门狗芯片。 当它们从串行引导加载程序更新代码时、CPUtimer ISR 将不会进入、但在进行以下修改后、它会很好地工作。

他们修改的内容是:

在"DSP2823x_CpuTimer.h"中、它们将"CPUFreqInMHz"和"PeriodInUSec"的"float"更改为"uint"。

我不知道这是如何解决的。 我在这里有以下问题:

Q1:F28235是否支持"浮点"类型数据? (我认为是的)。

问题2:如果"是"、他们的修改为何解决了先前的问题?

问题3:如果"不"、为什么在项目构建过程中没有给出错误?

问题4:您能帮助我解释这一问题的根本原因吗?或者我如何缩小对根本原因的搜索范围? 我的客户担心这背后的任何潜在风险。

谢谢!

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

    F28235不支持浮点单元、只有 F28335支持浮点单元、数据表中提到了这一点。 因此、如果您在 F28235上开发代码、则不要使用"浮点"。

    我不知道编译器为什么不给出错误。 我将把它分配给编译器团队、以便更好地帮助您解决这个问题。

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

    尽管对于浮点运算没有硬件支持、但编译器确实提供了浮点运算的软件版本、这就是编译器不会给出错误的原因。

    至于失败的原因、我认为我需要更多信息。 他们将哪些特定值用于变量? 他们是否发现涉及变量的计算结果不好?

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

    尊敬的惠特尼:

    它们具有以下输入值。 请帮助我检查是否存在任何风险。

    BTW、仅当通过引导加载程序更新应用程序时才会发生此问题。 如果它们通过仿真器擦除应用程序和引导加载程序代码并对其进行编程、则不会出现 ISR 未进入问题。 因此、如果这没有风险、我将检查其他器件。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我说过的、编译器可以处理浮点值。 代码大小当然会更大、因为它需要额外的库调用才能在软件中处理它们、但这不是一个风险。

    不过、我很好奇它为什么不能与引导加载程序配合使用。 代码中使用 CpuTimer1.PeriodInUSec 和 CpuTimer1.CPUFreqInMHz 变量的位置是什么? 仅在 PRD 寄存器初始化或其他位置?

    如果您在引导加载程序运行后连接到器件(不使用 GEL 以避免连接时复位)、您能否捕获 CPU 计时器寄存器并查看它们与从仿真器加载时使用的寄存器值有何不同?

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

    尊敬的惠特尼:

    据我所知、这两个变量仅用于在代码中构建 PRD。

    您是否意味着我们 可以将仿真器连接到器件、即使程序正在运行? 请告诉我如何做到这一点吗?

    当时、我要求他们打印这些寄存器的值、因为他们没有串行端口来进行打印。 我让他们使用器件上的 LED 来指示数字。 如果我们可以使用仿真器、这将是一个好消息!

    谢谢!

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

    是的、只要您的硬件允许、您就应该能够连接仿真器并检查事物的状态。 启动调试会话的方式与通常的方式相同、但在连接到器件之前、请转到"Tools"->"GEL Files"、然后右键单击 GEL 文件以将其删除。 然后、您应该能够在不复位器件的情况下进行连接、这意味着您应该能够查看由引导加载程序配置的寄存器。 您还可以为项目加载符号、并在需要时开始单步执行代码。

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的惠特尼:
    它可以正常工作、我们还需要在调试配置中取消选中"Connect to the target on debugger starting"、以实现这一点。 感谢您的帮助、我将进一步调查此问题。