4

我正在使用这个功能:

__delay_cycles(var); 

我收到以下错误:

参数 to_delay_cycles必须是常量表达式

很公平!但是我怎么能绕过这个呢?我每次都必须用不同的值延迟我的程序。我从 RS232 接收我的数据,并将其存储在一个int变量中。我必须使用这个功能,我不能修改它的结构。我正在使用 AtMega16。

4

3 回答 3

3

立即想到的一个建议是__delay_cycles()使用常量参数调用,但在循环中执行,并改变循环迭代的次数。

该循环会增加一些开销,因此如果您需要精度,则必须从(常量)参数中减去一次循环迭代的(常量)成本__delay_cycles()

于 2011-11-08T20:53:14.137 回答
2

不要使用那个功能。这显然是一些不符合 C 语言规则的非标准德克萨斯垃圾。改用片上定时器编写自己的延迟函数,或者在网上找到一个。花费不到1小时的工作时间,这无疑比你思考各种非标准垃圾的意义所花费的时间还要少。

嵌入式行业有这么多蹩脚的编译器的真正原因,是因为嵌入式程序员接受不断地被非标准垃圾填满,即使没有任何理由偏离 C 标准。

于 2011-11-09T12:26:47.830 回答
0
if(var==1)
  __delay_cycles(1);
else if(var==2)
  __delay_cycles(2);
else if(var==3)
  __delay_cycles(3);

...等等。

于 2011-11-08T21:40:43.720 回答