共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金打赏帖 |
|
|---|---|
| Chaos-nano:专为低资源单片机设计的轻量级协作式异步操作系统(ATMEGA328P轻量级操作系统)—— 详细介绍被打赏¥16元 | |
| FPGA配置被打赏¥10元 | |
| Chaos-nano协作式异步操作系统:赋能MicrochipAVR8位单片机的革新之路被打赏¥15元 | |
| 基于esp32开发时串口工具的注意点被打赏¥24元 | |
| 基于FireBeetle2ESP32-C5开发板的舵机控制被打赏¥20元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板制作的电子相册被打赏¥32元 | |
| 基于FireBeetle2ESP32-C5开发板的超声波测距及显示被打赏¥21元 | |
| FireBeetle2ESP32-C5上RTC电子时钟的实现被打赏¥25元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板读取SD卡被打赏¥23元 | |
| 【S32K3XX】Standby RAM 重启后数据异常问题调查被打赏¥38元 | |
我要赚赏金
