上一节我们已经配置好了交叉编译环境,并成功运行了“Hello, world!”。不过,我记得在我刚开始学习 Arduino 的时候,也有一个非常经典的程序——Blink,这似乎也是算是 “Hello, world!” ?于是,我们今天的主题是,使用 Rust 点亮 LED。这是 Arduino 的 Blink 代码:
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
接下来我们用 Rust 实现看起来差不多的代码。有两个选择,其一是直接使用 rppal 和 sysfs_gpio 等库,其二是在不借助第三方库的情况下,直接调用 Linux 内核提供的接口——GPIO Sysfs Interface for Userspace。为了一探究竟,我们选择第二种。
接下来,先用ssh
登录到树莓派,然后运行以下两条命令:
$ sudo mount -t debugfs debugfs /tmp
$ sudo cat /tmp/gpio
gpiochip0: GPIOs 0-53, parent: platform/20200000.gpio, pinctrl-bcm2835:
gpio-47 ( |led0 ) out lo
debugfs
是一种用于内核调试的虚拟文件系统。通过第一条命令,我们将其挂载到了 /tmp
下面,用后通过查看 gpio
文件的内容,就得到了 gpio
的使用状态。可以看到这个树莓派有 0-53
号gpio
,其中gpio-47
已经被使用。不过,我们可以使用的也只有0-27
号,其他的