2023.10.20 LED驱动
驱动程序
#include<linux/init.h>
#include<linux/module.h>
#include<linux/fs.h>
#include<linux/uaccess.h>
#include<linux/io.h>
#include"head.h"unsigned int major;
unsigned int *vir_moder;
unsigned int *vir_odr;
unsigned int *vir_rcc;char kbuf[128] = {0};
int mycdev_open(struct inode *inode, struct file *file){printk("%s:%s:%d\n",__FILE__, __func__, __LINE__);return 0;
}
ssize_t mycdev_read(struct file *file, char *ubuf, size_t size, loff_t *lof){if( copy_to_user(ubuf, kbuf, size) ){printk("copy_to_user fail\n");}printk("%s:%s:%d\n",__FILE__, __func__, __LINE__);return 0;
}
ssize_t mycdev_write(struct file *file, const char *ubuf, size_t size, loff_t *lof){if( copy_from_user(kbuf, ubuf, size) ){printk("copy_from_user fail\n");}printk("%s:%s:%d\n",__FILE__, __func__, __LINE__);if(kbuf[0] == '0'){//灭灯(*vir_odr) &= ~(0x1 << 10);}else if(kbuf[0] == '1'){//亮灯(*vir_odr) |= (0x1 << 10);}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,.read = mycdev_read,.write = mycdev_write,.release = mycdev_close,};static int __init mycdev_init(void){major = register_chrdev(0,"mychrdev",&fops);if(major < 0){printk("字符设备驱动注册失败\n");return major;}printk("字符设备驱动注册成功major = %d\n",major);//进行寄存器的地址映射vir_moder = ioremap(PHY_LED1_MODER, 4);if(vir_moder == NULL){printk("物理内存地址映射失败%d\n", __LINE__);return -1;}vir_odr = ioremap(PHY_LED1_ODR, 4);if(vir_odr == NULL){printk("物理内存地址映射失败%d\n", __LINE__);return -1;}vir_rcc = ioremap(PHY_RCC, 4);if(vir_rcc == NULL){printk("物理内存地址映射失败%d\n", __LINE__);return -1;}//初始化寄存器(*vir_rcc) |= (0x1 << 4);(*vir_moder) &= ~(0x3 << 20);(*vir_moder) |= (0x1 << 20);(*vir_odr) &= ~(0x1 << 10); //默认关灯return 0;
}static void __exit mycdev_exit(void){//取消内存映射iounmap(vir_moder);iounmap(vir_odr);iounmap(vir_rcc);//注销字符设备驱unregister_chrdev(major, "mychrdev");
}module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");
应用程序
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include<string.h>
int main(int argc, void const *argv[]){char buf[128] = {0};int fd = open("/dev/mychrdev", O_RDWR);if(fd < 0){printf("打开设备文件失败\n");return -1;}printf("打开设备文件成功\n");while(1){printf("输入0灭灯,输入1亮灯>>");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = 0;write(fd, buf, sizeof(buf));
/*bzero(buf,sizeof(buf));read(fd, buf, sizeof(buf));printf("buf:%s\n", buf);
*/}close(fd);return 0;
}
头文件
#ifndef __HEAD_H__
#define __HEAD_H__#define PHY_LED1_MODER 0X50006000
#define PHY_LED1_ODR 0X50006014
#define PHY_RCC 0X50000A28#endif
相关文章:
2023.10.20 LED驱动
驱动程序 #include<linux/init.h> #include<linux/module.h> #include<linux/fs.h> #include<linux/uaccess.h> #include<linux/io.h> #include"head.h"unsigned int major; unsigned int *vir_moder; unsigned int *vir_odr; unsign…...

【力扣刷题】回文链表、环形链表、合并两个有序链表
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 刷题篇 一、回文链表1.1 题目描述1.2 思路分…...
linux错误处理函数
linux c之perror、exit_perror与exit-CSDN博客 linux网络编程(三) TCP通信时序与多进程/线程并发服务器的编写-阿里云开发者社区 函数简介篇——错误处理函数:errno值、perror()、streeor()、streeor_r()_惺忪牛犊子的博客-CSDN博客...
vue2技能树(5)-条件渲染和列表渲染
目录 Vue 2 条件渲染详解v-if 和 v-else 指令项目示例 v-show 指令项目示例 v-if 和 v-show 的区别v-if 和 v-else-if 指令项目示例 Vue 2 列表渲染详解v-for 指令项目示例 计算属性和方法项目示例 v-bind:key项目示例 使用对象的v-for项目示例 v-for 的索引项目示例 …...
MySQL基本操作之创建数据库
1、大小写敏感 一般大家都默认使用:小写 在MySQL中,大小写敏感性有两个方面的规定:lower_case_file_system和lower_case_table_names。 lower_case_file_system:指定操作系统文件系统是否对大小写敏感。 当设置为ON时,表示文件系统对大小写不敏感;当设置为OFF时,表示…...

8.对象贴地
愿你出走半生,归来仍是少年! 在场景中,有时候需要对地物(房屋、楼宇)进行贴地处理,或者说相对地面高度(井盖、井室)进行设置。 通过自定义的Terrain切片以及影像瓦片构建的三维场景应该如何获取…...

AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同
Hello大家好,我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源,我们可以通过创建这些资源管理函数的部署和调用。 首先,让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例…...

flutter doctor检测环境,出现CocoaPods installed but not working
1. 安装flutter, 地址: 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2. 安装成功后,通过flutter doctor检测环境。以mac为例,出现了CocoaPods installed but not working 错误提示时,以下为解决方案: 2.1 rvm i…...
Python 条件和 if 语句
Python支持来自数学的通常逻辑条件: 等于:a b不等于:a ! b小于:a < b小于或等于:a < b大于:a > b大于或等于:a > b 这些条件可以以多种方式使用,最常见的是在"i…...

行业领先的三个企业正在利用聊天机器人变得更强
聊天机器人已成为客户服务领域的革命者,深刻地改变了企业与客户互动的方式。这些虚拟助手简化了交互,提供了24/7全天候高效和个性化的支持。凭借先进的技术和自然语言处理能力,聊天机器人擅长快速处理查询。 效率是聊天机器人的关键优势。它…...
「Git|场景案例」从项目中删除之前commit过的文件并且让git不追踪删除操作
本文主要介绍如何在git中删除文件但是让git不追踪这些删除操作 文章目录 场景说明解决方案删除一个文件删除一个文件夹以及子文件夹 场景说明 自己在使用react开发一个包含大量媒体文件的网站时,项目初期临时将这些媒体文件都放在项目中,直接使用访问本…...

一款.NET Core开源的基于Vue+ElementUI开发的博客系统 - StarBlog
前言 今天给大家推荐一款.NET Core开源的基于VueElementUI开发的博客系统 - StarBlog。该项目配套详细的文章教程,可以作为 .Net Core 入门项目学习。 官方项目介绍 StarBlog支持Markdown导入的博客。后端基于最新的.Net6和Asp.Net Core框架,遵循REST…...

用git stash暂存修改
git stash命令用于保存当前工作目录的临时状态,包括暂存区和已修改但未暂存的文件。它会将这些修改保存在一个临时区域(即“堆栈”)中,让你能够回到一个干净的工作目录,可以进行其他操作。等到你完成其他任务后&#x…...

一个适合练手的接口测试实战项目——慕慕生鲜
前言 最近很多粉丝找小月要接口测试项目练练手,看看实力!今天,它来了 慕慕生鲜,完整版,文末有福利! 干货来咯,收藏好! 1. 接口测试需求分析 常见接口文档提供的两种方式 ①wor…...

window10/11 光学系统建模之Light Tools8.6 软件安装教程(亲测可用+附带免费资源可直接下载)
1.下载链接 (免费分享) 链接:https://pan.baidu.com/s/1qVubyRSC93xT-GKeK-k3ow 提取码:vkho 2.安装顺序 即按照图里的1234的顺序先安装完注册表,驱动,和lighttools的程序 我个人在win10系统安装这些程…...

Vue3+ElementPlus el-date-picker时间选择器,设置最多选择60天区间内,必须选择大于今天
Vue3ElementPlus el-date-picker时间选择设置, 必须选择大于今天;最多选择60天区间内; 使用disabled-date: 具体实现代码: <el-date-pickerv-model"state.queryParams.dateTime":editable"false&q…...

2022年亚太杯APMCM数学建模大赛B题高速列车的优化设计求解全过程文档及程序
2022年亚太杯APMCM数学建模大赛 B题 高速列车的优化设计 原题再现: 2022年4月12日,中国高铁复兴号CR450动车组在开放线上成功实现单车时速435公里,相对速度870公里,创造了高铁动车组列车穿越开放线和隧道速度的世界纪录。新一代…...

OSI网络分层模型
OSI英文全文是Open System Interconnection Reference Model,翻译成中文就是开放式系统互联通信参考模型。 OSI模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是: 第一层:物理层,网络的物理形式&…...
EOS区块链keosd的RPC API
list_wallets 查看钱包列表 post v1/wallet/list_walletsapi: http://127.0.0.1:8888/v1/wallet/list_walletsparams: 无returns: ["testnet *" ]testnet:钱包名称create 创建钱包 post v1/wallet/createapi: http://127.0.0.1:8888/v1/wallet/createpa…...

React +AntD + From组件重复提交数据(已解决)
开发场景: react Hooks andt 提交form表单内容给数据库(使用antd的form组件) 问题描述 提交是异步的,请提交方式是POST 方式 提交表单内容给后端,却产生了两次提交记录(当然,数据新增了两条数据)。可以…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...