共2条
1/1 1 跳转至页
GCC,AVR 关于GCC-AVR的问题,高手请赐教!

问
刚刚下了一个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学的好啊!!!
源程序:
#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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |