一篇拖了2年多的文章...目前首发于我们RoboPeak团队网站,可以过去查看中英文版本以及最好的阅读体验。这里只是缩略版本。
RP Blog文章:
Arduino-Lite, RoboPeak使用的高效轻量级AVR库(1) -- 介绍篇
http://www.robopeak.net/blog/?p=42
Arduino-Lite, RoboPeak使用的高效轻量级AVR库(2) -- 使用篇
http://www.robopeak.net/blog/?p=70
Arduino-Lite开发参考文档
我blog早先时候写的一篇相关文章:
说说我从去年9月份开始的AVR单片机学习和使用
Arduino-Lite是我们RoboPeak机器人团队开发使用的轻量级高性能AVR固件库,我们机器人小车的AVR系统中全部采用Arduino-Lite所开发。目前已经将他全部开源了,希望对各位有所帮助。
简介
Arduino固件库提供了非常易于初学者使用的函数库,可以很快对AVR进行开发,即使是专业人员用这个库也会觉得便利。同时他对引脚的抽象编号也有利于固件代码的移植。不过这个库相对体积过大,性能也不理想,所以难以在产品领域使用。这就是我们开发Arduino-Lite的原因所在。
Arduino-Lite包括了2大部分
1) 改良和扩充的Arduino固件库,
提供大多数情况下大于50%的代码尺寸缩小和10倍以上的运行速度加速。同时支持更多的AVR芯片和时钟频率。使得这个库能可被用于对成本和性能敏感的产品应用中
2) 自我包含的编译开发环境
不需要安装任何第三方程序即可完成AVR的开发、下载工作。Arduino-Lite自带了avr-gcc(WINAVR),不过创建新工程非常简单,基本的文件夹复制操作即可自动产生新的工程,也不用编写和修改Makefile脚本,都是智能进行的。
这里先给出2个直观的例子:
实现PWM输出功能:
代码类型 | 代码 | 执行所需的AVR时钟周期 |
Arduino | analogWrite(9, pwm_val); | ~80 |
Arduino-Lite | ANALOG_WRITE(9, pwm_val); | 2 |
Arduino-Lite | PWM_SET(9, pwm_val); | 1 |
avr-gcc直接寄存器操作 | OCR01 = pwm_val; | 1 |
可以看出,Arduino-Lite提供的函数和使用方式与Arduino非常接近,但效率上他有和直接去操作AVR寄存器性能一致。
编写一个PWM驱动LED闪烁程序的代码尺寸对比:
- Arduino库产生的最终代码: 2048 byte
- Arduino-Lite产生的最终代码: 100byte
对于AVR ISP编程器的支持,Arduino-Lite支持Arduino方式的串口下载,也支持HIDboot的USB-HID下载,同时原生支持我们RoboPeak做的开源USB免驱动编程器RoboPeak USB Connector进行AVR芯片编程(见http://www.robopeak.net/blog/?p=133)。
特点和适合使用的场合
同样使用C++/C编写且基于avr-gcc编译器。但与Arduino固件库相比,Arduino-Lite有如下优势。
非常轻量级
使用Arduino-Lite的固件往往比使用Arduino固件库小了50%以上.
高效率
许多Arduino-Lite提供的与Arduino固件相同功能的函数,例如digitalWrite之Arduino-Lite版本:DIGITAL_WRITE仅使用一条AVR指令实现.
支持更多的AVR芯片和时钟频率
除了 Atmega8(A), Atmega168(PA), Atmega328(PA), Atmega1280 芯片外, Arduino-Lite 也支持以下芯片: Attiny2313, Attiny26, Atmega48(PA), Atmega88(PA)
对于时钟频率, Arduino-Lite 支持从1Mhz 至 20Mhz 的频率范围.
除此之外,Arduino-Lite还有如下特点:
自包含,无需依赖任何第三方工具/编译器/库
只要系统中带有文本编辑器,即可直接用Arduino-Lite进行AVR固件开发、编译、烧录等动作。Arduino-Lite自带了avr-gcc(WINAVR)以及相关的函数库。
灵活易与整合的编译环境,基于Make,但无需用户编写或是生成任何Makefile
创建一个新的Arduino-Lite工程,最简单的办法是将模板工程文件夹解压缩并重命名为希望的工程文件。并将相关的源代码以任何目录结构放置于工程目录下,Arduino-Lite就能编译项目,无需用户修改/编写/生成Makefile.
我们认为Arduino-Lite适用于以下领域
- 对固件代码尺寸/器件成本敏感的场合,比如需要使用Attiny或者Atmega48等小Rom尺寸的芯片的场合
- 对固件执行速度有较高要求的场合,比如对实时性要求较高的工控领域和机器人控制器领域
- 喜欢使用Make脚本、自定义IDE等的开发环境
- Arduino/AVR爱好者,且有一定的编程经验,不满足于Arduino IDE环境,期望更高效的固件库
- 希望将Arduino的简易开发特性运用于Attiny, Atmega48以及不同时钟条件下的硬件环境
- 不喜欢命令行界面、Make编译脚本的人群 (我们也有计划将Arduino-Lite支持Arduino-IDE)
- 希望直接使用Arduino各类第三方库,急需应用的情况
实现细节
省略,请参考RP Blog原文:http://www.robopeak.net/blog/?p=42
如何使用
可以在Google code上下载已经打包好的zip包,或者直接checkout 源代码使用,具体见:http://www.robopeak.net/blog/?p=70
开发和配置过程都异常的简单,基本都是鼠标操作即可搞定,也无需以来别的软件、库。
下面有段使用RP USB Connector进行AVR烧录的视频:
(http://www.tudou.com/programs/view/Den9uh3HTHE/)
函数手册
略文,详见:http://www.robopeak.net/blog/?p=107
Arduino-Lite新增函数/宏 | |
基本IO引脚控制PWM输出控制
模拟量采集(ADC)睡眠和延迟 |
中断处理和管理串口通讯
调试功能文本格式化 |