当前位置: 首页 > news >正文

11.8代码

利用gpiod子系统实现开发板六盏灯,安装驱动点亮,卸载驱动熄灭

#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/gpio/consumer.h>
/*myleds{core-leds{leds = <&gpioz 5 0>,<&gpioz 6 0>,<&gpioz 7 0>;};extend-leds{led1 = <&gpioe 10 0>;led2 = <&gpiof 10 0>;led3 = <&gpioe 8 0>;};};
*/
struct device_node *node;
struct device_node *core_node;
struct device_node *extend_node;
struct gpio_desc *core_desc[3];
struct gpio_desc *extend_desc[3];
char *extend_leds[3] = {"led1", "led2", "led3"};
// 入口
static int __init demo_init(void)
{int i;// 获取父结点node = of_find_node_by_path("/myleds");if (node == NULL){printk("of_find_node_by_path is error\n");return -EIO;}// 获取core子节点core_node = of_get_child_by_name(node, "core-leds");if (core_node == NULL){printk("core of_get_child_by_name is error\n");return -EIO;}// 获取extend子节点extend_node = of_get_child_by_name(node, "extend-leds");if (node == NULL){printk("extend of_get_child_by_name is error\n");return -EIO;}for (i = 0; i < 3; i++){// 获取gpio结构体core_desc[i] = gpiod_get_from_of_node(core_node, "leds", i, GPIOD_OUT_HIGH, NULL);// 申请gpio编号gpiod_get_value(core_desc[i]);// 设置gpio输出为1gpiod_direction_output(core_desc[i], 1);}for (i = 0; i < 3; i++){// 获取gpio结构体extend_desc[i] = gpiod_get_from_of_node(extend_node, extend_leds[i], 0, GPIOD_OUT_HIGH, NULL);// 申请gpio编号gpiod_get_value(extend_desc[i]);// 设置gpio输出为1gpiod_direction_output(extend_desc[i], 1);}return 0;
}
// 出口
static void __exit demo_exit(void)
{int i;for (i = 0; i < 3; i++){// 设置gpio输出为0gpiod_direction_output(core_desc[i], 0);// 释放gpio编号gpiod_put(core_desc[i]);}for (i = 0; i < 3; i++){// 设置gpio输出为0gpiod_direction_output(extend_desc[i], 0);// 释放gpio编号gpiod_put(extend_desc[i]);}
}module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL"); // 许可证

使用linux中断子系统完成三个按键编写

#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
/*mykeys{interrupt-parent=<&gpiof>;interrupts = <9 0>,<7 0>,<8 0>;};
*/
irqreturn_t key1_irq_handler(int irq, void *dev)
{int key = (int)dev;switch (key){case 0:printk("key1 down!!!\n");break;case 1:printk("key2 down!!!\n");break;case 2:printk("key3 down!!!\n");break;default:break;}return IRQ_HANDLED;
}
unsigned int irqnu[3];
char *irname[3] = {"key1", "key2", "key3"};
struct device_node *node;// 入口
static int __init demo_init(void)
{int i;int ret;// 获取结点node = of_find_node_by_path("/mykeys");if (node == NULL){printk("of_find_node_by_path is error\n");return -EIO;}for (i = 0; i < 3; i++){// 获取软中断号irqnu[i] = irq_of_parse_and_map(node, i);// 注册中断子系统ret = request_irq(irqnu[i], key1_irq_handler, IRQF_TRIGGER_FALLING, irname[i], (void *)i);if (ret < 0){printk("%d request_irq is error\n", irqnu[i]);return -EIO;}}return 0;
}
// 出口
static void __exit demo_exit(void)
{int i;for (i = 0; i < 3; i++){// 注销中断free_irq(irqnu[i], NULL);}
}module_exit(demo_exit);
module_init(demo_init);
MODULE_LICENSE("GPL"); // 许可证

相关文章:

11.8代码

利用gpiod子系统实现开发板六盏灯&#xff0c;安装驱动点亮&#xff0c;卸载驱动熄灭 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/gpio/consumer.h> /*myleds{core-leds{leds <&gpioz 5 0>…...

常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等

1.邮箱校验规则 //邮箱校验 export const validateEmail async (RuleObject, value) > {// const reg new RegExp(/^[A-Za-z0-9\u4e00-\u9fa5][a-zA-Z0-9_-]$/)const reg new RegExp(/^[a-zA-Z0-9_-]([a-zA-Z0-9]\.)(com|cn|net|org)$/)if (value) {if (!reg.test(value…...

Mysql数据库 11.SQL语言 储存过程 下 储存过程管理和游标

一、存储过程管理 1.查询存储过程 查询所有储存过程 语法 show procedure status; 代码实现 #查询存储过程 show procedure status; 运行结果 加入条件查询储存过程 语法 show procedure status where db储存过程名; 代码实现 #查询带有条件的储存过程 查询名字为pro…...

如何在Visual Studio上创建项目并运行【超级详细】

工欲善其事&#xff0c;必先利其器。想要学好编程&#xff0c;首先要把手中的工具利用好&#xff0c;今天小编教一下大家如何在史上最强大的编译器--Visual Studio上创建项目。&#x1f357; 一.打开编译器&#x1f357; 双击你电脑上的vs&#xff0c;(2012,2019,2022)都行。&…...

《C++ Primer》第7章 类(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 7.4 类的作用域&#xff08;P253&#xff09; 每个类都有自己的作用域&#xff0c;在类的作用域之外&#xff0c;普通的数据和函数成员只能由对象、引用或指针使用成员访问运算符访问&#xff0c;类型成员则…...

git仓库代码克隆

说明&#xff1a; 由于服务项目的厂商不同且需求不断变化且交付周期临近&#xff0c;所以想把之前一个仓库的代码弄到一个新的仓库&#xff0c;待交付完毕后再进行代码整合。 第一步 先创建一个远程仓库用来放你要克隆的代码。 第二步 克隆一份裸版本代码库 git clone --ba…...

AM@向量代数@向量基本概念和向量线性运算

文章目录 abstract向量的基本概念向量向量的坐标分解式和坐标&#x1f47a;向量的模向量的长度(大小)&#x1f47a;零向量单位向量&#x1f47a;方向向量非零向量的单位向量正规化向量夹角&#x1f47a; 向量方向角和向量间夹角投影几何描述向量的线性运算向量的加减运算向量的…...

2023-11-08 LeetCode每日一题(最长平衡子字符串)

2023-11-08每日一题 一、题目编号 2609. 最长平衡子字符串二、题目链接 点击跳转到题目位置 三、题目描述 给你一个仅由 0 和 1 组成的二进制字符串 s 。 如果子字符串中 所有的 0 都在 1 之前 且其中 0 的数量等于 1 的数量&#xff0c;则认为 s 的这个子字符串是平衡子…...

Web3.0的测试题

任务&#xff1a; 在前端开发一个查询UI&#xff0c;查询当前用户账户的ETH余额和指定ERC20合约中的余额 目标&#xff1a; UI框架指定使用 MUI (https://mui.com)需要查询到当前账户的ETH余额并展示在UI界面上需要输入ERC20合约地址后&#xff0c;查询到到当前账户在此ERC20…...

Javascript知识点详解:对象的继承、原型对象、原型链

目录 对象的继承 原型对象概述 构造函数的缺点 prototype 属性的作用 原型链 constructor 属性 instanceof 运算符 构造函数的继承 多重继承 对象的继承 面向对象编程很重要的一个方面&#xff0c;就是对象的继承。A 对象通过继承 B 对象&#xff0c;就能直接拥有 B …...

学之思开源考试系统部署至Centos7

学之思开源考试系统部署至Centos7 1、下载源码 源码下载&#xff1a; https://gitee.com/mindskip/xzs-mysql 数据库脚本下载&#xff1a; https://www.mindskip.net:999/ 2、项目打包 分别在\source\vue\xzs-student目录和source\vue\xzs-admin目录&#xff0c;执行前端打…...

如何利用浏览器的可见性API优化网站性能

最近在使用微软AI聊天工具Bing时&#xff0c;发现一个有趣的东西。我向它提问后&#xff0c;它在持续输出的过程中&#xff0c;如果我离开了当前它的浏览器会话&#xff0c;比如切屏&#xff0c;看当前浏览器的其它标签页&#xff0c;它会默认停止它的输出&#xff0c;等我回来…...

还不知道IP地址不够用是怎么被大牛们解决的?(NAT/NAPT, IPv6, DHCP)

文章目录 前言1. DHCP网络管理协议什么是 DHCPDHCP 两种分配机制 2. NAT网络地址转换协议什么是 NATNAT 技术使用NAT网络设备间如何通信两个内网设备相互通信不同内网中的设备相互通信NAT IP转换过程 NAPT 技术NAT 技术的缺陷 3. IPv6 协议什么是 IPv6 总结 前言 在之前的文章…...

使用决策树预测隐形眼镜类型

任务描述 本关任务&#xff1a;编写一个例子讲解决策树如何预测患者需要佩戴的隐形眼镜类型。使用小数据集&#xff0c;我们就可以利用决策树学到很多知识&#xff1a;眼科医生是如何判断患者需要佩戴的镜片类型&#xff0c;一旦理解了决策树的工作原理&#xff0c;我们甚至也…...

[ACTF2020 新生赛]BackupFile 1

题目环境&#xff1a; 好好好&#xff0c;让找源文件是吧&#xff1f;咱们二话不说直接扫它后台 使用dirsearch工具扫描网站后台&#xff08;博主有这个工具的压缩包&#xff0c;可以私聊我领取&#xff09;python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530…...

解决vuex刷新数据丢失

Vuex 是一个 Vue.js 的状态管理库&#xff0c;它使得你可以在 Vue 组件之间共享状态。当你在 Vuex 中更新状态时&#xff0c;如果你遇到数据丢失或数据不一致的问题&#xff0c;可能需要进行深度复制或者使用其他方式来确保数据的完整性。 假设你有一个 Vuex 存储&#xff0c;…...

linux系统下读取当前硬盘的温度

这个其实很简单&#xff0c;借助于smartctl工具&#xff08;Ubuntu默认安装好了&#xff09;&#xff0c;标红的部分就是当前温度&#xff0c;单位是摄氏度。 sudo smartctl -l scttempsts /dev/sda...

python 深度学习 解决遇到的报错问题8

本篇继python 深度学习 解决遇到的报错问题7-CSDN博客 目录 一、OSError: [WinError 127] 找不到指定的程序。 Error loading "D:\my_ruanjian\conda-myenvs\deeplearning\lib\site-packages\torch\lib\caffe2_detectron_ops.dll" or one of its dependencies. 二、…...

Linux pipe()系统调用示例

Linux系统调用pipe函数&#xff0c;创建一个pipe&#xff0c;通过传入的fd数组返回pipe的读、写两端。 其中fd[ 0 ]用于读&#xff0c;fd[ 1 ]用于写。 一个pipe是单向数据传输的&#xff0c;不用用于父子进程双向读写。创建2个pipe实现父子进程间的双线读写。 #include <u…...

音频中的采样率和比特率

音频中的采样率和比特率 采样频率千比特率音频比特率 采样频率 参考&#xff1a;https://blog.csdn.net/qq_38907791/article/details/88925224 采样频率&#xff0c;也称为采样速度或者采样率&#xff0c;定义了每秒从连续信号中提取并组成离散信号的采样个数&#xff0c;它…...

158页精品PPT | 某大型研发制造集团信息化IT规划整体方案

许多公司在数字化转型过程中会遇到一些共同的挑战&#xff0c;比如数据孤岛、技术更新慢、员工技能不足等。这些问题会导致企业效率低下&#xff0c;难以适应市场变化。针对这些问题&#xff0c;我们提出了一套解决方案&#xff0c;核心目标是帮助企业提升数字化水平&#xff0…...

技术解码:ViGEmBus虚拟手柄驱动框架 - 重新定义Windows输入设备模拟的底层架构

技术解码&#xff1a;ViGEmBus虚拟手柄驱动框架 - 重新定义Windows输入设备模拟的底层架构 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款基…...

WSL2下USB串口设备‘失踪’?手把手教你找回/dev/ttyUSB0(以Quectel模块为例)

WSL2下USB串口设备消失的终极解决方案&#xff1a;从原理到实战 最近在WSL2环境下调试Quectel模块时&#xff0c;发现一个奇怪现象&#xff1a;lsusb明明能识别设备&#xff0c;但/dev/ttyUSB0却神秘失踪。这让我想起去年调试树莓派时遇到的类似问题&#xff0c;但WSL2的环境特…...

tao-8k部署避坑指南:Xinference日志排查、WebUI访问与调用验证

tao-8k部署避坑指南&#xff1a;Xinference日志排查、WebUI访问与调用验证 1. 环境准备与快速部署 在开始部署tao-8k模型之前&#xff0c;我们先来了解一下这个模型的基本情况。tao-8k是由Hugging Face开发者amu研发并开源的专业文本嵌入模型&#xff0c;它能够将文本转换为高…...

解决Gradio share=True报错:手动下载并配置frpc_linux_amd64_v0.3文件的保姆级教程

解决Gradio shareTrue报错的完整实战指南&#xff1a;从手动配置frpc到深度优化 当你兴奋地准备向客户展示刚完成的Gradio应用时&#xff0c;却在终端看到红色的报错信息——shareTrue参数失效了。这种场景对开发者来说再熟悉不过&#xff1a;本地调试一切正常&#xff0c;但需…...

Qwen3-TTS-VoiceDesign应用案例:智能硬件设备嵌入式多语种语音播报

Qwen3-TTS-VoiceDesign应用案例&#xff1a;智能硬件设备嵌入式多语种语音播报 1. 智能语音播报的市场需求 现在的智能硬件设备越来越普及&#xff0c;从智能家居到车载系统&#xff0c;从工业设备到消费电子产品&#xff0c;几乎都需要语音交互功能。但很多设备面临一个共同…...

Tomato Novel Downloader:智能搜索功能的技术突破

Tomato Novel Downloader&#xff1a;智能搜索功能的技术突破 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 在数字阅读工具领域&#xff0c;用户体验的每一个细节都可能决定…...

ESP32 LVGL8.1 —— 消息框进阶:自定义按钮与事件处理实战

1. ESP32与LVGL8.1消息框基础认知 第一次接触ESP32和LVGL8.1的消息框功能时&#xff0c;我完全被它的灵活性震惊了。想象一下&#xff0c;你正在开发一个智能家居控制面板&#xff0c;当用户操作不当或者系统需要确认时&#xff0c;弹出一个美观的对话框是多么自然的事情。这就…...

Nomad与Consul集群搭建实战指南

1. 为什么选择NomadConsul组合&#xff1f; 如果你正在寻找一套轻量级、易上手的分布式系统解决方案&#xff0c;Nomad和Consul这对黄金搭档绝对值得考虑。我最早接触这个组合是在三年前的一个物联网项目中&#xff0c;当时我们需要在20台边缘计算设备上动态部署服务&#xff0…...

手把手教你用PyTorch 2.0复现风源AI气象模型(附GitHub源码解读)

手把手教你用PyTorch 2.0复现风源AI气象模型&#xff08;附GitHub源码解读&#xff09; 气象预测正经历从传统数值模拟到AI驱动的范式转移。本文将带您深入风源模型的技术内核——一个融合卫星遥感与深度学习的混合架构&#xff0c;通过PyTorch 2.0实现从数据预处理到模型推理的…...