3.2.3 Arduino Sketch 是如何运行的? 前面已经提到为 Intel Galileo 编写的 Arduino 程序实质是标准的 Linux ELF 可执行 App。那么他是如何操作 Galileo 的硬件外设呢?为此我们就需要通过浏览相关源代码找到答案。 打开 Intel Galileo 专门的 Arduino IDE 所在目录的 hardware\arduino\x86\cores\arduino 位置,这里存放了 Intel 为 Galileo 开发的 Arduino 库的源代码。可以看出 Intel 完全重写了原先整个基于 AVR 芯片的 Arduino 实现。 图:Intel 完全重写的 Arduino 运行库代码 这里我们挑选 fast_gpio_sc.c(实现 GPIO 操作)代码进行研究。该代码用于实现大家熟悉的 digitalWrite, digitalRead 等 IO 操作。从代码可知,Intel Galileo 上的 Linux 系统已经对应的 IO 设备包装成了 Linux 设备文件,用户编写的 Arduino 程序只需要像标准的 linux 程序那样使用 mmap/ioctl 等系统调用即可操作具体的硬件外设。 图:Galileo 上对 GPIO 操作的代码实现片段 上述代码使用 open() 系统调用开始访问 GPIO 外设,其 Linux 设备路径为 /dev/uio0。对于其他诸如 I2C、ADC、SPI 等设备,基本的实现都是一样的。 同时,在 Galileo 版的 Arduino IDE 目录下也可以找到专门为 Quark 处理器定制的 gcc 编译器,这对于熟悉 Linux 程序开发的朋友来说,也意味着可以脱离 Arduino IDE,直接在 Galileo 的 Linux 中编写程序与外部电路进行控制。 图:Arduino IDE 中带有的 Quark 平台的 GCC 编译器和工具链 |