使用ICC AVR和AVR STUDIO的一些差别

转自:http://blog.sina.com.cn/s/blog_6b05425901019470.html

以前无论是51还是STM32,都用keil,算是比较方便的,也不懂得编译器什么的怎么个组成,尤其是用了UNLINK之后,keil这个IDE集成编译环境早就习惯了,早就接触过一点IAR,也没用明白,现在接触AVR之后,编译有了更多的选择,我就迷茫了,不知道用什么。


IAR虽然以前接触过,不过我不喜欢那个编辑界面,即使他代码编译质量很高,看到网上介绍,ICCAVR,GCC,AVRstudio,CVAVR,winAVR等等,我就随便下载了一下,都试试,反正中国破解软件这么方便。GCC貌似很牛,winAVR的program NOTE真心好用,这个貌似是我用过最好用的编辑器了,虽然编译下载不怎么方便,我也搞不明白,就没办法用,但我想学会。CVAVR我没有试。

于是剩下了ICCAVR和AVRstudio,我现在就在用这两个,还不错,ICCAVR比较简洁,启动速度什么的都不错,AVRstudio6界面做的很不错,对于AVR编程来看,用GCC编译器,C语言编写也是很不错的,整个界面让我爱上了编程,真的非常棒。目前,我还不会用AVRstudio仿真,但看到4.0版本可以,应该是可以的,只是我还没学会。最后,就是程序下载,我用的是win7 64位系统,下载比较麻烦,我用志峰的下载软件1.72很好用,网上说AVRfighter也可以用,没去试,我找了好多才找到这个好用的,浪费时间较多,不过,我猜想,AVRSTUDIO是可以下载的吧,但我还没学会,囧啊,英文不好,也不爱折腾软件,这两个我尽快学!

于是我用ICCAVR,AVRstudio两个编译,progisp1.72下载,但是ICCavr和AVRstudio还是有区别的,下面详细叙述了不同之处,当然还有待补充,我用的芯片还只是mega16!
-------------------------------------------------------------------

列出ICC AVR 过渡到 AVR STUDIO时要注意的几个问题

1.头文件更改

ICCAVR使用的是“#include ”

AVR STUDIO更改为“#include ”

在ICC中使用不同MCU的头文件是不同的,在AVR studio中所有MCU的头文件都用“#include ”

2.AVR studio中延时函数可直接使用“#include ”头文件中的延时函数:

void _delay_us (double __us);

void _delay_ms(double __ms);

两个函数的参数均为double型的,通常使用整数延时即可。

(函数最大延时时间是有限制的,参考“util/delay.h”)

3.中断函数写法不同

在ICC 中断函数名可以自定义

列出ATmega16的向量表:


#define IT_RESET 1
#define IT_INT0 2
#define IT_INT1 3
#define IT_TIMER2_COMP 4
#define IT_TIMER2_OVF 5
#define IT_TIMER1_CAPT 6
#define IT_TIMER1_COMPA 7
#define IT_TIMER1_COMPB 8
#define IT_TIMER1_OVF 9
#define IT_TIMER0_OVF 10
#define IT_SPI_STC 11
#define IT_USART_RXC 12
#define IT_USART_UDRE 13
#define IT_USART_TXC 14
#define IT_ADC 15
#define IT_EE_RDY 16
#define IT_ANA_COMP 17
#define IT_TWI 18
#define IT_INT2 19
#define IT_TIMER0_COMP 20
#define IT_SPM_RDY 21

#pragma interrupt_handler user_fuc:Interrupt vector number

如:

#pragma interrupt_handler Time2:iv_TIMER2_COMP

void Time2()

{

}

AVR studio中需添加“#include ”头文件且中断函数名不能自定义

如:

#include

ISR(SIG_OVERFLOW0) //定时器/计数器0溢出中断(ICC AVR 过渡到 AVR STUDIO

4.一些库函数的不同

ICC                         AVR studio

nop()                       asm("nop")

WDR()                    asm("wdr")

CLI()                        cli()

SEI()                       sei()


你可能感兴趣的:(嵌入式)