最近学习Arduino。
       Arduino开源硬件和Arduino IDE是一个很容易上手的系统。
       目前arduino已经支持很多种板类型,甚至已经支持了部分arm芯片。比如arduino ng、arduino uno、arduino mini、pro mini等。但是大多数情况,都是使用的atmega8/atmega168/atmega328/atmega1280/atmega2560等芯片。
       在单片机代码中,需要对不同的引脚、定时器、接口进行操作,由于不同单片机引脚和功能不一样,因此代码无法共用。那么,arduino是如何做到用一份代码就可以分别在不同类型的板子上执行呢?
       其实arduino实现了一个框架,针对不同的芯片,把相同的部分提供一套通用机制,不同的部分抽象出来,制定一套规则,只要所有的芯片都遵守这个规则,就可以正常的工作起来。

这里主要讲讲arduino各种板子配置文件的规则。

Bootloaders 不同芯片需要的bootloader文件
Cores 单片机程序核心代码所在的位置,这里定义了所有芯片的通用功能,提供了通用的功能比如延时,串口通信,按键,输入输出等基本通用功能
Firmwares 一些固件程序
Libraries 开源库文件,比如eprom,wifi,wire等库文件
Variants 针对不同芯片定义的引脚文件

1、顶层目录:

arduino         ---> arduino IDE启动脚本
examples/     ---> 示例程序目录(通过IDE的 File -> Examples 菜单可以浏览得到)
hardware/     ---> 固件相关的目录(见下方)
lib/               ---> IDE运行需要的库文件(几个jar包)
libraries/       ---> 也是示例程序(通过IDE的 File -> Examples 菜单可以浏览得到)
reference/     ---> Html帮助文档
revisions.txt
tools/            ---> Mangler工具(不太清楚干嘛用的)

固件目录:

boards.txt        ---> 各种型号arduino板子参数描述文件,烧写固件时要用到
bootloaders/    ---> 不同芯片需要的bootloader文件
cores/              ---> 单片机程序核心代码所在的位置,这里定义了所有芯片的通用功能,提供了通用的功能比如延时,串口通信,按键,输入输出等基本通用功能
firmwares/       ---> 包含了两个用于ATmega8U2处理器上的二进制固件,如Arduino Mega 2560
programmers.txt
<strong>Firmwares</strong> 一些固件程序
<strong>Libraries</strong> 开源库文件,比如eprom,wifi,wire等库文件
<strong>Variants</strong> 针对不同芯片定义的引脚文件


2、programmers.txt

打开arduino ide依次选择菜单工具à编程器,可以看到有很多编程器选项。


    其实这些编程器是通过programmers.txt定义的(arduino-win\1.0.6\arduino-1.0.6\hardware\arduino),这个文件里面主要定义了编程器需要遵守的规则:

以avr isp为例:

See: http://code.google.com/p/arduino/wiki/Platformsavrisp.name=AVR ISP      //在菜单里面呈现出的编程器名称
avrisp.communication=serial //使用的通信接口
avrisp.protocol=stk500v1   //使用的编程协议avrispmkii.name=AVRISP mkII
avrispmkii.communication=usb
avrispmkii.protocol=stk500v2usbtinyisp.name=USBtinyISP
usbtinyisp.protocol=usbtinyusbasp.name=USBasp
usbasp.communication=usb
usbasp.protocol=usbaspparallel.name=Parallel Programmer
parallel.protocol=dapa
parallel.force=true
# parallel.delay=200arduinoisp.name=Arduino as ISP
arduinoisp.communication=serial
arduinoisp.protocol=stk500v1  //上位机编程协议
arduinoisp.speed=19200   //上位机波特率

3、boards.txt


    打开arduino ide--->工具--->板卡,可以看到arduino支持的板卡。

这些板卡的行为都是靠boards.txt(arduino-win\1.0.6\arduino-1.0.6\hardware\arduino)来约束的,以Arduino Uno为例

# See: http://code.google.com/p/arduino/wiki/Platforms##############################################################uno.name=Arduino Uno  //板卡的名称
uno.upload.protocol=arduino  //上位机软件使用的协议
uno.upload.maximum_size=32256  //hex最大字节数
uno.upload.speed=115200  //串口波特率
uno.bootloader.low_fuses=0xff  //低位熔丝值,与avr芯片的熔丝位相对应
uno.bootloader.high_fuses=0xde  //高位熔丝值,与avr芯片的熔丝位相对应
uno.bootloader.extended_fuses=0x05  //扩展熔丝位,有的芯片需要
uno.bootloader.path=optiboot  //bootloader文件存储路径
uno.bootloader.file=optiboot_atmega328.hex  //芯片需要的bootloader文件名
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p  //板卡cpu型号,可以从avrdude中获取
uno.build.f_cpu=16000000L  //板卡使用的晶振频率,用于计算函数库的延时,定时器等函数所需要的参数
uno.build.core=arduino  //单片机程序核心代码所在的位置,这里定义了所有芯片的通用功能,提供了通用的功能,比如延时,串口通信,按键,输入输出等基本通用功能
uno.build.variant=standard  //不同型号芯片的引脚功能定义##############################################################atmega328.name=Arduino Duemilanove w/ ATmega328atmega328.upload.protocol=arduino
atmega328.upload.maximum_size=30720
atmega328.upload.speed=57600atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=atmega
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0Fatmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino
atmega328.build.variant=standard

4、platform.txt
        这个文件里定义了编译步骤,以及每个文件编译使用的编译选项。可以在文件à参数选项 里把显示编译详细信息勾选上,与该txt文件中的内容对比起来看。

Arduino IDE 配置文件相关推荐

  1. Arduino IDE增加ATmega32开发选项遇到的问题

    简 介: 根据网络上提示对于Arduino IDE进行配置,使其能够编译关于ATmega32相关程序.但是最终测试结果没有成功. 关键词: Arduino,IDE,ATmega32 §01 配置Ard ...

  2. 20170922在arduino IDE添加mega16\32\64\128 mcu支持

    很多人认为,现在是32位单片机烂大街的时代,不用再折腾8位机了,豆腐搞成肉价钱. Anyway - --我觉得正是时代赋予我们的GEEK精神造的就我们. 言归正传,在arduino里面添加通用avr的 ...

  3. Arduino IDE的编译执行过程解读

    avr-gcc 1997年ATMEL公司的A先生和V先生推出了全新配置的8位精简指令集微处理器(RISC-Reduced Instrction Sot CPU),起名为AVR.AVR是一种指令内核的统 ...

  4. 合宙ESP32C3基于Arduino IDE框架下配置分区表

    合宙ESP32C3基于Arduino IDE框架下配置分区表 关于VSCode PIO配置分区表可以参考示例文章<合宙ESP32C3基于VSCode PIO开发初探教程> 有关Arduin ...

  5. Arduino IDE增加ESP32flash分区配置选项

    Arduino IDE增加ESP32 flash分区配置选项 在ESP32程序开发过程中,可能会遇到编译报内存容量不够,二十几的代码量却没有什么,这可能是是由于硬件分区没有配置好导致的. 注意:自定义 ...

  6. ESP8266-Arduino编程实例-SPIFFS及数据上传(Arduino IDE和PlatformIO IDE)

    SPIFFS及数据上传(Arduino IDE和PlatformIO IDE) 1.SPIFFS介绍 ESP8266 包含一个串行外设接口闪存文件系统 (SPIFFS). SPIFFS 是为带有闪存芯 ...

  7. 和12岁小同志搞创客开发:手撕代码,Arduino IDE 软件下载和环境搭建

    目录 1.软件下载 2. 软件安装 3.环境搭建和使用 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_3810 ...

  8. 安装 Arduino IDE 中STM32 软件包,ESP8266软件包

    简 介: 搜集了更多的基于Arduino生态环境的安装和使用方法. 关键词: Arduino,STM32,ESP8266 §01 安装STM32在Arduino IDE软件包 1.参考文献1 参照推文 ...

  9. 利用Arduino IDE对ATMEGA8等单片机编程

    简 介: 根据 Programming ATmega8 Using Arduino IDE - Arduino Project Hub 所描述的方法,测试了在Arduino IDE中增加对于ATmeg ...

最新文章

  1. Django框架(十)--常用字段、参数、元信息、多对多关联关系
  2. 刚才我提出要把数据库处理部分放到代码里,但是有人提出,存储过程有缓存,速度快。我该怎么说啊?...
  3. mybatis学习(42):mybatis的一级缓存
  4. 开关问题(模板+高斯消元)
  5. 阿里新一代分布式任务调度平台Schedulerx2.0破土而出...
  6. python中面向对象的ui_怎样理解Python中的面向对象?
  7. 斯坦福机器学习公开课笔记--神经网络的学习
  8. 静态嵌套类和非静态嵌套类
  9. Vc2008中如何为视图类添加消息响应
  10. 163vip邮箱登录,网易邮箱如何登录?vip163邮箱怎么登陆?
  11. 瑞吉外卖项目的购物车sub操作
  12. html怎么放边框,html怎么设置边框
  13. AI入门基础工具(一)
  14. Gem Port和T-CONT实现业务复用
  15. python教育数据挖掘_Python 数据分析 与 数据挖掘 (介绍篇)
  16. 给win10平板来个标准USB+充电
  17. 游戏贴图打包工具——TexturePacker详解
  18. 计算机安全问题所造成的影响 既包括,安全与技术的关系-②电子商务安全与计算机网络安全之间有什么关系?②电子商务安全与计 爱问知识人...
  19. google内购In-App Billing
  20. 经典作品推荐 パルフェ ショコラsecond brew 女仆咖啡帕露菲(含下载、汉化和攻略)...

热门文章

  1. SQL游标使用方法SQL游标使用方法(转)
  2. request.RequestContextListener
  3. ASP.NET MVC 在控制器中获取某个视图动态的HTML代码
  4. docker CE 的安装
  5. 前端vue的get和post请求
  6. 在iview的Table中添加Select(render)
  7. 【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用
  8. Hammer.js移动端触屏框架的使用
  9. 可耻的客户端,可怕的征兆,必须趁早消灭它
  10. spring-core