linux基础操作2-字符设备控制-LBA的控制(LED/BEEP/AD控制)

导:在 linux 驱动中,字符驱动是必须掌握的,本章主要介绍字符设备应用的程序,无论是学习了后面的知识自己写的字符驱动,还是已有的字符驱动,都需要能够写一些简单的应用程序。即使从事 linux 驱动的工作,linux 驱动写出来之后,也需要由驱动程序员编写简单的应用进行测试的。

1.先理顺对 main函数的理解

main 函数作为应用程序的入口,在头文件“#include<stdio.h> ”中。
main 函数需要传参数的时候完整的定义为: int main(int argc,char **argv)
            //参数 argc,表示参数的个数
            //参数**argv,存储输入字符的数组:argv[0]表示程序名称,argv[1]——argv[n]输入的参数
                不传参数的时候定义为:int main(void),

            //函数 main 的返回值为类型为 int,用于判断程序执行成功还是失败

                无返回,并且不传参数的时候定义为:main(void) (等同 void main(void))

可测函数 int main(int argc,char **argv) 的用例子如下

2.LBA控制操作

----------硬件电路---------------

 

 

-----引入一个硬件io的控制函数ioctl()-----------

    int ioctl( int fd, int request, int cmd);
//参数 fd,函数 open 返回的句柄。
//参数 request 和参数 cmd,由内核驱动决定具体操作,例如:request 可以代表哪一个 IO 口,cmd 代表对 IO 进行什么样的操作,也可以反过来。具体的含义由驱动工程师在驱动中 switch决定。

//返回值:返回 0 成功;返回-1,出错

#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <termios.h>
#include <sys/stat.h>
 
int main(int argc ,char *argv[])
{
	int i,j,k,fd,adc_len,r;//
	i=atoi(argv[1]);
	j=atoi(argv[2]);//
	k=atoi(argv[3]);
	
	char adc_buffer[512];
	char *leds="/dev/leds";
	char *buzzer_ctl="/dev/buzzer_ctl";
	char *adc="/dev/adc";//=========if p i c p========================
	if((fd=open(leds,O_RDWR | O_CREAT | O_NDELAY))<0)
	{
		printf("打开LED失败!\r\n");
	} 
	printf("打开LED 成功!\r\n");
	ioctl(fd,i,j);
	close(fd);//--------关闭LED----if p i c p-----------------------------
	printf("关闭LED 成功!\r\n");
	
	if((fd=open(buzzer_ctl,O_RDWR | O_CREAT | O_NDELAY))<0)
	{
		printf("打开beep失败!\r\n");
	} 
	printf("打开beep 成功!\r\n");
	ioctl(fd,k,0);
	close(fd);//--------关闭beep-----if p i c p----------------------------
	printf("关闭beep 成功!\r\n");
	
	if((fd=open(adc,O_RDWR | O_CREAT | O_NDELAY))<0)
	{
		printf("打开adc失败!\r\n");
	}else
	{
		printf("打开adc成功!\r\n");
		adc_len=read(fd,adc_buffer,10);
		if(adc_len==0) printf("read null \r\n");
		else {
			r=atoi(adc_buffer);
			r=(int)(r*10000/4095);
			printf("数值为:%d \t",r);
		}
	}				
	close(fd);//--------关闭adc if c p---------------------------------
	printf("关闭beep 成功!\r\n");
	return 1;
}

3 现象验证:

第一个参数是亮灭,第二个参数是选择灯,第三个参数开关beep

        验证通过!!!!

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxilang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值