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.

[参考译文] 编译器/MSP430G2553:编译器不允许进入循环

Guru**** 2589265 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/625789/compiler-msp430g2553-compiler-not-allowing-to-enter-a-loop

部件号:MSP430G2553

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

您好,

我写了一个程序,让ADC变得平均

ADC由计时器读取,我设置了一个标志 ,提醒我可以检索数据(f_wt_ready)

我有以下代码:

inline void AvgAdcOutput (float* weight, char cycles,char display)
{
	char i = cycles;
	*weat =0;
	f_wt_ready =0;
	for (i=cycles;i>0; i-)
	{
		IF (f_wt_ready)
		{
			*WEIGHT +=(float) wt_temp;
			IF (DISPLAY == 1)
			{
				NumToString(wt_temp,msg);
				msg_location = 0x9A;
				f_msg =1;
			}
			f_wt_ready =0;
		}
		else
			I++;

	
	*WEIGHT /= cycles;
} 

在循环之前,我为 新数据检索设置f_wt_ready =0。

但是即使f_wt_ready等于1,循环内的IF也不为true

我认为这可能是编译器的问题,因为当我在  循环之前删除f_wt_ready =0时,它工作正常

此外,在运行时,我不能在循环内部仅在循环外部输入断点。

谢谢你

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

    您是否已声明f_wt_ready "volate"? 您应该通知编译器f_wt_ready可以通过其他执行线程进行更改,否则编译优化后可能会假定它始终为=0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,您会写
    感谢您,今天我学到了新的东西
    voltaile表示此关键字的值可以通过多路访问(线程)更改