这是本系列文章的第二篇,介绍Arduino-Lite的安装、使用和进行开发。
Arduino-Lite是由RoboPeak开发并使用的轻量级且高效率的AVR固件库,他基于Arduino项目的固件库改良而来,我们保留了Arduino固件库的简单易用的风格,同时有效的缩小了固件的代码尺寸,相比Arduino,Arduino-Lite拥有诸多优点。并且,他是相当易于使用的。
关于他的介绍和由来请访问: Arduino-Lite, RoboPeak使用的高效轻量级AVR库(1)
发布在google code上的Arduino-Lite的包含如下部分:
使用者仅需下载arduino-lite并配合操作系统带有的文本编辑器(notepad, vim)即可完成AVR程序编写、编译、烧录/下载甚至调试的全部过程。无需安装任何额外的第三方库。当然,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。在下载完毕后,将他解压缩至任何路径即可,无需安装过程。
在google code的Source区域可以以匿名方式签出(check out) Arduino-Lite的最新版本或者历史上的任意版本。在签出后可以直接使用本地工作目录,无需安装过程
在下载Arduino-Lite(并解压缩)后,应该看到如下的目录结构:
其中
虽然Arduino-Lite源代码对当前开发环境(操作系统,机器配置)不存在任何要求,但目前我们的编译环境仅在windows上使用,您可以稍作修改使得他在Linux/MacOS上工作,我们也将在未来提供这些支持。
我们已经测试过如下操作系统可以正常运行Arduino-Lite的编译系统:
当首次在计算机上使用该运行库时(刚从SVN上check-out或是刚从下载的软件包中解压缩),执行位于Arduino-Lite根目录下的buildenv.cmd文件。他将负责配置Arduino-Lite所依赖的工作环境:
你应该会看到如下的命令行窗口:
当该脚本完成执行后,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固件的运行环境(芯片型号、时钟频率等),请参考后文。
可以直接在src文件夹下增加额外的代码文件(支持.cpp, .c, .S, .h, .hpp),也允许直接添加子目录在src文件夹下。
Arduino-Lite将自动编译src文件夹下的所有可识别源代码文件(.cpp, .c, .S, .h, .hpp),无需修改Makefile脚本。
例如,如下是RoboPeak一个Arduino-Lite的工程结构。Arduino-Lite可以自动编译整个代码树。
以下情况需要修改Makefile脚本
如果不修该Makefile脚本,当前的Arduino-Lite工程将会产生用于Atmega168芯片,工作于16Mhz的固件代码。
Arduino-Lite支持通过串口的AVR bootloader进行固件下载(Arduino兼容),也支持通过RP USB Connector进行空白AVR芯片的烧录。如果需要配置bootloader串口波特率等情况,此时需要修改Makefile
在使用RP USB Connector进行目标AVR烧录时,可以在Makefile中指定需要配置的熔丝位数据
如果不满于默认编译src下所有源代码的方式,或者希望引用除了Arduino-Lite固件库之外的库文件,此时需要修改Makefile脚本
Makefile脚本位于每个工程的跟目录下,可能需要改动的部分均以TODO:标识注明,如下例子是会命令Makefile产生基于Atmega48,工作在1Mhz的固件。并且将使用COM3串口利用芯片上的bootloader进行下载:
Arduino-Lite使用标准的make命令进行项目的编译。为了执行make命令,可以执行位于工程根目录下的launchsh.cmd脚本,此时将启动bash shell。
在提示符环境输入make,即可开始工程的编译:
3.5.1 给Arduino版(以及兼容版)编程
可以使用make upload命令给具有支持STK500v1协议bootloader的AVR芯片编程。这包括:
该固件源代码和预编译版本可以在Arduino-Lite的src\bootloaders目录下找到。
在进行下载前,需要确认如下步骤:
在设备接入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支持如下烧录指令: 他们的使用和说明见后续章节。
编译相关:
编译当前工程
清除上次编译的结果
芯片下载/编程
将hex经过串口上传到目标AVR芯片内(通过STK500v2协议的bootloader)
将hex经过USB上传到目标AVR芯片内(通过HidBootloader)
将hex通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)烧写到目标AVR芯片
通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)擦除目标AVR芯片的数据
通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)给目标芯片配置熔丝位
通过RoboPeak USB Connector编程器(或者Avr-doper兼容设备)给目标芯片配置Lock bit
代码分析和调试
将编译产生的elf(*.elf)文件反汇编至AVR汇编代码
将编译产生的目标文件(*.o)反汇编至AVR汇编代码
在后续文章中,我们将介绍Arduino-Lite新提供的函数