【发布时间】:2019-04-14 18:04:37
【问题描述】:
xc8 中有一个名为__delay_ms() 的内置函数,可让您实现准确的延迟。
我的问题是你只能输入一个常数值,比如__delay_ms(1000) 1 秒。 MPLAB报错
“内联延迟参数必须是常数”
我希望能够放入一个变量,该变量取决于用户从 PC GUI 和 EUSART RX 所需的延迟。
我尝试过使用 const int 但这不起作用。
有没有人知道如何做到这一点?也许是一种以某种方式操纵函数的方法?
更新 - 我在 XC8 的 pic.h 头文件中找到了内置延迟例程。
代码是:
/****************************************************************/
/* Built-in delay routine */
/****************************************************************/
#pragma intrinsic(_delay)
extern __nonreentrant void _delay(unsigned long);
#pragma intrinsic(_delaywdt)
extern __nonreentrant void _delaywdt(unsigned long);
#if defined(_PIC14E)
#pragma intrinsic(_delay3)
extern __nonreentrant void _delay3(unsigned char);
#endif
// NOTE: To use the macros below, YOU must have previously defined _XTAL_FREQ
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
#endif
我假设在另一个 XC8 头文件的某个地方,x 已被编程为只接受一个常数,即 1000,但不能接受一个 const int。
有人对此有任何想法吗?
【问题讨论】: