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/TMS320C6678:除以零位相关

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/578651/rtos-tms320c6678-division-by-zero-bit-related

大家好、

我正在尝试了解除以0对 DSP 的影响。 根据
上一篇文章(https://e2e.ti.com/support/embedded/tirtos/f/355/t/573031)

是三个寄存器(FADCR、FAUCR、FMCR)、它们应在发生零除法时设置一个位。 在中

特别是、应设置 INFO 位。

不幸的是、没有位设置。 我检查了每个寄存器、但没有发现任何变化。

我无法注意到任何位更改。

请、有人能帮我了解要读取的位吗?

Giovambattista Astorino

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我要将其移至器件论坛。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何编译代码。 是否有汇编函数或是否使用 TI 编译器测试此函数。 在 TI 编译器 RTS 库中、我怀疑检测到除零条件、它将返回255、正如您从此处的编译器组响应中看到的:
    e2e.ti.com/.../509287

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

    人们可能必须认识到没有除法指令。 这意味着它应该是执行除法的库函数。 在这种情况下、您可能无法期望某种过于具体的东西。 但是、在任何情况下、如果 RCPSP、单精度倒数近似、使用0输入发出指令、我可以确认除零标志被置位...

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

    这是我用于示例的代码:

    e2e.ti.com/.../3542.4667.main.c

    e2e.ti.com/.../Divide_5F00_by_5F00_zero_5F00_test.cfg

    这是我的设置:

    Code Composer Studio 版本:6.2.0.00050

    C 编译器 TI 编译器 v8.1.2

    我将所有可见寄存器与比较工具进行了比较。 唯一改变的寄存器是:

    • 程序计数器
    • 通用寄存器
    • 计时器寄存器
    • TSR (似乎中断被阻止、但我们无法理解哪个中断)
    • PCIe 寄存器

    这是除法前所有寄存器的导出:

    e2e.ti.com/.../BeforeDivision.txt

    这是除法后所有寄存器的导出:

    e2e.ti.com/.../AfterDivision.txt

    我们无法找到 RCPSP 寄存器。

    顺便说一下、除法的结果是31

    我还有以下问题:

    我应该检查哪个寄存器中的哪个位、以验证是否发生了零除?

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

    哦! 这似乎是我方面的严重误解。 您最初提到了 FADCRFAUCRFMCR、它们是浮点状态/控制寄存器。 我假设您正在讨论浮点运算。 但呈现的 main.c 会进行整数除法。 它不会设置浮点标志、很抱歉会产生混淆。 没有[计算]整数指令会设置任何标志。 在这种情况下、唯一正确的做法是明确检查除数是否为非零。 即、您应该在代码中执行它

    如果(分母!= 0){结果=分子/分母;} 

    在这种情况下、RCPSP 是浮点除法子例程中使用的浮点指令、而不是寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我错了,请纠正我的错误,如果我修改 main.c,更改类型(让我说我写浮点而不是整数),那么我看到前面提到的寄存器中有任何变化吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Giovambattista Astorino">如果我错了,请纠正我的错误,如果我修改 main.c,更改类型(让我说我写浮点而不是整数),那么我会看到上述寄存器中有任何变化吗?

    [/报价]

    即使您看到了一些更改、也不适合依赖它、因为我认为 TI 不会承诺哪些标志会进行[浮点]除法库子例程集。 换句话说、如果您想要可预测的行为、则必须在汇编语言中编写自己的除法子例程。

    从另一个角度看。 假设您的目标是检查标志。 但是、它与在除法尝试之前检查除数是否为零有何不同? 在任何一种情况下、它都是"if (seither) do _sings"。。