如何在仅支持常量表达的函数中将变量用作参数

我正在使用这个function:

__delay_cycles(var); 

我收到以下错误:

_delay_cycles参数必须是常量表达式

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

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

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

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

嵌入式行业有这么多糟糕的编译器的真正原因是因为嵌入式程序员接受不断地使用非标准垃圾,即使没有理由偏离C标准也是如此。

 if(var==1) __delay_cycles(1); else if(var==2) __delay_cycles(2); else if(var==3) __delay_cycles(3); 

…等等。

    Interesting Posts