|||
WinAVR(GCC)快速入门
编写:阿莫(armok) / 2005-08-12 / www.OurAVR.com
导读:WinAVR 的配置与 makefile 一直是新手入门的两个难点。我们经过详细的测试,推荐大家不需要作任何的配置, 并且介绍了如何用最简单的方法创建自己的 makefile 文件。利用本文,十来分钟你就能入门 WinAVR /GCC.
我们网站的研发部统一使用 WinAVR(即GCC)。我们会在所有的新手入门范例、应用范例中使用GCC开发代码。详细原因、软件下载及安装方法请参考:AVR开发软件的选择与安装。
软件安装好后,你就能在电脑上看到如下的功能菜单:
说明如下:
名称
说明
Programmers Notepad
GCC语言编辑器。可提供应用程序接口。
Mfile
GCC需要一个叫 makefile 的参数文件才能进行编译。Mfile 是一个工具,可以让用户方便地修改 makefile 上的参数。不过我们不推荐使用它。我们推荐直接用记事本打开 makefile 进行编辑。
AVR Insight
仿真调试工具
TkInfo
GNU的超文本浏览器
Uninstall WinAVR
卸载 WinAVR 软件
WinAVR User Manual
WinAVR 用户手册
GNU Maunals Online
GNU的在线帮助
AVR-libc Manual
AVR GCC的C语言函数库帮助手册
从上表可见,WinAVR 的功能看来很多。但我们只推荐使用PN (Programmers Notepad )。
让我们演示如何使用PN进行GCC代码的编辑、编译。
步骤一:打开 PN 工具
步骤二: 编写C源代码
菜单 File --> Open 打开预先放在 C:\avr_test 目录下的C源文件。这个源文件来自我们的新手入门的第一个范例,文件名叫 main.c 。你可以点击此处下载这个C文件压缩包(需要解压后才能使用,不要改名)。为了方便阅读,我们将这个main.c 排版成彩色的网页格式,你也可以直接点击这里查看main.c 的具体内容。
打开main.c 后,看到如下的界面
你可以直接编辑 main.c 。
编辑完成,保存后,我们就可以进行下面的编译工作。
步骤三: 准备 Makefile 文件
编译能生成可供AVR执行的代码、仿真调试文件等。
可能大家会奇怪,上面的main.c 代码,没有告诉电脑AVR芯片的型号、工作频率等,电脑如何知道这些数据?
WinAVR/GCC 使用一个叫 Makefile 的文件,存放这些参数。在WinAVR上也有一个叫mfile的应用程序去处理这个Makefile 文件。但我们测试时发现,mfile 的缺陷很多,不好用,并且容易弄错。我们推荐大家直接用记事本等,直接编译这个文件。为了方便阅读与修改,我们将最常用的内容,放到Makefile的最前面,并且作了中文注解。
你可以点击此处下载这个makefile文件的压缩包((需要解压后才能使用,不要改名))。为了方便阅读,我们将这个Makefile排版成彩色的网页格式,你也可以直接点击这里查看makefile的具体内容。
在我们的示范Makefile,会看到以下的内容。建议大家只修改:单片机的类型、系统时钟频率、目标文件名及C源文件名这四项。大家可参考我们的示范修改:
#这是一个简单makefile,仅用于初学者使用
#修改于WINAVR20050214所生成的makefile
#简单实验只需更改 [单片机类型][目标文件名][C源文件名][系统时钟频率]即可
#修改好参数后另存到单片机程序所在目录,然后执行[make all]命令
#生成 烧录FLASH的*.hex,烧录EEPROM的*.eep,调试用的*.elf 文件
#
# www.OurAVR.com
# MCU name
# 单片机类型 参考格式是:atmega8 / at90s2313 / attiny15
MCU = atmega16
# Processor frequency.
# 系统时钟频率(Hz),用于生成延时 _delay_us() _delay_ms() 见delay.h
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
F_CPU = 1000000
# Target file name (without extension).
# 目标文件名(即生成的.hex/.eep/.elf的文件名)
TARGET = main
# List C source files here. (C dependencies are automatically generated.)
# C源文件名(不带路径)
# 多个文件名间用空格隔开 例如 SRC = file1.c file2.c file3.c
# 不需要加上 h头文件
SRC = $(TARGET).c
#**************后面内容基本不需要修改,除非你是老手*****************************#
# Output format. (can be srec, ihex, binary)
# 输出烧录文件格式
FORMAT = ihex
# Optimization level, can be [0, 1, 2, 3, s].
# 优化级别
# ...... 下面的内容此处省略 ....
将我们这个示范的 Makefile 文件,下载后拷贝到 c:\avr_test 目录中。上面我们已经设置了ATmega16芯片,工作在1M的频率里,主文件名叫 main.c ,只有一个文件。
步骤四:编译 (Make All)
按下图操作。
编译成功后,会有如下的 Process Exit Code: 0 的信息。
如果结果不是0,表明编译有问题,请检查你的 c:\avr_test 目录是否有main.c 与 Makefile 两个文件。
编译成功后,原来只有2个文件的目录,现在变成了如下图的文件清单:
重要说明:如果你需要重新编译一次,最好先运行一下 Make Clean ,以保证编译不受干扰。比如你修改了 Makefile 的MCU类型,如果你不使用 Make Clean, 就会得出错误的结果。
步骤五: 完成。
烧录(ISP下载)、运行,与JTAG调试方法,请参考我们的新手入门中的有关范例。