大家好、
我正在尝试了解除以0对 DSP 的影响。 根据
上一篇文章(https://e2e.ti.com/support/embedded/tirtos/f/355/t/573031)
是三个寄存器(FADCR、FAUCR、FMCR)、它们应在发生零除法时设置一个位。 在中
特别是、应设置 INFO 位。
不幸的是、没有位设置。 我检查了每个寄存器、但没有发现任何变化。
我无法注意到任何位更改。
请、有人能帮我了解要读取的位吗?
Giovambattista Astorino
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.
大家好、
我正在尝试了解除以0对 DSP 的影响。 根据
上一篇文章(https://e2e.ti.com/support/embedded/tirtos/f/355/t/573031)
是三个寄存器(FADCR、FAUCR、FMCR)、它们应在发生零除法时设置一个位。 在中
特别是、应设置 INFO 位。
不幸的是、没有位设置。 我检查了每个寄存器、但没有发现任何变化。
我无法注意到任何位更改。
请、有人能帮我了解要读取的位吗?
Giovambattista Astorino
这是我用于示例的代码:
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
我将所有可见寄存器与比较工具进行了比较。 唯一改变的寄存器是:
这是除法前所有寄存器的导出:
e2e.ti.com/.../BeforeDivision.txt
这是除法后所有寄存器的导出:
e2e.ti.com/.../AfterDivision.txt
我们无法找到 RCPSP 寄存器。
顺便说一下、除法的结果是31。
我还有以下问题:
我应该检查哪个寄存器中的哪个位、以验证是否发生了零除?
哦! 这似乎是我方面的严重误解。 您最初提到了 FADCR、FAUCR、FMCR、它们是浮点状态/控制寄存器。 我假设您正在讨论浮点运算。 但呈现的 main.c 会进行整数除法。 它不会设置浮点标志、很抱歉会产生混淆。 没有[计算]整数指令会设置任何标志。 在这种情况下、唯一正确的做法是明确检查除数是否为非零。 即、您应该在代码中执行它
如果(分母!= 0){结果=分子/分母;}
在这种情况下、RCPSP 是浮点除法子例程中使用的浮点指令、而不是寄存器。
[引用 user="Giovambattista Astorino">如果我错了,请纠正我的错误,如果我修改 main.c,更改类型(让我说我写浮点而不是整数),那么我会看到上述寄存器中有任何变化吗?
[/报价]
即使您看到了一些更改、也不适合依赖它、因为我认为 TI 不会承诺哪些标志会进行[浮点]除法库子例程集。 换句话说、如果您想要可预测的行为、则必须在汇编语言中编写自己的除法子例程。
从另一个角度看。 假设您的目标是检查标志。 但是、它与在除法尝试之前检查除数是否为零有何不同? 在任何一种情况下、它都是"if (seither) do _sings"。。