Click here to view English version
这是本系列文章的第二篇,介绍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的srcbootloaders目录下找到。
在进行下载前,需要确认如下步骤:
- 将目标硬件接入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新提供的函数
按要求安装好了,使用ATMEGA8,e:winavr-20090313
修改了makefile,一个最简单的led闪光程序:
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
PIN_MODE(13, OUTPUT);
}
void loop() {
DIGITAL_WRITE(13, HIGH); // set the LED on
delay(1000); // wait for a second
DIGITAL_WRITE(13, LOW); // set the LED off
delay(1000); // wait for a second
}
置于src中(原有main.cpp不动)
make 总是不成功,竟然提示
error:’OUTPUT’undeclared…以及
error:’HIGH’ undeclared…
error:’LOW’ undeclared…
这些不都是许可的吗?还要包含什么文件?最好给一个完整的简单范例
只需要包含arduino_lit.h即可
原先的main.cpp就是范例,是用来修改的,你可以把其中的对应代码替换成你的即可。
很有趣,等有空了试一试。RoboPeak 有成品卖吗? 或者相关资料可以自己DIY一个~
是否可以通过USB串口直接对Arduino的板子进行烧写?
是可以的
为什么我输入make,但是没反应呢?只是另起一行显示sh-2.04$
看上去没有运行过setenv.cmd,如果还是有问题,请告诉我们:-)
请问我在lite上用数字温度传感器 DS18B20 第三方库DallasTemperature 生成的hex 为7146 bytes 而arduino0022生成的为 7050bytes,为什么反比arduino大?
如果直接使用在Arduino下边的库,则因为这些库自身会调用原始Arduino的函数,所以原先的Arduino库函数仍旧会出现在最终程序中。同时又因为最终程序也包含了ArduinoLite代码,就会出现比直接用Arduino体积更大的情况。
可以尝试修改这些库,让他们也调用ArduinoLite函数
您好 我对Lite十分感兴趣 请问能否卖我一个RoboPeak USB Connector!我的邮箱zsq20080505@126.com
需要把原来编译的BUILD文件夹里面的文件删除,就可以了。
是不是有个覆盖的某个功能没设置?
Hi, 没有理解你的问题,能否说的详细些?
❓ csk您好,我使用make upload 上传编译好的hex,会在第一段提示以后停留,没有错误提示,终止后也没有提示,上传的时候片子有重启动作,然后RX闪一下,TX常亮,就没反应了,makefile文件已经修改过:
UPLOAD_PORT := COM8
PORT_RATE := 19200
MCU := atmega1280
F_CPU := 16000000
不知道是不是不被支持呢?
1280应当是支持的,虽然我们没有测试过
但你的情况应该与是否支持无关,毕竟已经编译产生了hex文件。你的现象更像是串口下载线出现问题或者bootloader被破坏
CSK你好,RoboPeak USB Connector现在有成品嘛?
csk你好 setenv.cmd 怎么运行?
可不可以写点打基础的学习资料呢?之前没有接触过AVR,刚听说Arduino的人也大有人在咯!!我就是这样的,下载bootloader不成功,也不知道怎么配置熔丝位才正确~~~~着急!