编译上传,便遇大山。初探入口,仿佛若有戏。便舍身,从口入,精读数十行,豁然开朗。
初读Grbl,你可能也被它的简洁吓到了,它没用setup,也没用loop,甚至连main也没有,只有一行代码#include "grbl.h"! 说好的Arduino呢?丫的不按套路出牌呀!
没办法,硬着头皮看grbl.h,仍然一无所获,入口到底在哪?在哪?在哪?Grbl难道有什么黑科技?
浏览这个库的文件组织结构,意外地发现有一个main.c文件,难道是它?是它是它就是它!把它删掉,Arduino编译器果然报错,编译不通过,提示没有定义setup和loop。
原来main.c里面定义了main函数,有了这个main函数,Arduino编译器不在提供包装的setup和loop,而是用这个main函数做入口。为了验证这个想法,把main.c文件删除,
在arduino的入口文件里定义main函数,果然不报错了。通过查阅资料发现,arduino的编译器会把setup和loop函数包装成类似如下形式的main函数:
int main()
{
setup();
for ( ;; ) {
loop();
}
}
至于为什么不使用setup和loop而非要使用main呢?且听下回分解。