我正在使用这个功能:
__delay_cycles(var);
我收到以下错误:
参数 to
_delay_cycles
必须是常量表达式
很公平!但是我怎么能绕过这个呢?我每次都必须用不同的值延迟我的程序。我从 RS232 接收我的数据,并将其存储在一个int
变量中。我必须使用这个功能,我不能修改它的结构。我正在使用 AtMega16。
立即想到的一个建议是__delay_cycles()
使用常量参数调用,但在循环中执行,并改变循环迭代的次数。
该循环会增加一些开销,因此如果您需要精度,则必须从(常量)参数中减去一次循环迭代的(常量)成本__delay_cycles()
。
不要使用那个功能。这显然是一些不符合 C 语言规则的非标准德克萨斯垃圾。改用片上定时器编写自己的延迟函数,或者在网上找到一个。花费不到1小时的工作时间,这无疑比你思考各种非标准垃圾的意义所花费的时间还要少。
嵌入式行业有这么多蹩脚的编译器的真正原因,是因为嵌入式程序员接受不断地被非标准垃圾填满,即使没有任何理由偏离 C 标准。
if(var==1)
__delay_cycles(1);
else if(var==2)
__delay_cycles(2);
else if(var==3)
__delay_cycles(3);
...等等。