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.

[参考译文] LAUNCHXL-F280049C:当系统在独立模式下运行时、DCL 2P2Z 函数 FALL 会触发复位

Guru**** 2445440 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1521314/launchxl-f280049c-dcl-2p2z-function-fall-triggers-reset-when-system-is-running-in-stand-alone-mode

器件型号:LAUNCHXL-F280049C
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好、

我使用的是数字逆变器、并在工程中使用了 C200 器件。

当我在调试模式下运行控制代码时、代码运行良好、但当我在独立模式下运行时、器件会持续进入复位状态。

在浏览我的代码后,我观察到当我调用下面的函数时会发生这种情况  

extern float32_t DCL_runDF22_C1 (DCL_DF22 * p、float32_t EK);

此函数位于 DCLF32.h 所包含的文件中。

我更改了 .c 文件中函数所在的优化级别和其他属性、但问题仍然存在。  

请说明如何解决此问题。

我正在午餐盘上测试我的硬件和代码。

谢谢

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

    您好:

    在调试的第一步中、 DCL_runDF22_C1 是外部汇编函数、因此、您是否 可以检查工程空间中是否存在 DCL_DF22_C1.asm(可以复制或链接)?  

    如果没有、请 在项目空间中提供 DCL_DF22_C1.asm 副本、该副本可在 C2000Ware_pkg/libraries/control/DCL/c28/source 下找到

    此致、

    Sen Wang

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

    尊敬的 Wang:

    感谢您的答复。  

    此步骤已经完成。 汇编文件位于我的工程空间中。

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

    你好、Abayomi、

    感谢您的澄清。 说明一下、当您指的是独立模式时、这是否意味着在闪存中运行?

    如果未在链接器脚本(.cmd 文件)中指定此段、则默认情况下、DCL 函数会映射到名为“dclfuncs"的“的输出段。 它可能隐式映射到 RAM 内存区域、因此会生成非法的代码指令。

    若要进行检查、请查看生成的.map 文件、然后查看  DCL_runDF22_C1 映射到的存储器地址。  

    对于 DCL 等关键函数、我们建议将其存储在闪存中、但在启动时将其从闪存加载到 RAM。 请参阅第 1.4.2 节“从 RAM 执行“: https://software-dl.ti.com/C2000/docs/optimization_guide/phase3/memory.html、遵循与.TI.ramfunc 输出段相同的语法、该语法在启动时也会放置在 RAM 中、并确保您在 dclfunc 段的 device.c 中具有类似.TI.ramfunc 的 memcpy 函数。

    或者、您可以将.TI.ramfunc 和 dclfuncs 添加到一个输出组中 、以便.TI.ramfunc 的现有设置也适用于 dclfuncs。   有关更多详细信息、请参阅 software-dl.ti.com/.../sdto_cgt_Linker-Command-File-Primer.html。

    如果您需要对此做出更多澄清、请告诉我。

    此致、

    Sen Wang

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

    尊敬的 Sen:

    感谢您的答复。

    在独立模式下、我是指将 LaunchPad 连接到 USB 电源来为其上电、而不启动 CCS 调试器。  器件在该模式下进入连续复位状态。

    我已经检查了我的链接器 commnad fine 和.map 文件。  “dclfuncs"段“段在.cmd 文件中进行了划分。

    我已经查看了链接器命令文件、并观察到了以下内容

       - 我有两个 DCL 函数; DCL_PI_L1 和 DCL_DF22_C1。

       -  在 CLA 中运行的 DCL_PI_L1 在闪存和 RAM 存储器中都存在

       - DCL_DF22_C1 仅存在于 RAM 内存中。   

    快照如下:

    我认为这可能是问题,并基于你的解释。

    我将实施您的建议、并在今天为您提供最新信息。

    谢谢。

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

    您好、

    我创建了一个组、然后将 ramfunc 和 dclfuncs 放入其中、但链接器命令文件中的修改不起作用。   

    修改如下。  请注意、可能会出现什么问题。   

    业务线经理

    .TI.ramfunc:{}
    //dclfuncs :{run_start(DCLfuncsRunStart), run_size(RamfuncsRunSize), run_end(RamfuncsRunEnd)}
    } load = FLASH_BANK0_sec7、run = RAMLS0_RAMLS1、start (RamfuncsRunStart)、load (RamfuncsLoadStart)、size (RamfuncsLoadSize); //、PAGE = 0、ALIGN (4) CRC_TABLE (page0_CRC_TABLE、算法= CRC32_PRIME)

    我使用的是 TMS320C28x 汇编语言工具 v22.6.0.LTS 文档第 8.5.11.7.3 节组指南。

    我在想什么呢

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

    尊敬的 Abayomi:

    链接器语法可能会令人困惑、尤其是在串联使用多个说明符时、能否请改用以下语法:

    GROUP   :   LOAD = FLASH_BANK0_SEC7,   // ":" or ": >" both works here
            RUN = RAMLS0_RAMLS1, 
            START(RamfuncsRunStart), 
            LOAD(RamfuncsLoadStart), 
            SIZE(RamfuncsLoadSize); 
            //, PAGE = 0, ALIGN(4) crc_table(page0_crc_table, algorithm = CRC32_PRIME)
    {
        .TI.ramfunc
        dclfuncs
    } 

    这是将两个输出段组合到同一 GROUP 的方法、这意味着任何说明符都将应用于这两个输出段并以相同的方式进行处理。

    或者、两个输出段可以分开、维护各自的说明符。

    dclfuncs   :   LOAD = FLASH_BANK0_SEC7,   // ":" or ": >" both works here
            RUN = RAMLS0_RAMLS1, 
            START(DCLfuncsRunStart), 
            LOAD(DCLfuncsLoadStart), 
            SIZE(DCLfuncsLoadSize),
            ALIGN(8)
    

    (“:“是“:>“的简写、由于 load/run 说明符需要连续的存储器范围、因此在这里不能使用跨多个存储器的语法“:>>“。)  

    此致、

    Sen Wang

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

    您好、  

    感谢您的答复。

    我试过这两个,但它是否定的。  这是非常奇怪的。  未在.map 文件中创建的 DCL 函数放置的 memroy 符号。   

    链接器命令文件的各个部分 如下:

    代码
    dclfuncs:load = FLASH_BANK0_SEC12_13、/* Load to flash、从程序 RAM 运行*/
    RUN = RAMLS0_RAMLS1、
    LOAD_START (DCLfuncsLoadStart)、
    load_size (DCLfuncsLoadSize)、
    RUN_START (DCLfuncsRunStart)、
    对齐 (8)

    ramfunc

    .TI.ramfunc load = FLASH_BANK0_sec7
    RUN = RAMLS0_RAMLS1、
    LOAD_START (RamfuncsLoadStart)、
    load_size (RamfuncsLoadSize)、
    RUN_START (RamfuncsRunStart)、
    PAGE = 0、ALIGN (4)、CRC_TABLE (page0_CRC_TABLE、算法= CRC32_PRIME)

    ramfunc 工作正常、符号是创建的、而 dclfunc 则不工作。

    下面是我的.map 文件的快照:

    下面是复制代码  

    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(uint32_t)&RamfuncsLoadSize);

    Memcpy ((uint32_t *)&DCLfuncsRunStart、(uint32_t *)&DCLfuncsLoadStart、(uint32_t)&DCLfuncsLoadSize);

    这是一种异常现象。  请您向我说明或解释为什么没有创建符号。

    谢谢

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

    尊敬的 Abayomi:

    所以为了确认、   在.map 文件中搜索变量时没有定义变量 DCLfuncsRunStart、DCLfuncsLoadStart、DCLfuncsLoadSize?

    如果是、那么  链接器文件中可能会出现更多语法问题、看起来也是这样、dclfunc 仍然位于 ram 中。 如果您不介意、您能在 E2E 的私人聊天中给我发送链接器脚本的内容吗? 您 以私人方式发送的任何内容都不会与任何外部插座共享。

    此致、

    Sen Wang

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

    是的、我想将其发送给您

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

    您好;

    问题已解决。

    如您所述、链接器命令文件是正确的。  我进行了代码回顾、并 在代码中启用外围时钟后添加了 5 个周期延迟(一些缺失)。  此后会生成符号并解决问题。

    谢谢。

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

    很棒、很高兴听到!