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.

[参考译文] CCS/EK-TM4C1294XL:毕竟没有进行如此优化?

Guru**** 2966500 points

Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/943331/ccs-ek-tm4c1294xl-not-so-optimized-after-all

器件型号:EK-TM4C1294XL

工具/软件:Code Composer Studio

我刚刚发现、我将会称为编译器错误。 或者可能是优化器错误?

我有这个等待循环:

US_DELAY=false;

while (!us_DELAY)
{
} 

US_DELAY 在计时器中断例程中设置为 true。

在汇编中、此代码转换为:

MOV R1、#0
strb R1、[R4]

ldrb r0、[R4]

$C$L1:
CMP r0、#0
beq $C$L1

换句话说、us_delay 的读数已放置在循环之外! 循环会一直持续!

在中断处理程序中、R0实际上设置为1、但在离开处理程序时、R0会以某种方式设置回0。 没有明显的指令执行此操作、因此它必须是从处理程序返回的一部分?

-

这是将优化设置为全局的。 如果我完全禁用优化、它将正常运行。

我尚未尝试其他优化设置。

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

    您是否将变量 us_delay 声明为易失性? 该关键字是告知编译器/优化器该值可以在当前线程的范围之外更改的必要条件。  

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

    这是一个小帮手!

    谢谢。

    。

    剩下的一切就是该线程被置于其他微控制器下的原因。 我想把它放在 CSS 下吗?

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

    不确定为什么它出现在"其他微控制器"下。 这是 EK-TM4C1294XL 问题的合适小组、但如果您将其放在 Code Composer Studio 论坛中、那就应该这样。 我将其移至 CCS 论坛、因为它更适合这个问题。