一、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程序优势,但是开发程序必须使用pcDuino桌面版,也就是说必须要有显示屏,对于远程程序开发不方便。
于是想到,可不可以把arduino库函数封装好,然后就像正常写C++代码一样写arduino程序,然后用gcc编译器链接好就可以了。博主经过一系列尝试,实现了这样的功能。
三、实现过程
1.找到 arduino 程序源码
pcDuino的arduino IDE程序安装在 /usr/share/arduino/ 目录下,如下:

而arduino函数库的源码,在该级目录下的 hardware/arduino/pcduino/cores/arduino/ 目录下,如下:

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 $@ $(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 $@ $^ $(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程序。通过查找arduino程序源码,编写Makefile,然后进行编译和安装,实现了在不依赖IDE的情况下开发和测试arduino程序的功能。

1934

被折叠的 条评论
为什么被折叠?



