Atmel Studio 7.0延时参数问题

2019-03-24 20:21发布

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
double a=500;
int main(void)
{
_delay_ms(a);
while (1)
    {
     }
}

用Atmel Studio 7.0编译这段程序编译通不过,报错
__builtin_avr_delay_cycles expects a compile time integer constant

但是把double a=500;移到main函数内就可以编译通过

这个是什么原因,希望哪位高手解析一下。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
dcexpert
1楼-- · 2019-03-25 02:41
delay函数不能用变量,智能用常数。打开头文件看看就清楚了。
dcexpert
2楼-- · 2019-03-25 06:51
全局变量时不能完全优化,放到函数内变为局部变量,会被编译器优化掉。
bearphant
3楼-- · 2019-03-25 07:48
 精彩回答 2  元偷偷看……
bearphant
4楼-- · 2019-03-25 11:55
dcexpert 发表于 2015-12-23 20:49
delay函数不能用变量,智能用常数。打开头文件看看就清楚了。

变量是可以用的,把变量定义放到main函数内就可以用,认为三楼的说法靠谱
dcexpert
5楼-- · 2019-03-25 12:24
bearphant 发表于 2015-12-23 21:55
在atmel studio 7有办法解决吗?

这与AS7无关,是C编译器的问题。为了得到最好的效率和精度,使用了汇编做延时,就只能使用常数。

如果需要使用变量,最好的方法是自己写一个延时函数,或者在自己的函数中调用系统的延时函数。
bearphant
6楼-- · 2019-03-25 16:11
dcexpert 发表于 2015-12-23 22:30
这与AS7无关,是C编译器的问题。为了得到最好的效率和精度,使用了汇编做延时,就只能使用常数。

如果 ...

谢谢了

一周热门 更多>