这是本系列文章的第二篇,介绍Arduino-Lite的安装、使用和进行开发。
Arduino-Lite是由RoboPeak开发并使用的轻量级且高效率的AVR固件库,他基于Arduino项目的固件库改良而来,我们保留了Arduino固件库的简单易用的风格,同时有效的缩小了固件的代码尺寸,相比Arduino,Arduino-Lite拥有诸多优点。并且,他是相当易于使用的。
关于他的介绍和由来请访问: Arduino-Lite, RoboPeak使用的高效轻量级AVR库(1)
1. Arduino-Lite的构成
发布在google code上的Arduino-Lite的包含如下部分:
- Arduino-Lite固件库源代码代码
- WINAVR (avr-gcc) 编译器
- Arduino-Lite编译系统
- 工具程序
- 例子工程和工程模板文档
使用者仅需下载arduino-lite并配合操作系统带有的文本编辑器(notepad, vim)即可完成AVR程序编写、编译、烧录/下载甚至调试的全部过程。无需安装任何额外的第三方库。当然,Arduino-Lite并不阻止你使用已有的软件/库。
2. 下载并配置Arduino-Lite
2.1 获取Arduino-Lite
开放版本的Arduino-Lite可以在google code下载到: http://code.google.com/p/arduino-lite/。您可以通过2种手段获得Arduino-Lite:
- 打包的压缩包
在google code的Download区域有已经打包过的Arduino-Lite,比如arduino-lite-r0.1.zip。在下载完毕后,将他解压缩至任何路径即可,无需安装过程。
- SVN
在google code的Source区域可以以匿名方式签出(check out) Arduino-Lite的最新版本或者历史上的任意版本。在签出后可以直接使用本地工作目录,无需安装过程
在下载Arduino-Lite(并解压缩)后,应该看到如下的目录结构:
- src包含了Arduino-Lite固件库的所有代码
- sketch用于存放用户工程文件,工程模板与例子工程也存在于此
- scripts存放编译环境相关的脚本
- bin存放相关工具程序以及avr-gcc
2.2 环境要求
虽然Arduino-Lite源代码对当前开发环境(操作系统,机器配置)不存在任何要求,但目前我们的编译环境仅在windows上使用,您可以稍作修改使得他在Linux/MacOS上工作,我们也将在未来提供这些支持。
我们已经测试过如下操作系统可以正常运行Arduino-Lite的编译系统:
- Windows XP 32位版本
- Windows Vista 32位 和 64位 版本
- Windows 7 32位 和 64位 版本
2.3 初次使用的配置
当首次在计算机上使用该运行库时(刚从SVN上check-out或是刚从下载的软件包中解压缩),执行位于Arduino-Lite根目录下的buildenv.cmd文件。他将负责配置Arduino-Lite所依赖的工作环境:
- 配置Bash环境(基于msys)
- 展开WINAVR(avr-gcc)目录树
- 配置环境变量(如果需要)
你应该会看到如下的命令行窗口:
当该脚本完成执行后,Arduino-Lite就可以使用了。
3. 使用Arduino-Lite进行开发
3.1 创建一个Arduino-Lite工程
Arduino-Lite自身的编译系统采用简单易用的设计哲学创建新的工程,无需借助第三方工具,也无需编写Makefile脚本 (必要的修改是需要的) ,即可迅速创建出可以直接进行AVR代码编译、下载/烧录的Arduino-Lite工程。 当然,传统的编写Makefile、使用AVRStudio, Eclipse等IDE构建、或者使用ArduinoIDE环境都是可以的。
在Arduino-lite目录结构下的sketch用于存放使用Arduino-Lite编译系统的工程项目文件夹。这里我们假设要创建的AVR项目名为myAVR,按照下面的步骤,无需安装任何额外工具也无需编写Makefile
a. 解压缩位于sketch目录下的template.zip压缩文件到sketch目录,得到如下所示的目录结构
(此时位于sketch/template/目录下应该存在launchsh.cmd等文件)
template.zip是Arduino-Lite工程的模板,其中包含了直接可以运作的编译脚本(Makefile)以及位于src/main.cpp的模板框架代码。
Arduino-Lite的编译系统使用Make脚本进行源代码编译,并使用bash shell环境进行操作。可以使用launchsh.cmd启动bash shell环境(参考后文)。
b. 将解压缩的template目录重命名为您所希望的工程名称,例如这里的myAVR
至此,一个新的Arduino-Lite工程创建完毕,他会负责编译出基于Atmega168,工作在16Mhz的AVR固件。从template.zip模板创建而来的工程包含了控制11号引脚LED渐量效果的例子程序。如果要修改产生的AVR固件的运行环境(芯片型号、时钟频率等),请参考后文。
3.2 往工程中添加文件
可以直接在src文件夹下增加额外的代码文件(支持.cpp, .c, .S, .h, .hpp),也允许直接添加子目录在src文件夹下。
Arduino-Lite将自动编译src文件夹下的所有可识别源代码文件(.cpp, .c, .S, .h, .hpp),无需修改Makefile脚本。
例如,如下是RoboPeak一个Arduino-Lite的工程结构。Arduino-Lite可以自动编译整个代码树。
3.3 何时需要修改Makefile脚本?如何修改?
以下情况需要修改Makefile脚本
- 固件的目标硬件环境与Makefile脚本默认的情况不同。
如果不修该Makefile脚本,当前的Arduino-Lite工程将会产生用于Atmega168芯片,工作于16Mhz的固件代码。
- 需要设置目标硬件的下载/烧录方式
Arduino-Lite支持通过串口的AVR bootloader进行固件下载(Arduino兼容),也支持通过RP USB Connector进行空白AVR芯片的烧录。如果需要配置bootloader串口波特率等情况,此时需要修改Makefile
- 需要修改目标AVR芯片的熔丝配置
在使用RP USB Connector进行目标AVR烧录时,可以在Makefile中指定需要配置的熔丝位数据
- 需要自定义编译的文件、引用额外的代码库
如果不满于默认编译src下所有源代码的方式,或者希望引用除了Arduino-Lite固件库之外的库文件,此时需要修改Makefile脚本
Makefile脚本位于每个工程的跟目录下,可能需要改动的部分均以TODO:标识注明,如下例子是会命令Makefile产生基于Atmega48,工作在1Mhz的固件。并且将使用COM3串口利用芯片上的bootloader进行下载:
3.4 编译工程
Arduino-Lite使用标准的make命令进行项目的编译。为了执行make命令,可以执行位于工程根目录下的launchsh.cmd脚本,此时将启动bash shell。
在提示符环境输入make,即可开始工程的编译:
- 红色框代表了固件将消耗的AVR程序存储空间(Flash)大小(单位 byte),可用以判断当前固件是否可以完整烧录/下载至目标芯片。
- 而橙色框的数字综合代表了程序所消耗的全局内存的下限。可用来评估目标芯片是否有足够内存保证该固件的正常执行。
3.5 将代码下载/烧写到目标硬件设备
3.5.1 给Arduino版(以及兼容版)编程
可以使用make upload命令给具有支持STK500v1协议bootloader的AVR芯片编程。这包括:
- Arduino硬件以及他的兼容版大多带有上述Bootloader
- 任何预先烧录了该bootloader的AVR硬件
该固件源代码和预编译版本可以在Arduino-Lite的src\bootloaders目录下找到。
在进行下载前,需要确认如下步骤:
- 将目标硬件接入PC,得到用于下载的串口号,默认为COM3
- 确认Bootloader所使用的波特率,默认为19200
- 如果上述数值与默认值不同,请修改当前工程的Makefile脚本,如上文截图所示。
在设备接入PC后,输入make upload命令即可开始烧录,烧录过程如下图所示:
3.5.2 给任意AVR芯片构成的电路系统编程
Arduino-Lite编译环境集成了对AVR-Doper(http://www.obdev.at/products/vusb/avrdoper.html)及其兼容下载器的支持,可以使用make burn命令通过ISP口给任意AVR芯片烧录程序、配置熔丝等操作。
RoboPeak开发了兼容AVR-Doper协议的USB免驱动AVR编程器:RoboPeak USB Connector,我们将在后续文章中公布并开源他并介绍它的使用方式:请参考:http://www.robopeak.net/blog/?p=133
Arduino-Lite支持如下烧录指令: 他们的使用和说明见后续章节。
- make burn
- make fuse
- make lock
- make erase
3.6 可用的编译参数
编译相关:
- make或者make all
编译当前工程
- make clean
清除上次编译的结果
芯片下载/编程
- make upload
将hex经过串口上传到目标AVR芯片内(通过STK500v2协议的bootloader)
- make usbupload
将hex经过USB上传到目标AVR芯片内(通过HidBootloader)
- make burn
将hex通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)烧写到目标AVR芯片
- make erase
通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)擦除目标AVR芯片的数据
- make fuse
通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)给目标芯片配置熔丝位
- make lock
通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)给目标芯片配置Lock bit
代码分析和调试
- make dump
将编译产生的elf(*.elf)文件反汇编至AVR汇编代码
- make dumpobj
将编译产生的目标文件(*.o)反汇编至AVR汇编代码
在后续文章中,我们将介绍Arduino-Lite新提供的函数