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.

[参考译文] TMS320F280039:CLA 未进入任务

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1299973/tms320f280039-cla-not-entering-task

器件型号:TMS320F280039

大家好!

我的客户遇到了 CLA 问题。 首先、CLA 正常运行。 在 CLA 任务中更改一段代码后、从

for (I=0;I<1;I++); //案例1

for (I=0;I<2;I++);//案例2

CLA 不再进入任务。 这只是一个空循环。 实际上、 程序 永远不会 到达这个循环、因为这个循环有"if"条件、而且这个条件总是为 false。 似乎这里唯一的区别是 代码稍大。

此外、如果编译优化被关闭、CLA 在这两种情况下都不会进入任务。

在第2种情况中、我可以看到 MIFR 位和 MIOVF 位在不断切换、但任务中具有增量运算符的变量没有增加。  

CLA 任务由 ADC 以55kHz 的频率触发。 在第1种情况中、CLA 需要8us 才能完成任务。  

有任何想法、可能是什么原因造成的?

谢谢。

挂起、

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

    挂起、

    我看不出更改 for 循环中变量的上限会如何阻止任务运行。 如果任务在情况1和情况2中配置相同、则应从 ADC 触发器开始。  

    这只是一个空循环。 实际上, 程序 永远不会 到达这个循环,因为有"if"条件包含这个循环,条件总是为 false。

    您是说编译器优化了循环吗? 如果编译器确定外部"if"始终为 false、则可能会消除内部"for"、因为永远不会执行。

    您如何确定任务未运行? 请尝试在任务中放置一个调试断点、然后查看任务是否暂停。

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

    您好,Lori,ć

    我确定任务没有基于以下几点运行:

     1. 使用  MDEBUGSTOP 将断点添加到任务中。 在第1种情况中、CLA 在断点处停止。 在第2种情况中、CLA 不会停止。

     2.在任务的第一行有一个递增变量,如"cnt++",每次任务执行时这个变量应增加1。 在第1种情况下、该值会增加、而在第2种情况下则不会增加。

    您是否认为编译器优化了循环? I [/报价]

    这种情况不太可能发生。 将优化从0关闭后、即使在第1种情况下、任务也不会运行。 此外,我在案例1和案例2中检查了 CLA 程序的大小(进行了优化),案例2的代码大小比案例1略大数十个字节。 此空循环应保留在编译的代码中、以形成这两个差异。

    基于上述两个事实、我认为在情况2中任务不会运行、但另一个事实是 MIFR 位和 MIOVF 位正在切换。 我的解释 是 CLA 已进入"任务"、但它实际上会跳 转到其他某个地址。 但当我 检查 MVECT 寄存器时、它们与第1种情况相同。

    此致、

    挂起。  

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

    您好、Lori:

    我的客户找到了解决方案。 其 CLA 程序空间覆盖 RAMLS1-6和 RAMLS7的一部分、数据空间覆盖 LS7的其余部分。 在将程序空间限制为仅 RAMLS1-6后、CLA 会在第2种情况下正常进入任务。

    谢谢。

    挂起。