红绿灯编程实现-精选文档
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Switch分支语句
switch(lukou)
{ case 'A': ioctl(fd, 0, 0);
break;
case 'B': ioctl(fd, 0, 1);
break;
case 'C': ioctl(fd, 0, 2);
break;
default: break; }
文件操作 文件操作 open open("/dev/leds", 0); ioctl ioctl(fd, 0, 1); close close(fd);
ioctl函数是文件结构中的一个属性分量,就是说如果你的 驱动程式提供了对ioctl的支 持,用户就能在用户程式中 使用ioctl函数控制设备的I/O通道。
open
int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode); 返回值 若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有 一个权限被禁止则返回-1。 参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所 能使用的旗标: O_RDONLY 以只读方式打开文件 O_WRONLY 以只写方式打开文件
图示
状态图
伪码 While(1) { A红=B红=C绿=0;A绿=B绿=C红=1; delay 100s; A绿=B红=C红=0;A红=B绿=C绿=1; delay 100s; A红=B绿=C红=0;A绿=B红=C绿=1; delay 100s;}
硬件支持的分析 我们有4个Led,用于表示6个灯? Led0 Led1 Led2 亮表示 A路口绿灯亮 灭表示A路口红灯亮 亮表示B路口绿灯亮 灭表示B路口红灯亮 亮表示C路口绿灯亮 灭表示C路口红灯亮
ioctl
int ioctl(int handle, int cmd,[int *argdx, int argcx]); ioctl是设备驱动程序中对设备的I/O通道进行管理的函数 。所谓对I/O通道进行管理,就 是对设备的一些特性进行 控制,例如串口的传输波特率、马达的转速等等。 其中fd就是用户程式打开设备时使用open函数返回的文 件标示符,cmd就是用户程式对设 备的控制命令,至于 后面的省略号,那是一些补充参数,一般最多一个,有或 没有是和 cmd的意义相关的。
参数mode 组合
此为Linux2.2以后特有的旗标,以避免一些系统安全问题。参数mode 则有下列数种 组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影 响,因此该文件权限应该为(mode-umaks)。 S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行的权限。 S_IRUSR 或S_IREAD, 00400权限,代表该文件所有者具有可读取的权限。 S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。 S_IXUSR 或S_IEXEC, 00100 权限,代表该文件所有者具有可执行的权限。 S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。 S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。 S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。 S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。 S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。 S_IROTH 00004 权限,代表其他用户具有可读的权限 S_IWOTH 00002权限,代表其他用户具有可写入的权限。 S_IXOTH 00001 权限,代表其他用户具有可执行的权限。
Include头文件
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h>
预处理
所谓预处理是指在进行编译的第一遍扫描之前 所作的工作。 宏定义#define
允许用一个标识符来表示一个字符串, 称 为宏。
O_NOCTTY 如果欲打开的文件为终端机设备,不将该终端机当成进程控制终端机。
O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来 存于该文件的 资料也会消失。 O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式 加入到文件后面。 O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会 立即返回进程之中。 O_NDELAY 同O_NONBLOCK。 O_SYNC 以同步的方式打开文件。 O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,会令打开文件失败。 O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,会令打开文件失败。
文件包含#include 注意实际情况中的重定义情况。
子函数
int light_red(int fd, char lukou) int light_green(int fd, char lukou)
函数
库函数和自定义函数
printf 、 scanf 、 getchar 函数的特性
返回值,参数,变量的有效区域
函数,变量的申明
子函数输入参数判断
if(fd < 0)
{ return -1; } if((lukou != 'A') && (lukou != 'B') && (lukou != 'C')) {
return -1;
}
语句结构
分支语句 if语句,switch语句 循环语句 while语句,for语句 转移语句 break语句,return语句
Hale Waihona Puke O_RDWR 以可读写方式打开文件。
上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标 利用OR(|)运算符组合。
O_CREAT 若欲打开的文件不存在则自动建立该文件。 O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。文件若不存在则 建立该文件,否则将导致打开文件错误。