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调试方法,请参考我们的新手入门中的有关范例。
评论