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.

[参考译文] 编译器/TMS320F2.8069万:代码增加的意外行为

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/579786/compiler-tms320f28069-unexpected-behavior-with-code-addition

部件号:TMS320F2.8069万

工具/软件:TI C/C++编译器

团队,

我希望您能就一个与此处所述非常相似的问题给我一些指导:

https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/405784</s>40.5784万

但显然基于较新版本的CCS (我的估计是6.x,但我可以确认)。

当我们将一些新函数集成到代码中,甚至不调用这些函数时,会导致某些CLA任务不运行(即完成时不触发中断)。 当我们移除新的线段并重建/装入时,问题就消失了。 此外,当我们删除随机的代码部分时,它似乎也起作用。  我有链接器和地图文件,可以脱机共享,但没有什么特别突出的问题。 RAML2是唯一更改的部分,似乎.ebss和.esysmem已分配到该部分,但仍有大量未使用的空间。

您是否可以提供任何有关我应该在代码中查找的潜在编译器错误或危险信号的指导?

最佳,

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

    在2.8069万上,CLA代码需要在RAML3中,而CLA数据段可以进入RAML0,L1,L2。 您是否专门将Cla1Prog分配给RAML3? 新代码是否以某种方式移动CLA部分? 我会在代码更改之前和之后对映射文件进行比较,并查看CLA部分如何受到影响。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Vishal,

    我感谢快速响应。

    Cla1Prog仅与RAML3绑定,而数据部分位于RAML1中。 .scratchpad也位于RAML1中。

    CLAProg1的来源在工作地图文件和非工作地图文件之间发生变化,特别是从003ea0fa到003ea1ec (相同长度,运行地址和对象文件)。 您能否帮助我了解这意味着什么,以及它对计划有何影响?

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

    您好,Lina:

    加载地址在G区内移动,这不应导致任何问题。 memcpy应该可以正常工作。

    是否可以脱机发送“前后.map”,.cmd文件? 让我看看我是否能弄清楚发生了什么。  

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

    原因与F2.8069万 CLA默认中断触发值有关,该值导致错误中断,并带有未使用的任务,即PERINT2SEL =复位时的ADCINT2。 这意味着,如果初始化外围设备(即 ADC)在初始化CLA之前,可能会有ADC中断标志等待,CLA将为其提供服务,这可能会导致不必要的行为。

    解决方案是(一般):
    1.在外围设备(如ADC和PWM模块)之前初始化CLA
    2.在CLA_INIT()中设置PERINTxSEL寄存器后,在启用CLA中断(MIER)之前清除系统中的当前中断标志。

    注意:这些特征不适用于重置为软件触发器而不是ADCINTx的某些较新设备。

    这将记录在TRM中。

    谢谢Vishal!