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.

[参考译文] CCS/TMS320F2.8377万S:版本7

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/629676/ccs-tms320f28377s-version-7

部件号:TMS320F2.8377万S

工具/软件:Code Composer Studio

我正在编写一个电机控制代码。 代码中的其中一行可导致除以零。 我从未遇到任何错误。 我想知道CCS是如何处理这一问题的。

我在Simulink中模拟算法时遇到"零除"错误。

请向我提供有关此问题的最新信息。

非常感谢!

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

    如果使用TMU执行除法,则浮点格式下溢或过流的结果将分别设置LUF或LVF标志。 您应该在代码中启用PIE中断12.7 和12.8 ,以便以受控方式捕获和处理此类事件。

    参见本UG第393页了解DIV32说明:
    www.ti.com/.../spruhs1a.pdf

    FPU UG第17页介绍了LUF/LVF标志:
    www.ti.com/.../sprueo2b.pdf

    此致,

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 请展开TMU。 我不认为我在使用它。 另外,从汽车性能角度看,也看不到因零分而出现的任何不良现象。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shyam

    当然。 您使用的设备具有TMU (三角数学单元),它通过多个数学运算(包括浮点除法)扩展了C28x指令集。 您可以通过设置--tmu_support=tmu0编译器开关来指示编译器生成TMU兼容代码。

    在CCS中,右键单击“项目资源管理器”窗口中的项目,然后选择“C2000编译器->处理器选项”。 我不确定您使用的是固定点还是浮点,或者TMU是否已启用。 我猜您使用的是启用了TMU的浮点,在这种情况下LVF/LUF中断将捕获此情况。

    此致,

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已验证我正在使用浮点和TMU。 我非常确信,当我运行代码时,零除法正在发生。 但为什么我在示波器中看到的波形没有异常。 还是LVF/LUF中断正在为解决这一问题做一些事情。 感谢你能抽出时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shyam

    默认情况下,一旦启用LVF/LUF ISR,它将只执行Estop指令,从而停止程序执行。 您应首先编辑文件“F2837xS_DefaultISR.c”中的ISR,以适当的方式处理事件。 我想结果可能会更严重。

    此致,

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

    浮点C1=1,C2=0,C3;
    C3=C1/C2;
    C4=atan2 (1,C3);

    我在监视窗口中看到C3的值为3.3895.3139万e+38,C4的值为0。

    该程序没有停止,继续运行。

    两个交流信号量的除法在电机控制中很常见,这意味着除法为零(或非常接近零)。 但我不确定他们是否编辑了文件“F2837xS_DefaultISR.c”以防止程序停止。 (当然,这是正确的方式!)。