推荐win avr学习资料:ICCAVR向WinAVR过渡指南

mac2022-06-30  70

推荐win avr学习资料:ICCAVR向WinAVR过渡指南

 

在中国电子开发网看到这篇文章,觉得很有用,并且对初学者特别适合阅读

对于利用win avr编程的人,或者从iccavr转向winavr的人,都非常有用:

转载如下:原文见http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3545016

2009.07.19开始学习GCC编程,将之前ICC编译的例程在GCC环境下重新编译。 此文档主要记录了使用WinAVR过程中遇到的问题和对应的解决办法,不足之处请大家指正,同时希望大家继续补充,使更多即将由ICCAVR转向WinAVR的朋友或使用WinAVR的朋友更好的使用WinAVR。 ***以下内容为文档摘录:*** 以下内容硬件兰本为ATmega16,软件版本为:ICCAVR7.14+WinAVR-20090313,并以附录2个功能完全一样的ICCAVR和WinAVR程序为例来对ICCAVR向WinAVR的过渡技巧进行叙述,以供由ICCAVR向WinAVR过渡的朋友参考,不足之处,欢迎反馈,一起探讨。 1、头文件需要更改 ICCAVR中使用的“#include <iom16v.h>”需更换为“#include <avr/io.h>” 其他头文件应以程序而定,可参考WinAVR手册。 2、WinAVR中延时函数可使用“#include <util/delay.h>”头文件中的延时函数: void _delay_us (double __us);    //微秒级  void _delay_ms (double __ms);    //毫秒级 两个延时函数的参数均为double型,通常我们使用整数延时即可, 如:_delay_ms(100); //延时100ms 需要注意的时,两个延时函数的最长延时时间都是有限制的,请查阅“util/delay.h”有详细说明。 3、WinAVR中没有参数的函数需写出“void”,如:void LED_on(void);否则出现下面警告: warning: function declaration isn't a prototype WinAVR中没有类型的函数需写出“void”,如:void LED_on(void);否则出现下面警告: warning: data definition has no type or storage class //提示没有返回类型 warning: type defaults to 'int' in declaration of 'LED_on' //编译器将其类型定为默认的“int”型 4、WinAVR源程序的最后一行需增加一个空行,否则出现下面警告: warning: no new line at end of file

  (原文件名:1.jpg)  引用图片

5、中断函数写法两者不一样 WinAVR中使用中断时,需添加“#include <avr/interrupt.h>”头文件: #include <avr/interrupt.h]> ISR(ADC_vect)          //中断名(中断向量名称) {    // user code here   //用户程序 }  中断向量名称可在:“avr-libc Manual [WinAVR]”的“<avr/interrupt.h>”中查询 6、WinAVR位操作与ICCAVR不同,在“sfr_defs.h”头文件中定义出:    #define _BV(bit) (1 << (bit))    因“sfr_defs.h”头文件已经被“avr/io.h”头文件所包含,所以使用位操作时只需添加“avr/io.h”头文件即可 7、WinAVR中,不同型号的单片机的头文件已被“avr/io.h”所包含,因此不需要添加额外对应型号的单片机头文件,这个很方便。 8、WinAVR中多文件编译解决办法,参考附录WinAVR例程:

  (原文件名:2.jpg)  引用图片

  ①每个.c文件对应一个.h文件,.h文件中写出.c文件的所有函数声明,其他.c文件调用该.c文件中的函数时,只需包含该.c文件的.h文件即可。 ②Makefile文件中需列出所有.c文件的清单,以空格隔开。 ③满足上面两步即可实现WinAVR的多文件编译。 9、WinAVR中空指令使用没有定义“nop();”,可以使用“asm("nop");” 10、WinAVR中全局中断操作使用:“cli(); //禁止所有中断”和“sei();  //开全局中断”,它在“<avr/interrupt.h>”中定义,需将其包含;而ICC中为大写:“CLI(); //禁止所有中断”和“SEI();  //开全局中断”。 11、WinAVR和ICCAVR最大的不同在于它需要编写单独的Makefile文件,Makefile文件可用“MFile [WinAVR]”工具生成,稍作更改即可,而通常情况下只需更改以下几项: ①芯片类型,此例为“MCU = atmega16” ②芯片工具频率,此例为“F_CPU = 3686400” ③编译输入烧录文件格式,此例为“FORMAT = ihex”(默认) ④目标文件名,此例为“TARGET = main”(默认) ⑤C源程序清单,需以空格隔开,此例为“SRC = $(TARGET).c port_init.c led.c key_scan.c”,默认为“SRC = $(TARGET).c”,需依据程序结构进行添加。

  (原文件名:3.jpg)  引用图片

 

 

 

 

转载于:https://www.cnblogs.com/proteus/archive/2011/11/09/2243424.html

最新回复(0)