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.

[参考译文] TMS320F280041:HAL_clearDataRAM 问题

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568883/tms320f280041-issue-with-hal_cleardataram

器件型号:TMS320F280041


工具/软件:

TI 团队大家好、

我正在使用 Motor Control SDK 通用工程和实验(通用电机控制工程和实验用户指南(修订版 A))、并对创建的链接器符号(例如 loadStart_user_data & loadSize_user_data)有疑问  。 阅读文档 TMS320C28x 汇编语言工具 v21.6.0.LTS 用户指南(修订版 W)时、请了解以下信息:  

  • 8.6 链接器符号 —  8.6.1 在 C/C++应用中使用链接器符号
  • 表示数据地址的链接器符号 :在 C 代码中,将变量声明为 extern 变量。 然后使用&运算符引用链接器符号的值。 由于变量位于有效的数据地址、因此我们知道数据指针可以表示该值。

Motor Control SDK 通用工程和实验中、有一个初始化函数“void boardInit ()“、该函数中有几个类似的函数调用:    

  • HAL_clearDataRAM ((void *) loadStart_user_data、(uint16_t) loadSize_user_data);

我认为这有一个问题、因为由于 缺少&运算符用法、传递到函数的 loadStart_user_data 的值为 0。 我当前应用的修复程序如下:

    uint32_t sectionSize;
    sectionSize = (uint32_t)&loadSize_user_data;
    HAL_clearDataRAM((void *)&loadStart_user_data, (uint16_t)sectionSize);

由于将 OTP 配置为执行 DCSM 配置的仅仿真操作时、尤其有必要进行此修复。

在将建议的修复应用到 HAL_clearDataRAM 之前、当我连接 JTAG/仿真器时、加载/运行代码。 通过 CCS 进行复位((“Scripts">"Realtime Emulation“ Emulation Control"“ Control">“> Run_Realtime_ with_Reset“;如.c 注释所示)。 我会收到以下错误:

  • 错误消息:  Texas Instruments XDS110 USB 调试探针/C28xx_CPU1 故障读取寄存器 PC:(错误–1142 @ 0x0)器件阻止调试访问、因为其当前正在执行不可调试的代码。 选择“粗鲁重试“以禁用礼貌模式并强制执行操作。 (仿真包 20.2.0.3536)。

在修复之前、我认为由于 loadStart_user_data 缺少&运算符、因此 valeu 0 被传递到函数上。 您能解释为什么新 DCSM 代码会导致  错误消息  修复 HAL_clearDataRAM 之前? 另外,您是否同意该修复程序? 修复后、传递到函数的地址值不再为 0、如以下文章中所述: TMS320F2800132:链接器 cmd 文件中 HAL_clearDataRAM 问题或 load_start - C2000 微控制器论坛 — C2000Tm︎ 微控制器 — TI E2E 支持论坛

如有必要、我可以共享更多信息、例如链接器文件或生成的.map。

此外、当激活 DCSM 模块(不再仅仿真)以从闪存组 0 引导时、扇区 0:

这将生成以下汇编代码:  

     .sect "dcsm_otp_z1_pswdlock"
      .retain
      .long 0xFB7FFFFF
      .long 0x7FFFFFFF     ;Reserved
      
     .sect "dcsm_otp_z1_crclock"
      .retain
      .long 0x4BFFFFFF
      .long 0x3FFFFFFF     ;Reserved
   
     .sect "dcsm_otp_z1_jtaglock"
      .retain
      .long 0x9FFFFFFF
      .long 0x0FFFFFFF     ;Reserved
     .sect "dcsm_otp_z1_gpreg"
      .retain
      .long 0x5AFFFFFF     ;Z1OTP_BOOTPIN_CONFIG
      .long 0x5AFFFFfF     ;Z1OTP_GPREG2
     .sect "dcsm_otp_z1_bootctrl"
      .retain
      .long 0xFFFFFF03     ;Z1OTP_BOOTDEF_LOW
      .long 0xFFFFFFFF     ;Z1OTP_BOOTDEF_HIGH

关于记录和档案管理部门、必须有什么关切? 特别是关于  HAL_clearDataRAM 指令、因为在我建议的修复之前、在仿真期间、电路板会冻结。  我想防止发送错误的 OTP 代码。  

谢谢、

Martin

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

    尊敬的 Martin:

    很抱歉、您稍后的回复、您是否仍需要支持?

    此致、

    Aj Favela.