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.

[参考译文] TMS320F28054F:当 uC 受到保护时、浮点计算错误

Guru**** 2451970 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE, MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1060825/tms320f28054f-float-calculation-is-wrong-when-uc-is-secured

器件型号:TMS320F28054F
主题中讨论的其他器件:controlSUITEC2000WAREMOTORWARE

您好!

当 uC 由 CSM 区域2保护时、浮点运算会出现一些问题。

代码:

volatile float fDebugVal3 = 0.000488234;
volatile _iq iqDebugVal4;

_iq function( uint16_t par1, uint16_t par2, float par3 )
{
    float fReturn;
    
    //some other code
    
	fReturn = fDebugVal3;
	iqDebugVal4 = _IQ( fReturn * 4096.0 );
	return _IQ( fReturn * 4096.0);
}

当上述代码运行时、当闪存受到保护时、变量 iqDebugVal4为0。 代码在受 Zone2保护的扇区 E 之外运行。 变量 fDebugVal3和 iqDebugVal4处于未受保护的 RAML 中。 当我通过#pragma 将这些变量置于受保护的 RAML 中时、我得到相同的0结果。

当我使用调试器运行此代码时、我获得了正确的1.9998结果。

我们使用编译器版本 v20.2.3.LTS。 对于编译器版本21.6.0.LTS、问题相同。 在处理器选项中、我们将--float_support 设置为 softlib。

此致

David

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

    那么、无论变量是放置在受保护的 RAM 中还是不受保护的 RAM 中、结果都是0? 当器件未使用密码进行保护时、结果是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1060825/tms320f28054f-float-calculation-ise-wrong-when -uC-ise-security/3924975#3924975"]因此,无论变量是放置在 RAM 中还是引用0中,都是不受保护的。]

    是的

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/C2000-microcontrollers-forume/1060825/tms320f28054f-float-calculation-ise-wrong-when -uC-ise-security/3924975#3924975"]如果器件没有安全密码、结果是否正确[?]

    是的

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

    您是否检查了.map 文件中的段放置?

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

    是的、我第二次检查这个。 变量被放置在未受保护的 RAML 中、并且此函数从受保护的闪存扇区 E 中调用

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

    我已经就此与软件专家进行了联系。 可能需要几天时间。

    如果您单步执行代码、变量是否在"Expressions"窗口中保存正确的值?

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

    是的、当我调试 uC 时、变量是正确的。 仅当 UC 在没有调试器的情况下运行时。

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

    请附上您的项目。 请从项目中删除所有其他内容、并仅保留重现问题的行。

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

    您好!

    很抱歉耽误你的回答。 这是因为疾病和假日。

    我清理了项目、然后我发现了。 当我在项目中使用这些库时:

    • 2805x_FastSpinRTSROMSymbols-REVA.lib
    • 2805x_IQmath_BootROMSymbols-REVA.lib
    • 2805x_OnlyFastSpinROMSymbols-REVA.lib

    编译器使用 ROM 函数进行浮点计算。 但是、当我删除这些库时、它会将浮点计算复制到闪存、然后结果是正确的。

    为什么不正确、当使用 ROM 函数时、当 UC 通过区域2受到保护且变量处于未受保护的 RAML 中时?

    我如何将项目发送给您、让其他人都无法获得该项目?

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

    尊敬的 David:

    Hareesh 目前正在旅行、请在下周早些时候回复。

    如果需要、您可以通过首先从 Hareesh 请求友谊来私下发送项目(将鼠标悬停在该名称上、您将看到该选项)。

    此致、

    Marlyn

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

    David、

    在 ROM 配置中、IQMath 表位于何处? 当您在两种情况下单步执行 IQMath 指令时、您是否会看到代码的差异?

    -Shantanu

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

    我n`t 单步执行库的代码。 然后、我遇到调试器错误。

    但这里是两个代码反汇编的图像。 左侧是一个、其中不使用 lib、编译器在闪存中获取浮点乘法指令、右侧是错误的指令。 在右侧、有一个对 ROM 的调用。

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

    David、

    您能否在 XAR4、XAR5、XAR6这两种情况下跟踪值、以便我们精确地确定指令/操作的发生位置?

    还要确保在映射文件中正确分配 IQMath 表。  

    最后、您是否在使用 controlSUITE 或 C2000ware 中的库? controlSUITE、请切换到 C2000ware 并尝试。

    -Shantanu

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

    您好、shanty、

    我在6n`t 之前不会跟踪寄存器 XAR4、我们没有相应的硬件。 我请求您与我建立友好关系、我可以将项目发送给您。

    IQMath 表应该正确、因为当使用 DCSM 不安全处理 UC 时、结果是正确的。 以下是映射文件的转储:

    abs   003fc0ea  FD$$MPY                         
    abs   003fc451  FD$$TOL                         
    abs   003fc2eb  FS$$MPY                         
    abs   003fc48d  FS$$TOFD

    我们使用 motorware 1.01.00.18。 n`t 我们不会更改 C2000Ware MotorControl SDK

    David

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

    很抱歉耽误你的时间。 过去几天、我在天气下。  

    我接受了友谊请求。 请将项目发送给我、我将会进行查看

    -Shantanu