使用 86Duino Linux SDK 撰写程式

86Duino Linux SDK 位于 /home/dmp/86Duino_Linux_SDK 目录下,提供支援 86Duino 硬体功能的 C++ 函式库,可让您在一般 C++ 程式中使用相容 Arduino 的 API 来存取 86Duino 的 I/O 介面,并以 gcc 编译出在 86Duino 上执行的 Linux 程式。

86Duino Linux SDK 允许使用者用两种写法来撰写程式:类 Arduino sketch 程式写法和标准 C++ 程式写法。进入 /home/dmp/86Duino_Linux_SDK/examples 目录中,使用者会看到两个子目录,分别是 arduinocpp,使用者若对 Arduino sketch 程式写法较为熟悉,可以进入 arduino 子目录,参考其中的范例程式;另一方面,若使用者对标准 C++ 程式写法较熟悉,则可进入 cpp 子目录,参考其中范例程式的写法。以下我们将以 86Duino 的 Blink sketch 范例程式为例,简单说明类 Arduino sketch 程式写法和标准 C++ 程式写法的差异:

86Duino Coding IDE 里的 Blink sketch 范例程式如下:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH); 
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

在 86Duino Linux SDK 中,以类 Arduino sketch 程式写法撰写的 Blink 程式,应改成:

#include "Arduino.h"

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH); 
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

可以看到,差别只在于使用者需自行在程式里 include Arduino.h 这个标头档。

至于以标准 C++ 程式写法撰写的 Blink 程式,则应改成:

#include "Arduino.h"

int main()
{
  pinMode(13, OUTPUT);

  while(1)
  {
    digitalWrite(13, HIGH); 
    delay(1000);
    digitalWrite(13, LOW);
    delay(1000);	
  }		      

  return 0;
}

在 C++ 程式里,使用者明确地写出 main() 主函式,此外,也需 include 标头档 Arduino.h,才能在程式中呼叫 86Duino 的各个 Standard API 函式。

在前面提及的 arduinocpp 两个范例程式目录内,都可以找到相应的 Makefile 来编译使用 86Duino Linux SDK 的程式,直接在该目录下键入 make 指令,即可编译出名为 86duino 的执行档。使用者可自行研究 Makefile 的内容,来瞭解如何以 gcc 编译使用 86Duino Linux SDK 的程式。需进一步说明的是,如果您修改了范例程式,并在程式中呼叫了 86Duino Linux SDK 里提供的函式库,您必须也同时修改 Makefile,将使用到的函式库加入到编译流程中。例如,假设您修改范例程式额外呼叫了 EEPROM 函式库,您应打开 Makefile,找到开头为 THIRD_LIB_NAME 的那一行:

sd_reader

然后在 := 右边(除了原本的 TimerOne 之外)加上 EEPROM。注意,您呼叫的函式库可能还会在内部调用其它函式库的功能,在这种情况下,您应该在 THIRD_LIB_NAME := 后面将所有被调用到的函式库加上去,下表列出 86Duino Linux SDK 内建的函式库里,所有会互相依赖的函式库:

函式库名称 被调用的函式库
TFT SPI
FreeIMU1 Wire
RF12 SPI
RF24 SPI
Mirf SPI
RadioHead SPI

关于最新 86Duino Linux SDK 里支援的 86Duino Standard API 及内建函式库完整列表,请参阅此连结


黑客天地主页面

The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License.