Arduino-Lite, RoboPeak使用的高效轻量级AVR库(2)

本文介绍Arduino-Lite的安装与使用,Arduino-Lite是一款轻量级AVR固件库,简化了Arduino开发流程,支持多种编译与下载方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

这是本系列文章的第二篇,介绍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目录下找到。

在进行下载前,需要确认如下步骤:

  1. 将目标硬件接入PC,得到用于下载的串口号,默认为COM3
  2. 确认Bootloader所使用的波特率,默认为19200
  3. 如果上述数值与默认值不同,请修改当前工程的Makefile脚本,如上文截图所示。

在设备接入PC后,输入make upload命令即可开始烧录,烧录过程如下图所示:

注意:对于非Arduino设备,您可能需要在下载开始前手工重启AVR芯片。

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新提供的函数

Integrated Development Environment for the 8-bit Atmel AVR and XMEGA Microcontrollers •Supported data types: bit, bool, char, int, short, long, float •Fast floating point library with hardware multiplier and enhanced core instructions support for all the new ATmega chips •AVR specific extensions for: •Transparent, easy accessing of the EEPROM & FLASH memory areas, without the need of special functions like in other AVR compilers •Bit level access to I/O registers •Interrupt support •Support for placing bit variables in the General Purpose I/O Registers (GPIOR) available in the new chips (ATtiny2313, ATmega48/88/168, ATmega165/169/325/3250/329/3290/645/6450/649/6490, ATmega1280/1281/2560/2561/640, ATmega406 and others) •Compiler optimizations: •Peephole optimizer •Advanced variables to register allocator, allows very efficient use of the AVR architecture •Common Block Subroutine Packing (what our competition calls “Code Compressor”), replaces repetitive code sequences with calls to subroutines. This optimizer is available as Standard in CodeVisionAVR, at no additional costs, not like in our competitor’s products. •Common sub-expression elimination •Loop optimization •Branch optimization •Subroutine call optimization •Cross-jumping optimization •Constant folding •Constant literal strings merging •Store-copy optimization •Dead code removing optimization •4 memory models: TINY (8 bit data pointers for chips with up to 256 bytes of RAM), SMALL (16 bit data pointers for chips with more than 256 bytes of RAM), MEDIUM (for chips with 128k of FLASH) and LARGE (for chips with 256k or more FLASH). The MEDIUM and LARGE memory models allow full FLASH addressing for chips like ATmega128, ATmega1280, ATmega2560, etc, the compiler handling the RAMPZ register totally transparently for the programmer. This feature is available as Standard in CodeVisionAVR, at no additional costs, not like in our competitor’s products. •User selectable optimization for code Size or Speed •Possibility to insert inline assembler code directly in the C source file •VERY EFFICIENT USE OF RAM: Constant literal strings are stored only in FLASH memory and aren't copied to RAM and accessed from there, like in other compilers for the AVR •C Source level debugging, with COFF symbol file generation, allows variable watching (including structures and unions) in Atmel Studio 6.1 and AVR Studio 4.19 debuggers
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值