天天看點

pcDuino-脫離arduino IDE,用gcc編譯arduino程式一、pcDuino簡介二、本文主要内容三、實作過程四、測試

一、pcDuino簡介

    pcDuino專門針對開源社群快速增長的需求,即希望有一個平台可以運作完整的PC作業系統,容易使用的工具鍊和相容流行的Arduino開放的生态系統,如Arduino shield和開源項目等。

    pcDuino的硬體性能名額遠超樹莓派,性能穩定,做工精良。pcDuino迷你計算機的CPU采用1GHz ARM Cortex A8核心,DRAM為1GB,闆載存儲達到2GB Flash, 完全相容Arduino接口。另外,pcDuino 可以從NAND或者從mini-SD卡(TF卡)啟動,在NAND Flash内有出廠預裝了ubuntu系統,您拿到手即可使用。

pcDuino-脫離arduino IDE,用gcc編譯arduino程式一、pcDuino簡介二、本文主要内容三、實作過程四、測試

二、本文主要内容

    pcDuino具有天然的編譯arduino程式優勢,但是開發程式必須使用pcDuino桌面版,也就是說必須要有顯示屏,對于遠端程式開發不友善。

    于是想到,可不可以把arduino庫函數封裝好,然後就像正常寫C++代碼一樣寫arduino程式,然後用gcc編譯器連結好就可以了。部落客經過一系列嘗試,實作了這樣的功能。

三、實作過程

1.找到 arduino 程式源碼

    pcDuino的arduino IDE程式安裝在 /usr/share/arduino/ 目錄下,如下:

pcDuino-脫離arduino IDE,用gcc編譯arduino程式一、pcDuino簡介二、本文主要内容三、實作過程四、測試

    而arduino函數庫的源碼,在該級目錄下的 hardware/arduino/pcduino/cores/arduino/ 目錄下,如下:

pcDuino-脫離arduino IDE,用gcc編譯arduino程式一、pcDuino簡介二、本文主要内容三、實作過程四、測試

2.編寫 Makefile 

    在 /usr/share/arduino/hardware/arduino/pcduino/cores/arduino 函數庫的源碼目錄下建立 Makefile 檔案,可以使用以下程式:

sudo nano Makefile
           

    以下為檔案内容: 

INCLUDES = ../../variants/sunxi
PREFIX = /usr/local

COMPILE_OPTS = -I$(INCLUDES) -I. -g -Os -w -ffunction-sections -fdata-sections -MMD -DPCDUINO_IDE
C_FLAGS = $(COMPILE_OPTS) $(CPPFLAGS) $(CFLAGS) -Wl,--gc-sections
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -fno-exceptions $(CPPFLAGS) $(CXXFLAGS)

all:	libpcduino.a

.c.o:
	gcc -c $(C_FLAGS) $<
.cpp.o:
	g++ -c $(CPLUSPLUS_FLAGS) $<

GROUPSOCK_LIB_OBJS = platform.o Print.o Serial.o Stream.o \
	Tone.o WInterrupts.o wiring.o wiring_analog.o wiring_digital.o \
	wiring_pulse.o wiring_shift.o WMath.o WString.o

libpcduino.a : $(GROUPSOCK_LIB_OBJS)
	ar -rcs [email protected] $(GROUPSOCK_LIB_OBJS)

clean:
	rm -rf *.o *.d libpcduino.a

install: libpcduino.a
	install -d $(PREFIX)/include/arduino $(PREFIX)/lib
	install -m 644 *.h $(PREFIX)/include/arduino
	install -m 644 $(INCLUDES)/*.h $(PREFIX)/include/arduino
	install -m 644 libpcduino.a $(PREFIX)/lib

uninstall:
	cd $(PREFIX)/include && rm -rf arduino
	cd $(PREFIX)/lib && rm -f libpcduino.a
           

3.編譯、安裝

    在arduino函數庫的源碼目錄下執行以下步驟:

#編譯函數庫
sudo make
#安裝程式
sudo make install
#清理編譯輸出檔案
sudo make clean
#删除Makefile檔案
sudo rm Makefile
#複制main.cpp檔案到使用者目錄,接下來會用到
sudo cp main.cpp ~/
#離開庫函數目錄
cd ~
           

四、測試

    在使用者目錄下,建立test.cpp、Makefile兩個檔案。以下為Makefile内容:

INCLUDES =
PREFIX = /usr/local

COMPILE_OPTS = $(INCLUDES) -I$(PREFIX)/include/arduino -I. -g -Os -w \
	-ffunction-sections -fdata-sections -MMD -DPCDUINO_IDE
C_FLAGS = $(COMPILE_OPTS) $(CPPFLAGS) $(CFLAGS) -Wl,--gc-sections
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -fno-exceptions $(CPPFLAGS) $(CXXFLAGS)
LINK_OPTS = -L$(PREFIX)/lib -L. $(LDFLAGS) -lpcduino
CONSOLE_LINK_OPTS = $(LINK_OPTS) -lm

NAME = test
all:	$(NAME)

.c.o:
	gcc -c $(C_FLAGS) $<
.cpp.o:
	g++ -c $(CPLUSPLUS_FLAGS) $<

$(NAME) : main.o test.o
	g++ -o [email protected] $^ $(CONSOLE_LINK_OPTS)

clean:
	rm -rf *.o *.d $(NAME)
           

    以下為test.cpp内容,其實就是arduino例程中的Blink.ino:

#include <Arduino.h>

int led = 13;

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

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

    執行以下指令,編譯執行:

make
./test
           
pcDuino-脫離arduino IDE,用gcc編譯arduino程式一、pcDuino簡介二、本文主要内容三、實作過程四、測試

    可以看到燈在閃爍:

pcDuino-脫離arduino IDE,用gcc編譯arduino程式一、pcDuino簡介二、本文主要内容三、實作過程四、測試