在一个Linux操作系统每个硬件设备都表示为一个文件。该设备可以通过简单地读写该文件来控制。操作系统的硬件在一边,试图访问硬件的用户在另一边,在它们之间可能有几个运行的应用程序层,它们使用进程间通信方法相互通信。这个项目展示了如何控制一个可以打开和关闭发光二极管的树莓在另一个过程的帮助下通过写入管道文件.
这个项目基本上需要两个程序在它们之间发送数据,和一个命名管道由他们中的任何人创造。整个系统可以用下图来表示:
图2:使用管道文件的LED控制的框图
项目源代码
###
#include
#include < unstd .h> #include #include #include #include #include #include .h #定义OUT_PIN1 RPI_GPIO_P1_15
#定义输出\u PIN2 RPI\u V2\u GPIO\u P1\u 13
#定义OUT_PIN3 RPI_GPIO_P1_12
#定义输出\u PIN4 RPI\u GPIO\u P1\u 11#定义我们的\u输入\u FIFO\u名称“/tmp/my\u FIFO”
Void set_pins_output (Void);
无效设置\输出\引脚\低(无效);Unsigned char rx_buffer [256];
int rx_length;
Int our_input_fifo_filestream = -1;
int结果;int main ()
{
如果(!bcm2835_init())
返回1;
设置_引脚_输出();
设置_输出_引脚_低位();结果=mkfifo(我们输入的FIFO名称,0777);
our_input_fifo_filestream = open (OUR_INPUT_FIFO_NAME, (O_RDONLY | O_NONBLOCK));而(1)
{
rx_长度=读取(我们的输入fifo文件流,(void*)rx_缓冲区,255);
如果(rx_长度>0)
{
Rx_buffer [rx_length] = '如果(0==strncmp(“10”,rx_缓冲区,2))
bcm2835_gpio_写入(输出引脚1,低电平);
其他的
如果(0==strncmp(“11”,rx_缓冲区,2))
bcm2835_gpio_write (OUT_PIN1, HIGH);
其他的
如果(0==strncmp(“20”,rx_缓冲区,2))
bcm2835_gpio_write (OUT_PIN2, LOW);
其他的
If (0 == STRNCMP ("21", rx_buffer, 2))
bcm2835_gpio_写入(输出引脚2,高电平);
其他的
If (0 == STRNCMP ("30", rx_buffer, 2))
bcm2835_gpio_write (OUT_PIN3, LOW);
其他的
如果(0==strncmp(“31”,rx_缓冲区,2))
bcm2835_gpio_write (OUT_PIN3, HIGH);
其他的
如果(0==strncmp(“40”,rx_缓冲区,2))
bcm2835_gpio_write (OUT_PIN4, LOW);
其他的
If (0 == STRNCMP ("41", rx_buffer, 2))
bcm2835_gpio_write (OUT_PIN4, HIGH);
其他的
}否则;
}
}无效设置\u引脚\u输出(无效)
{
bcm2835_gpio_fsel(输出引脚1,bcm2835_gpio_fsel_输出);
bcm2835_gpio_fsel(输出引脚2,bcm2835_gpio_fsel_输出);
bcm2835_gpio_fsel (OUT_PIN3, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(输出引脚4,bcm2835_gpio_fsel_输出);
}无效设置\输出\引脚\低(无效)
{
bcm2835_gpio_写入(输出引脚1,低电平);
bcm2835_gpio_write (OUT_PIN2, LOW);
bcm2835_gpio_写入(输出引脚3,低电平);
bcm2835_gpio_写入(输出引脚4,低电平);
}###