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.

[参考译文] TIDM-02010:启用 SFRA 后出现错误和警告

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1274712/tidm-02010-error-and-warnings-after-enabling-sfra

器件型号:TIDM-02010
主题中讨论的其他器件: SFRAC2000WARE

您好!

我正在使用 `C2000_SFRA_SDK_5_00_00_00 TIDM-02010 0013x`解决方案、目前正在尝试项目的 Ware_Motor 模块、根据编译定义启用 SFRA 后、会出现一些错误和警告。

我修复了错误、但 无法解决警告问题、这让我担心 SFRA 模块未正确启用并且可能损坏。

我为启用 SFRA 模块所做的工作:

编译定义(预定义符号)更改:

```

DAC128S_ENABLE -> DAC128S_ENABLE_N

SFRA_ENABLE_N -> SFRA_ENABLE

```

I 禁用了 DAC128S、因为它与 SFRA 共享 GPIO 引脚

为修复编译错误而进行的代码更改:

这两个错误在 更改编译定义后发生:

```

#20标识符"GPIO_28_SCIRXDA"未定义

#20标识符"GPIO_29_SCITXDA"未定义

```

为了解决这些问题、我在文件`sfra_settings.h`中进行了这些更改

```

diff --git a/src_control/drivers/include/sfra_settings.h b/src_control/drivers/include/drivers/include/sfra_settings.h
索引18d410c..c3d5d06 100644
--a/src_control/drivers/include/sfra_settings.h
++ b/src_control/drivers/include/sfra_settings.h
@@-119,8+119,8k @@Ω extern void configureSFRA (uint16_t plotOption、float32_t sfraISRFreq);
#define SFRA_GUI_SCIRX_GPIO 28
#define SFRA_GUI_SCITX_GPIO 29

-#define SFRA_GUI_SCIRX_GPIO_PIN_CONFIG GPIO_28_SCIRXDA
-#define SFRA_GUI_SCITX_GPIO_PIN_CONFIG GPIO_29_SCITXDA
+#define SFRA_GUI_SCIRX_GPIO_PIN_CONFIG GPIO_28_SCIA_RX
+#define SFRA_GUI_SCITX_GPIO_PIN_CONFIG GPIO_29_SCIA_TX

```

警告

通过 这些更改、可以正确编译项目。

但是、仍然存在三个警告

```
#10247-D 在没有段规范的情况下创建输出段"SFRA_F32_Data" tidm_02010_dmpfc_0013x C/C++问题
#827-D 指定符号'_SFRA_F32_collect'未定义 sfra_settings.h /tidm_02010_dmpfc_0013x/src_control/drivers/include 行60 C/C++问题
#827-D 指定符号'_SFRA_F32_Inject'未定义 sfra_settings.h /tidm_02010_dmpfc_0013x/src_control/drivers/include 第59行 C/C++问题

```

链接器文件问题

在尝试解决这些警告时、我发现链接器文件`sRC_DEVICE/f280013x_FLASH_lib.cmd`存在一些奇怪的问题。

在 其`.TI.ramfunc`中、要链接的第一个库是`est_trajstate_coff.lib`、它不是项目的一部分、但不会导致任何错误。

然后`sFRA_F32_TMU_COFF.lib`也已链接、但它也不是项目的一部分、并且不会引起任何错误。

在删除周围的`#if defined (SFRA_enable)`条件后、链接器现在最终抱怨 在链接期间无法找到文件。

但是  即使使用`#if defined (SFRA_enable)`、链接器也不应该已经在链接文件吗?

文件`sFRA_F32_TMU_eabi.lib`实际上是项目的一部分、因此我将链接文件从`x_coff.lib`更改为`x_eabi.lib`。

现在该工程再次编译而不会出现错误、但警告仍然存在。

拆解

此时我决定尝试使用调试器来实际运行它。

在调试器的帮助下、我能够在调用站点`__ SFRA_F32_collect`分解并步入函数。

函数 Δ 函数`__ SFRA_F32_collect ()`实际上位于地址0x0000A000`μ s 处。根据 TSM320F2800137数据表、该地址应为 LS1 RAM 的开头。

这是否意味着一切都好? SFRA 应该能够正常工作?

但是、这些警告实际上意味着什么呢?

我还注意到`了`_SFRA_F32_xxx `、而不是具有两个前导下划线的 Δ t__SFRA_F32_xxx`。

此时我处于完全损耗状态。 请帮助 澄清以下问题:

1) 1)我启用 SFRA 的方法是否正确?

2) 2)我修复编译错误的方法是否正确?

3) 3)为什么链接器文件.lib 文件名与项目中包含的.lib 文件不匹配? 链接器文件实际上是否重要、因为即使文件名不正确也会编译。

4) 4)如何修复这些警告?

非常感谢您的帮助、提前表示感谢。

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

    快速添加:

    我 使用原始未修改的链接器文件进行编译、反汇编的`__SFRA_F32_collect`函数现在位于0x008cb35中、它是闪存。

    希望这能提供更多的见解。

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

    尊敬的 Ethan:

    在删除周围的`#if defined (SFRA_enable)`条件后、链接器现在最终抱怨 在链接期间无法找到文件。

    但是  即使使用`#if defined (SFRA_enable)`、链接器也不应该已经在链接文件吗?

    [/报价]

    这是一条预处理器指令、因此它依赖常量值来确定编译代码的对象。 因此、除非条件为真、否则 内存中不会内置任何内容(尽管我认为仍有语法检查)。 我会让 一位 SFRA 专家来解答您的其余问题。

    此致、

    阿米尔·奥马尔

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

    您好、Omer:

    我意识到链接器有一个单独的预定义预处理器宏、不受编译器预定义符号的影响。 在`S内确实有单独的` FRA_ENABLE_N 定义。

    但在我将其更改为`SFRA_ENABLE`后、链接过程的运行方式与我移除条件且项目编译失败时的运行方式相似`找不到文件"sfra_f32_tmu_coff.lib"`。

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

    尊敬的 Ethan:

    如果我错了、您能纠正我吗? 因此、您的目标是使用从 C2000_MCSDK_5_00导入的针对 TIDM-2010的 SFRA 库、并且在生成过程中会发现与 SFRA 相关的错误。 您是否可以共享这些错误的片段、因为我重复了相同的过程并且无法看到任何错误/警告。

    谢谢。此致、

    沙山克

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

    Ethan:

    我理解了问题。 是的、您的解析方法正确。

    1.更改预定义符号 SFRA_ENABLE_N -> SFRA_F32_ENABLE

    2.  sfra_settings.h 中的 GPIO_28_SCIA_RX 和 GPIO_28_SCIA_TX 更改

    3. flash_lib.cmd 中的 tmu_eabi.lib 更改

    现在、您提到存在警告。 您能否在 sfra_settings.h 中再添加一项更改

    #pragma code_section (__SFRA_F32_Inject、".TI.ramfunc");
    #pragma code_section (__SFRA_F32_collect、".TI.ramfunc");

    而不是  


    #pragma code_section (_SFRA_F32_Inject、".TI.ramfunc");
    #pragma code_section (_SFRA_F32_collect、".TI.ramfunc");

    谢谢。此致、

    沙山克

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

    Ethan:

    为了删除 SFRA_F32_Data 警告、您需要在段部分的 codestart 行之后的 xxx_flash_lib.cmd 中添加以下行

        SFRA_F32_Data:> RAMLS0D、ALIGN = 64

    我认为这些操作可以解决错误和警告。 如果您遇到任何问题、请告诉我。

    谢谢。此致、

    沙山克

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

    是否还需要将链接器预定义预处理器宏`SFRA_ENABLE_N`更改为`SFRA_ENABLE`?

    如果没有它、实际代码似乎从闪存而不是从 RAM 执行

    此外,行的位置`SFRA_F32_Data :> RAMLS0D, ALIGN = 64`重要吗?

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

    Ethan:

    需要将预定义符号更改为"SFRA Enable"、以启用 SFRA。

    您可以在".codestart"后添加行、如 project_folder/src_device/f280013x_flash_lib.cmd 代码段中所示。

    此致、

    沙山克