海南高端网站建设无忧网站建设多少钱

news/2025/9/23 23:40:42/文章来源:
海南高端网站建设,无忧网站建设多少钱,网络推广思路,网站title修改编写LED灯的驱动#xff0c;使用GPIO子系统#xff0c;里面添加按键的中断处理 1.应用程序发送指令控制发光二极管亮灭 2.按键1按下#xff0c;led1电位反转#xff1b;按键2按下#xff0c;led2电位反转#xff1b;按键3按下#xff0c;led3电位反转 //头文件 #i…编写LED灯的驱动使用GPIO子系统里面添加按键的中断处理 1.应用程序发送指令控制发光二极管亮灭 2.按键1按下led1电位反转按键2按下led2电位反转按键3按下led3电位反转    //头文件 #ifndef __LED_H__ #define __LED_H__//功能码 #define LED_ON _IOW(l,1,int) #define LED_OFF _IOW(l,0,int) #endif//应用程序实现LED的亮灭 #include stdio.h #include string.h #include stdlib.h #include sys/types.h #include sys/stat.h #include sys/ioctl.h #include fcntl.h #include unistd.h #include led.h int main(int argc, const char *argv[]) {int a,b;while(1){int fd_led open(/dev/myled0,O_RDWR); if(fd_led 0){printf(打开设备文件失败\n);exit(-1);}printf(请输入要控制的灯:1 2 3);scanf(%d,b);printf(输入控制命令:0熄灭 1开灯);scanf(%d,a);switch(a){case 1:ioctl(fd_led,LED_ON,b);break;case 0:ioctl(fd_led,LED_OFF,b);break;}close(fd_led);}return 0; }//驱动程序 #include linux/init.h #include linux/module.h #include linux/of.h #include linux/of_gpio.h #include linux/gpio.h #include linux/device.h #include linux/cdev.h #include linux/slab.h #include linux/fs.h #include linux/io.h #includelinux/of_irq.h #includelinux/interrupt.h #include led.h /* leds{led1-gpiosgpioe 10 0;//10表示引脚编号 0表示默认led2-gpiosgpiof 10 0;led3-gpiosgpioe 8 0;};*/ struct device_node *dnode1; struct device_node *dnode2; struct gpio_desc *gpiono1; struct gpio_desc *gpiono2; struct gpio_desc *gpiono3; struct cdev *cdev; int major168; int minor0; struct class *cls; struct device *dev; dev_t devno; int i; unsigned int irqno[3]; //软中断号//中断处理函数 irqreturn_t myirq_handler(int irqno, void *dev_id) {unsigned int id(unsigned int)dev_id;switch(id){case 0:printk(KEY1_INTERRUPT\n);gpiod_set_value(gpiono1,!gpiod_get_value(gpiono1));break;case 1:printk(KEY2_INTERRUPT\n);gpiod_set_value(gpiono2,!gpiod_get_value(gpiono2));break;case 2:printk(KEY3_INTERRUPT\n);gpiod_set_value(gpiono3,!gpiod_get_value(gpiono3));break;}return IRQ_HANDLED; } /*********************封装操作方法***************************/ int mycdev_open(struct inode *inode, struct file *file) {//printk(%s:%s:%d\n, __FILE__, __func__, __LINE__);return 0; }long mycdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {int which;copy_from_user(which,(void *)arg,4);switch(cmd){case LED_ON: // 亮灯switch(which){case 1: gpiod_set_value(gpiono1, 1);break;case 2:gpiod_set_value(gpiono2, 1);break;case 3:gpiod_set_value(gpiono3, 1);break;}break;case LED_OFF:switch(which){case 1:gpiod_set_value(gpiono1, 0);break;case 2:gpiod_set_value(gpiono2, 0);break;case 3:gpiod_set_value(gpiono3, 0);}break;}//printk(%s:%s:%d\n, __FILE__, __func__, __LINE__);return 0; }int mycdev_close(struct inode *inode, struct file *file) {//printk(%s:%s:%d\n, __FILE__, __func__, __LINE__);return 0; } /***********************************************************************///定义一个操作方法结构体变量并初始化 struct file_operations fops {.open mycdev_open,.release mycdev_close,.unlocked_ioctl mycdev_ioctl, }; static int __init mycdev_init(void) {int ret,i;//1.申请对象空间 cdev_alloccdev cdev_alloc();if(cdev NULL){printk(申请对象空间失败\n);ret-EFAULT;goto out1;}printk(申请对象空间成功\n);//2.初始化对象 cdev_initcdev_init(cdev,fops);printk(初始化对象成功\n);//3.申请设备号 register_chrdev_region()或clloc_chrdev_region()if(major ! 0) //静态申请{retregister_chrdev_region(MKDEV(major,minor),3,myled);if(ret){printk(申请静态设备号失败\n);goto out2;}printk(申请静态设备号成功major%d\n,major);}else //动态申请{retalloc_chrdev_region(devno,minor,3,myled);if(ret){printk(申请动态设备号失败\n);goto out2;}majorMAJOR(devno);minorMINOR(devno);printk(申请动态设备号成功major%d\n,major);}//4.注册驱动对象 cdev_add()retcdev_add(cdev,MKDEV(major,minor),3);if(ret){printk(注册驱动对象失败\n);goto out3;}printk(注册驱动对象成功\n);//5.向上提交目录 class_create()clsclass_create(THIS_MODULE,myled);if(IS_ERR(cls)){printk(向上提交目录失败\n);ret -PTR_ERR(cls);goto out4;}printk(向上提交目录成功\n);//6.向上提交设备信息 device_create()for(i0;i3;i){devdevice_create(cls,NULL,MKDEV(major,i),NULL,myled%d,i);if(IS_ERR(dev)){printk(向上提交设备节点失败\n);ret -PTR_ERR(dev);goto out5;}}printk(向上提交设备信息成功\n);// 根据设备树节点的路径解析设备树信息dnode1 of_find_node_by_path(/leds);if (dnode1 NULL){printk(解析设备树节点led失败\n);return -EFAULT;}printk(解析设备树节点led成功\n);// 申请gpio_desc对象并设置输出为低电平gpiono1 gpiod_get_from_of_node(dnode1, led1-gpios, 0, GPIOD_OUT_LOW, NULL);if (IS_ERR(gpiono1)){printk(申请gpio1对象失败\n);return -PTR_ERR(gpiono1);}printk(申请gpio1对象成功\n);gpiono2 gpiod_get_from_of_node(dnode1, led2-gpios, 0, GPIOD_OUT_LOW, NULL);if (IS_ERR(gpiono2)){printk(申请gpio2对象失败\n);return -PTR_ERR(gpiono2);}printk(申请gpio2对象成功\n);gpiono3 gpiod_get_from_of_node(dnode1, led3-gpios, 0, GPIOD_OUT_LOW, NULL);if (IS_ERR(gpiono3)){printk(申请gpio3对象失败\n);return -PTR_ERR(gpiono3);}printk(申请gpio3对象成功\n);// 根据设备树节点的路径解析设备树信息dnode2 of_find_node_by_path(/myirq);if (dnode2 NULL){printk(解析设备树节点myirq失败\n);return -EFAULT;}printk(解析设备树节点myirq成功\n);for(i0;i3;i){//获取软中断号irqno[i]irq_of_parse_and_map(dnode2,i);if(!irqno[i]){printk(软中断号irqno[%d]获取失败\n,i);return -ENXIO;}printk(软中断号获取成功irqno[%d]%d\n,i,irqno[i]);//注册中断retrequest_irq(irqno[i],myirq_handler,IRQF_TRIGGER_FALLING,key,(void *)i);if(ret){printk(注册驱动失败\n);return ret;}printk(key%d中断注册成功\n,i);}return 0; out5:for(--i;i0;i--){//销毁上面提交的设备信息device_destroy(cls,MKDEV(major,i));}class_destroy(cls); out4:cdev_del(cdev); out3:unregister_chrdev_region(MKDEV(major,minor),3); out2:kfree(cdev); out1:return ret; } static void __exit mycdev_exit(void) {// 灭灯gpiod_set_value(gpiono1, 0);gpiod_set_value(gpiono2, 0);gpiod_set_value(gpiono3, 0);// 释放gpio编号gpiod_put(gpiono1);gpiod_put(gpiono2);gpiod_put(gpiono3);//注销中断for(i0;i3;i){free_irq(irqno[i],NULL);} } module_init(mycdev_init); module_exit(mycdev_exit); MODULE_LICENSE(GPL);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA的计算方式

原码是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。但原码最大的问题在于一个数加上它的负数不等于0,于是反码的设计思想就是为了解决这个问题。既然一个负数时一个正数的相反数,干…

玉山建设局网站宁波seo关键词引流

1、登录ArcGIS Server Manager 2、登录后,里面是以前自己发布的地图服务 3、点击自己发布的地图,然后按下功能选项,再点击箭头来找到URL 4、点击进去,分别能从红圈中找到相关的信息,分别为arcgis JavaScript&#xff0…

机械配件网站建设百度官网网址

随着互联网的发展,传统的纸质传单已经逐渐被电子版传单所取代。电子版传单不仅可以节省成本,还可以更好地展示房产信息。在传统的设计软件中制作电子版传单需要一定的门槛,但是现在有了乔拓云网的后台,设计电子版房产H5传单变得简…

有哪些可以在线做海报的网站建设学院实验室网站的作用

通俗一点讲map其实就是python的字典(学会python字典 c_map)!!! map和unordered_map都是C中的关联容器,用于存储键值对。其主要区别在于底层实现方式和性能表现。 1、底层实现方式   map内部使用红黑树(一种自平衡二叉查找树)来实现&…

深圳博纳网站建设phpnow wordpress

定时器简介 硬件定时器一般有 2 种工作模式,定时器模式和计数器模式。不管是工作在哪一种模式,实质都是通过内部计数器模块对脉冲信号进行计数。下面是定时器的一些重要概念。 计数器模式:对外部输入引脚的外部脉冲信号计数。 定时器模式&…

建设工程考试官方网站夜狼seo

动静态库 一、静态库1. 静态库概念2. 制作静态库(1)朴素方法 --- 不打包(2)对静态库打包 3. 使用静态库(1)朴素方法 --- 直接使用(2)使用打包好的静态库 二、动态库1. 动态库概念2. …

校内二级网站建设整改方案医疗保健 网站 备案

试卷代号:2083 信息技术与教育技术(2) 试题(开卷) 2019年1月 一、单选题(每小题4分,共6小题,24分) 1.以下关于系统科学的原理描述不正确的一项是( )。 A.反馈原理,是指…

邯郸网站优化怎么用简单大气网站源码

RequestParam使用 (1)不加RequestParam前端的参数名需要和后端控制器的变量名保持一致才能生效 (2)不加RequestParam参数为非必传,加RequestParam写法参数为必传。但RequestParam可以通过RequestParam(required fals…

网站建设咨询服务合同网上订货发货网站建设

SpringBoot集成Milvus2.3.4(2) |(实现向量的增删改查) 文章目录 SpringBoot集成Milvus2.3.4(2) |(实现向量的增删改查)@[TOC]前言一、Milvus数据库的新增1.新增数据二、Milvus删除数据1.删除数据三、Milvus更新数据1.更新数据四、Milvus查询数据1.查询数据总结章节 第一…

怎么做教育网站中国美院网站建设公司

美摄科技,作为技术创新的先驱,开发了一款独特的粒子类特效SDK,为专业内容创作者提供了一种全新的工具,以实现电影级的逼真特效。 一、技术背景与挑战 随着移动设备的普及和性能的提升,越来越多的视觉内容在移动端呈现…

安装 elasticsearch-9.1.4 - 集群 和 kibana-9.1.4

准备 3 台主机,均进行如下操作更新系统以及关联软件yum update关闭防火墙systemctl stop firewalld systemctl disable firewalld sed -i s/enforcing/disabled/ /etc/selinux/config setenforce 0设置主机名# lab10 …

反码 原码 补码

一、核心概念:原码、反码、补码(以 8 位二进制为例) 三者均针对“带符号数”(最高位为符号位:0 表示正数,1 表示负数),仅负数的编码规则不同,正数的原/反/补码完全一致。 编码类型 正数(以 +3 为例) 负数(…

.net网站c asp.net 发布网站

题目描述 计算公式:1-1/21/3-1/4……,求前面n(n≤10000)项和,结果保留小数点后面6位。 例如当n4时,和值为0.583333 当n10时,和值为0.645635 输入格式 一个正整数n 输出格式 求出的和值,保留小数点后面6位 …

上海轨道交通建设查询网站阳江房产网58同城网

文章目录 1、文件包含概述1.1 文件包含语句1.1.1、相关配置 1.2、动态包含1.2.1、示例代码1.2.2、本地文件包含1.2.3、远程文件包含 1.3、漏洞原理1.3.1、特点 2、文件包含攻防2.1、利用方法2.1.1、包含图片木马2.1.2、读取敏感文件2.1.3、读取PHP文件源码2.1.4、执行PHP命令2.…

网站建设犀牛云pageadmin是免费的吗

maven依赖关系中Scope的作用 Dependency Scope 在POM 4中&#xff0c;<dependency>中还引入了<scope>&#xff0c;它主要管理依赖的部署。目前<scope>可以使用5个值&#xff1a; * compile&#xff0c;缺省值&#xff0c;适用于所有阶段&#xff0c;会…

沈阳微信网站建设网站建设销售方面会遇到的问题

数据存储量比较大时&#xff0c;我就需要将数据存储在数据库中方便使用&#xff0c;尤其是制作管理系统时&#xff0c;它的用处就更大了。 在编写程序前&#xff0c;需要在Assets文件夹中创建plugins文件&#xff0c;将.dll文件导入&#xff0c;文件从百度网盘自取&#xff1a;…

营口pc网站开发青海住房建设网站

在Java语言中&#xff0c;类的访问修饰符决定了其它类能够访问该类的方式。类有如下4种访问修饰符&#xff0c;在创建类时用于类的声明&#xff1a; 1、public: 当一个类被声明为public时&#xff0c;它可以从任何其他类中被访问&#xff0c;无论这些类位于哪个包中。通常&am…

joomla 网站 html 空免费外贸自建网站

Spring Boot Starter 是 Spring Boot 框架为了简化项目的初始化和配置工作而设计的一种模块化依赖管理方式。它主要具有以下几个关键功能和使用场景&#xff1a; 功能&#xff1a; 1. 依赖管理每个 Starter 都是一组相关的依赖项集合&#xff0c;这些依赖项都是为了实现特定功能…

网站建设步骤ppt基层网站建设存在困难

目录: Nginx的优势 HTTP协议详解 Nginx部署-Yum Nginx配置文件 Nginx编译参数 Nginx基本配置 Nginx日志Log Nginx WEB模块 Nginx 访问限制 Nginx 访问控制 Nginx的优势 Nginx (engine x) 是一个高性能的HTTP(解决C10k的问题)和反向代理服务器&#xff0c;也是一个IM…

移动端网站设计尺寸南宁制作企业服装

目录 1. 使用自定义Favicon 2. 在vue中设置Favicon 3. 使用Vue插件设置Favicon 网页显示的小图标&#xff0c;通常称为Favicon&#xff08;Favorites Icon&#xff09;&#xff0c;是网站的标识之一&#xff0c;也是浏览器标签页上显示的图标。 1. 使用自定义Favicon 准备图…