共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
【换取手持数字示波器】AHT10温度检测分享被打赏40分 | |
【换取手持数字示波器】ACM32F070开发板点亮LCD屏和触控按键,串口,ADC被打赏40分 | |
【换取手持数字示波器】ACM32F070LCD屏和触控按键功驱动蜂鸣器分享被打赏40分 | |
【换取手持数字示波器】国民技术PWM功能知识分享被打赏40分 | |
【换取手持数字示波器】放大器运放知识分享被打赏40分 | |
【分享评测,赢取加热台】+开关电源AC输入知识分享被打赏30分 | |
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 | |
【换取手持数字示波器】+点亮WS2812RGB灯被打赏50分 | |
【换取手持数字示波器】+线性调整器理论知识分享被打赏40分 |