我们学 linux 、单片机的第一个操作硬件就是点亮第一个 led 灯。
在单片机上我们点亮一个 led 灯非常的简单,直接操作引脚就可以了。虽然 linux 听着比较高大上,但是点亮一个 led 灯是非常容易的。我们甚至不用去写驱动,直接命令操作就可以了,因为 linux 系统本身有好多成熟的驱动框架,使用这些框架的好处就是当我们更换平台的时候,比如换到 RK3399 平台,我们应用程序可以不用做任何改变,就可以直接在新的平台上运行。但是如果你在单片机上写一个点灯程序,比如说我在 32 上写了一个点灯我现在想把它移植到 51 上那这个移植过程是比较麻烦的,如果说用寄存器写的就要改寄存器,如果说用库函数写的移植到 51 上也要写对应的库函数,这就比较麻烦了,但是在 linux 上直接使用命令就可以了。对于 led 设备,linux 提供的是 led 子系统框架。
31.1 前置知识
1. 怎么控制 led 灯的亮灭?
以 IMX6ULL 终结者开发板为例,原理图如下图所示,我们给管脚 GPIO_3 低电平,电路导通,led2 亮,给 GPIO_3 高电平,电路不导通,led2 灭。R80 为限流电阻,保护 led 灯不被烧毁。
使用 led 子系统我们可以很方便的控制 led 灯,不管是什么平台,包括 3399 、4418/6818 、i.MX6ull都可以使用这个方法,这个方法是通用的。在单片机上是使用程序来控制的,我们在这里使用命令,其实我们也可以使用程序来控制,因为我们有的时候是在程序上点灯,而不是需要我们去手动输入命令。
31.3 使用 c 语言调用 shell 命令控制 led 灯
用命令来控制 led 灯没有感觉,那可以使用程序来控制,让程序帮我们输入这些命令,我们可以使用system 函数来完成。
头文件:#include
格式:system(要执行的命令)
然后我们在运行下,这样我们就使用程序成功控制了一个灯并实现了一个闪灯的程序,其实这个程序里面的方法和我们直接使用命令的方法是一样的,只不过我们是使用 c 语言来调用我们的 shell 命令来实现,就不用再人为的输入了。
在 led 设备的这个目录下,还有一个叫 beep 的蜂鸣器设备,蜂鸣器我们也可以使用这个方法来打开和关闭蜂鸣器,这就作为一个作业大家自己来试下,方法和点亮一个 led 灯方法是一样的,我们可以先用命令来试下,然后再用 system 调用 shell 命令用程序实现。