电子产品世界 » 论坛首页 » 技术分享 » 精华问答集 » GCC,AVR 关于GCC-AVR的问题,高手请赐教!


共2条 1/1 1 跳转至

GCC,AVR 关于GCC-AVR的问题,高手请赐教!

院士
2006-12-22 22:43:00    评分
GCC,AVR 关于GCC-AVR的问题,高手请赐教!



关键词: 关于     GCC-AVR     问题     高手     赐教    

院士
2006-12-22 22:43:00    评分
2楼
问 刚刚下了一个GCC-AVR用,写了一个很简单的程序,用GCC-AVR编译时产生了错误,请高手赐教!
源程序:
#include <AVR/io.h>
void delay(void);
void main()
{
unsigned char i;
DDRD=0XF0;
while(1)
{
PORTD=0XEF;
delay();
for(i=0;i<4;i++)
{
PORTD <<=1;
delay();
}
}
}
void delay()
{
unsigned char i,j,k;
for(i=0;i<120;i++)
  for(j=0;j<120;j++)
    for(k=0;k<50;k++);
}
Makefile只修改了器件为ATMEGA8。
编译时提示错误:
In file included from main.c:1:
D:/WinAVR/bin/../lib/gcc/AVR/3.4.1/../../../../AVR/include/AVR/iom8.h:36:4: #error "Include <AVR/io.h> instead of this file."
main.c:6: warning: function declaration isn't a prototype
main.c:6: warning: return type of 'main' is not `int'
main.c: In function `main':
main.c:8: warning: implicit declaration of function `_SFR_IO8'
main.c:8: error: invalid lvalue in assignment
main.c:11: error: invalid lvalue in assignment
main.c:15: error: invalid lvalue in assignment
make.exe: *** [main.o] Error 1
把原文件包含文件改为#include <AVR/io.h>后可以编译通过,但是有提示:
main.c:6: warning: function declaration isn't a prototype
main.c:6: warning: return type of 'main' is not `int'
请高手指教,小弟感激不尽! 1: see:1.main.c:6: warning: function declaration isn't a prototype
  void delay(void);<---------->void delay()
2.main.c:6: warning: return type of 'main' is not `int'
  void main()---------------->int main(void) {;...;return 0;}
2: 非常感谢勇敢的心大侠,还有一些问题不懂,请赐教!刚刚一时着急写错了,原来的源文件中用#include<AVR/iom8.h>时,有错误,后来改为#include<AVR/io.h>时只是警告!
按照勇敢的心大侠的指导把前后两个delay()函数的声明都改为void delay(void)后不再有警告了,多谢!
请问第一个问题怎么解决?非常感谢! 3: 不用#include <AVR/iom8.h>,只要#include<AVR/io.h>因为在makefile里你会指定mcu型号,编译器会根据这个自动选择头文件 4: 感谢勇敢的心大侠,感谢您的回复! 5: 为什么 main() 一定得是 int 型,而且还要返回呢?不解
请指点 6: 如果你看了反汇编的话:可以看见初始化完成之后,是以?call ?? 将pc指向main的,这句话的后一句一般是rjmp $(循环),可以这样理解,对启动代码而言,main只是一个函数,如果这个函数返回,就循环,不过一般的main都是个大循环,所以正常时main是不可能返回的 7: 勇敢的心你的AVR学的好啊!!!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]