工具/软件:TI C/C++编译器
您好、对于 gcc 9.2.0.50、以下代码编译错误。 之所以观察到这一点、是因为它生成了一个无限循环。
下面的测试用例是我的应用程序的精简版本(它实际上不对向量进行计数;这只是演示错误编译的最小测试用例)
实际上、写入 GPIO 并不是必需的-我将 objdump 输出与源代码相结合非常有用
我可以强制编译器通过禁用某些优化(如下所示)来发出正确的代码、这可能会提供错误发生的线索。 或者可能不是-我不是编译器专家!
如果有人对此进行了探讨、我会非常感激、因为我不会经常在这些论坛上闲逛
/*----------------------------------------------
*使用以下代码进行编译:
* msp430-gcc -OS -mmcu=MSP430F149 -IC:/ti/msp430_gcc/include test.c
*
*编译器会将函数 vectors_used 错误地转换为
*无限循环
*
*自由洒满易挥发性限定符将会导致正确(但是
*次优)要生成的代码。 添加"-fno-tree-dominator-opts"
*-fno-tree-vrp"添加到编译器开关也会导致正确
要生成的*代码
*************************************************************************************************** *
#include
#include
typedef unsigned int U16;
U16 __attribute__((已用)) vectors_used( void )
{
const U16 *地址;
使用的 U16 = 0;
对于(addr=(const U16 *) 0xffe0;addr;addr++){
if (* addr!= 0xFFFF){
P5OUT = 1;
已用++;
P5OUT = 0;
}
}
使用的退货;
}
int main( void )
{
对于(;;){
P4OUT = vectors_used ();
}
返回0;
}