Arduino工程源码分析

本文详细解析了Arduino程序的运行机制,解释了为何没有main函数,而是通过loop()和setup()函数实现无限循环执行。同时介绍了Arduino如何通过封装底层寄存器操作简化编程流程。

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

转载至: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()函数是执行完一次,再执行,也就是无限次执行loopfor循环,大家都知道
如果大家想要只执行一次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)

图片1.png
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值