转载至:http://bbs.elecfans.com/jishu_522284_1_1.html
Arduino工程源码分析
本次分析基于Arduino 1.0.6
一、我相信大家第一次打开一个Arduino例子的时候,肯定跟我一样,有一种疑惑,
按以往经验,一般会有一个main函数,可是这里却只有一个loop()函数和setup()函数,
为什么呢????????

看到这里,没有main函数怎么运行下去。。。。。。。。。。。。。。。。。。?
运行机制是怎么样??
一系列问题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
然后咱们揭开它神秘的面纱-----
首先大家可以用代码浏览神器Source Insight来建立一个工程,方便查看
明确自己Arduino的安装目录,这里我的是D:\Program Files\Arduino
建立工程后添加源码D:\Program Files\Arduino\hardware\arduino\cores\arduino
OK!!!建立工程完成后,开始分析---------

在工程浏览搜索mian 看到出现main.cpp

看到上面代码 , 是不是恍然大悟了~_~

这里告诉大家,为什么Arduino里面的loop()函数是执行完一次,再执行,也就是无限次执行loop,for循环,大家都知道
如果大家想要只执行一次loop()的话,可以考虑来个while(1)
继续。。。。。。。。。
看到mian函数里面的init()没有,跟进去,一探究竟

里面第一句注释:这个函数必须在setup之前执行,否则很多功能将无法工作
这个初始化函数里面sei().打开所有的中断什么的,还有其他就是些寄存器初始化
回到mian函数往下看

_attribute_的weak属性,这里的作用是弱符号:若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。
也就是防止定义的一样产生冲突。
继续往下是USB功能的使能USBDevice.attch()

然后是for循环里面的串口

二、看完后知道了运行机制了吧
看下面的点灯程序

跟进pinMode()函数,基本上都是寄存器和另一些函数的操作

跟进digitalWrite()函数,还是寄存器和另一些函数的一些操作

终于明白,原来Arduino只是把底层封装了,让新手远离寄存器的复杂操作

图片1.png(55.51 KB, 下载次数: 9)

回复 收藏8

Arduino工程源码分析相关推荐

  1. 【SRIO】5、Xilinx RapidIO核例子工程源码分析

    目录 一.软件平台与硬件平台 二.打开例子工程 三.例子工程详解 3.1 工程概述 3.2 工程结构 3.3 工程分析 四.工程源码分析 3.1 顶层模块srio_example_top.v源码分析 ...

  2. 5.Xilinx RapidIO核例子工程源码分析

    https://www.cnblogs.com/liujinggang/p/10091216.html 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:V ...

  3. 【高速接口-RapidIO】5、Xilinx RapidIO核例子工程源码分析

    期待大家的一键三连,爱你们!!! 总目录:总目录(经验分享) 献上链接: [高速接口-RapidIO]2.RapidIO串行物理层的包与控制符号 [高速接口-RapidIO]3.RapidIO串行物理 ...

  4. 关于LINUX系统编程架构问题——4412 camera V4L2 RTMP流工程源码分析

    在程序猿界混迹了多年,一直有个苦恼的问题,不管是什么样子的编程,最早的汇编,后来C语言,又接触了JAVA,始终有个念头就是整体程序架构问题,不管是你自己用不用操作系统,都要有一套很出色的编程模板.当然 ...

  5. 用c#编写一个vb 工程源码分析工具(带源码工程下载)

    最近加入一个公司,试用期间要我学习他们的旧系统,旧系统的代码是Visual Basic 6.0编写的,源码大概有10多万行,要一下子看完可不容易,并且还得出一个源码分析的文档.而最近的项目是新版本的开 ...

  6. 小明分享|8ms平台下工程源码分析

    今天小明为大家分享的是开发工具平台-8ms(www.8ms.xyz)工程源码分析 1.打开"8ms平台",创建工程制作完UI后,选中"编译"一栏,等待结束后,选 ...

  7. 【已完结!】Java基础--学习笔记(零起点打开java世界的大门)--博客汇总表【附:视频、工程源码、资料、详细笔记】

    java零基础入门到精通(2019版)[黑马程序员] 视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:z ...

  8. FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持

    目录 1.前言 2.模拟视频概述 3.模拟视频颜色空间 4.逐行与隔行 5.BT656数据与解码 BT656数据格式 BT656数据解码 6.TW2867芯片解读与配置 TW2867芯片解读 TW28 ...

  9. Android系统默认Home应用程序(Launcher)的启动过程源码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还须要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

最新文章

  1. python编辑器,作为初学者该如何抉择?
  2. python读数据-如何用Python读取开放数据?
  3. TZOJ上的C语言作业答案,C语言编程练习
  4. automation服务器不能创建对象是什么意思_从运营商角度来考虑为什么NAT不能搭建服务器?...
  5. JVM:类加载机制之类加载器
  6. 做移动应用使用地图API时需要注意的问题
  7. 阿里云DDoS高防 - 访问与攻击日志实时分析(三)
  8. 设计模式-行为型模式-命令模式
  9. emmc linux 识别分区_linux下给U盘分区并制作文件系统
  10. 工程linux下创建svn仓库目录结构
  11. C++虚函数(多态性)
  12. 网易通行证html代码,JavaScript实现仿网易通行证表单验证
  13. 物联网设备通过MQTT接入华为iot平台
  14. SprngBoot引用外部jar包和本身日志接口冲突问题解决办法
  15. 一线城市房价集体下跌暗藏啥玄机?
  16. iOS 修改系统返回键
  17. 太棒了 | 辞职之后,去了一趟新疆!
  18. 优酷youku 1080P 视频下载方法
  19. EasyNVR显示级联成功,EasyNVS平台上并无通道是什么原因?
  20. 淘宝天猫京东考拉唯品会拼多多美团实现查券返利微信公众号云函数

热门文章

  1. 玩转 matlab 之一维 gauss 数值积分公式及matlab源代码
  2. 夏普SH330T翼聊版 带root版本 ROM下载
  3. 悟透JavaScript(理解JS面向对象的好文章)
  4. java word设置纸张a3,word无法设置A3纸张大小
  5. 二维码图片扫描 绘制扫描的图片的边框(Swift)
  6. 22个实用的前端工具
  7. Vue3官方文档翻译之Reactivity Fundamentals
  8. CCTV:未知木马防不胜防 主动防御是防毒软件发展方向
  9. 【PyTorch】 99%程序员都不知道, 深度学习还能这样玩 (建议收藏)
  10. 程序员眼中的2007:寻找软件开发利器