下面一起来了解一下AVR编程开发的另一款工具——AVR Studio,该软件也是笔者至今都在使用的一款。
AVR Studio是ATMEL公司开发的AVR单片机的集成环境汇编级开发调试软件,完全免费。ATMEL AVR Studio集成开发环境(IDE)包括AVR Assembler编译器、AVR Studio调试功能、AVR Prog串行、并行下载功能和JTAG ICE仿真等功能。它集汇编语言编译、软件仿真、芯片程序下载、芯片硬件仿真等一系列基础功能于一体,与任一款高级语言编译器配合使用即可完成高级语言的产品开发调试。
对于使用汇编的工程师来说,AVR Studio是直接可以运用开发的;而对于使用C语言开发的朋友来说,就需要多安装一个插件了,那就是WinAVR。WinAVR也是一个开源免费的工具,其特点是优化效率高,有利于平台移植。
AVR Studio及WinAVR的安装包都是可以直接从其官网上下载的。这里推荐给读者一个运用比较广的版本,即AVR Studio 4及WinAVR-20070525。对于两者的安装,这里简单介绍如下。
双击AvrStudio4Setup.exe,会出现如图2.11所示的界面,如果你对软件安装在你的系统盘无异议,就可以一直单击“Next”按钮,直至最后单击“Finish”按钮结束整个AVR Studio 4的安装。
图2.11 AVR Studio的软件安装开始界面
接下来安装WinAVR。双击WinAVR-20070525.exe,会出现如图2.12所示的界面,一直单击“下一步”按钮即可完成安装。
它们的安装都是比较简单的,没有什么需要进行特殊设置的。
图2.12 WinAVR的安装向导界面
虽然AVR Studio建立工程的过程与ICCAVR类似,但是也存在软件上的差异,而且两者使用的编译器也是不一样的。下面开始建立AVR Studio的第一个工程。
双击 运行AVR Studio 4,界面如图2.13所示(有一个欢迎界面提示,也可取消掉)。再单击“New Project”按钮新建一个AVR Studio工程,然后会跳出另一个提示框,如图2.14所示。
图2.13 AVR Studio 4的启动界面
图2.14 新建工程界面
在图2.14中先选择编译工具:使用汇编编程的可以选择Atmel AVR Assembler;使用C语言编程的可以选择AVR GCC。而这个AVR GCC就是前面安装的WinAVR。如果没有安装WinAVR,是不会有AVR GCC这一项的。这里选择的是AVR GCC,此时界面的右边部分由不可操作变为可操作,然后输入工程名first_prj及初始化文件名main。界面下方是工程的路径。此处要注意的是,工程的路径一定要是全英文的,不然工程无法编译成功。
单击“Next”按钮,进入仿真器和器件类型的选择界面(如图2.15所示),这里选择的是JTAGICE mkII和ATmega88。单击“Finish”按钮,此时工程已经建立起来,可以开始添加文件了。
图2.15 仿真器与器件类型的选择界面
往工程中添加文件与ICCAVR中的操作相似。在main.h中添加如下内容:
此处与ICCAVR不一样的地方为:不管你选择的是什么型号的器件,只要添加#include <avr/io.h>即可将其包含在里面。
在main.c中添加如下内容:
此处与ICC AVR不同的地方为:main函数的返回类型一定要是int类型的,不然编译后会出现警告信息。对于工程,最好做到无警告,以防编译漏掉一些细节的东西,导致出现不可意料的结果。按下F7或单击“Build”按钮,弹出的编译输出窗口如图2.16所示。从编译输出窗口可以得到一些相关信息,如所选择的器件型号,flash和sram的使用情况等。
图2.16 编译输出窗口
对于一些编程开发来说,一种产品在不同软件平台上运行是十分常见的事。但是不同平台下的程序一般是不能直接移植到另一个平台使用的,需要将该平台特有的东西转换为另一个平台的东西。
下面针对前面介绍过的2个软件,说明从ICCAVR过渡到AVR Studio需要注意的几个地方。
在ICCAVR中使用不同的AVR,其工程的头文件是不同的。如果使用ATmega88V,则添加的头文件是iom88v.h;当更换成ATmega168V时,其头文件应该替换为iom168v.h。而在AVR Studio中,avr/io.h包含了不同MCU的头文件。因此,从ICCAVR过渡到AVR Studio时,只需将“#include <iom88v.h>”更改为“#include <avr/io.h>”即可。
中断函数有两个地方不同:一个是中断服务程序的写法不同;另一个是中断向量号不同。先来看一下ICCAVR的中断服务程序和中断向量表。
ICCAVR的中断服务程序的模板如下:
如表2.1所示为ATmgea88V在ICCAVR软件中的中断向量表。
表2.1 ATmgea88V在ICCAVR软件中的中断向量表
举个例子,如果要在ICCAVR软件中编写定时器2的比较中断服务程序,则内容如下:
对于AVR Studio,先来看一下中断服务程序和中断向量表,再对平台进行比较。
AVR Studio的中断服务程序的模板如下:
如表2.2所示为ATmgea88V在AVR Studio软件中的中断向量表。
表2.2 ATmgea88V在AVR Studio软件中的中断向量表
从中断服务程序模板和中断向量表可以看出ICCAVR和AVR Studio在编写中断函数时的不同之处,因此在进行平台的移植时,需要对对应的地方进行修改,并且在AVR Studio软件中需要添加“#include <avr/interrupt.h>”头文件,才能使用AVR的中断。
表2.3列举了ICCAVR与AVR Studio中几个比较常用的宏定义的比较。
表2.3 两软件中常用宏定义的比较
在这里,可以在原来的宏定义的基础上再使用一次宏定义,以减少程序的改动量。