我在__delay_cycles
被调用的那一行得到这个错误。#664 expected an integer constant C/C++ Problem
函数参数:__delay_cycles(unsigned long cycles);
这段代码不实用,但演示了我的问题。我尝试启动a
有或没有volatile
-相同的错误。我试着把它类型转换到函数中,没有运气。
代码:
unsigned long a = 100;
void main() {
Pin16_SetAsOutput();
while(1) {
a++;
Pin16_SetHigh();
__delay_cycles(a);
Pin16_SetLow();
__delay_cycles(a);
}
}
查看文档- __delay_cycles
的参数必须是编译时常数,您不能传递在运行时计算的值;
这不是一些你可以强迫工具忽略的任意迂腐的限制,这是因为__delay_cycles
的实现方式使得它不可能做其他事情。编译器生成的实际代码取决于您传入的值,因此在编译时必须知道该值。编译器发出一定数量的指令,可能包括一个硬连接的固定长度的循环,这些指令的执行周期正好是您所要求的。
如果你说const unsigned long a = 100;
,并拿出a++
,这将工作。如果您想要可变长度的延迟,则需要另一种方法,例如将具有常量参数的__delay_cycles()
放入循环中,在确定参数时考虑循环开销。