初学AVR,请教AVR studio gcc 优化问题

2019-03-24 21:13发布

我使用-Os优化选项,发现编译后程序没法用。查看汇编代码,发现delay函数被优化没了。生成的汇编代码看起来很奇怪
如果不优化程序是没问题的。
请教是怎么回事?我该怎么办?

下面是我的代码:
#include <avr/io.h>
#define uchar unsigned char
#define uint  unsigned int
void delays(uint t)
{
uint j;
for(j=0;j<t;j++)
  ;
}

int main(void)
{
uchar  i;
DDRA=0xff;
for (i=0;i<8;i++)
{
   PORTA=i;
   delays(50);
}
}
附件是生成的汇编的截图: 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
tsunami
1楼-- · 2019-03-25 01:30
怎么没人啊?
tiankai001
2楼-- · 2019-03-25 07:19
恩,以前还真没注意这个问题,我试一下看看能不能回答你的问题
xslff
3楼-- · 2019-03-25 09:11
 精彩回答 2  元偷偷看……
tiankai001
4楼-- · 2019-03-25 09:59
uint j;前面加上volatile限制一下,应该不会被优化掉了
tsunami
5楼-- · 2019-03-25 11:40
是的,的确在uint j;前加volatile能有用
我也知道volatile但就是不知道在哪里加。
现在发现原来是for循环的问题,gcc把这个循环当做是没用意义的东西了。
在for循环里加入一些其他的语句,也没问题。
lws628
6楼-- · 2019-03-25 14:58
受教了,我也想学avr最近,要多多向各位学习!

一周热门 更多>