九江巿建设局网站周口学做网站

news/2025/10/7 5:46:29/文章来源:
九江巿建设局网站,周口学做网站,公司装修哪家比较好,深圳市房地产信息平台官网appLinux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接#xff0c;在正式开始学习前#xff0c;先把本节的思维导图引入#xff1a; 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…Linux版本号4.1.15   芯片I.MX6ULL                                    大叔学Linux    品人间百味  思文短情长  为方便和上一节的衔接在正式开始学习前先把本节的思维导图引入 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define IMX6UIRQ_NAME blockio /* 名字 */ //修改设备文件名字为“blockio”当驱动程序加载成功以后就会在根文件系统中出现一个名为“/dev/blockio”的文件。 wait_queue_head_t r_wait; /* 读等待队列头 */ //在设备结构体中添加一个等待队列头 r_wait因为在 Linux 驱动中处理阻塞 IO需要用到等待队列。 /* 唤醒进程 */ if(atomic_read(dev-releasekey)) { /* 完成一次按键过程 *//* wake_up(dev-r_wait); */wake_up_interruptible(dev-r_wait);} //定时器中断处理函数执行表示有按键按下先在 107 行判断一下是否是一次有效的按键如果是的话就通过 wake_up 或者 wake_up_interruptible 函数来唤醒等待队列r_wait。 /* 初始化等待队列头 */ init_waitqueue_head(imx6uirq.r_wait); //采用等待事件来处理 read 的阻塞访问 wait_event_interruptible 函数等待 //releasekey 有效也就是有按键按下。如果按键没有按下的话进程就会进入休眠状态因为采用 //了 wait_event_interruptible 函数因此进入休眠态的进程可以被信号打断。200 #if 0 201 /* 加入等待队列等待被唤醒,也就是有按键按下 */ 202 ret wait_event_interruptible(dev-r_wait, atomic_read(dev-releasekey)); 203 if (ret) { 204 goto wait_error; 205 } 206 #endif 208 DECLARE_WAITQUEUE(wait, current); /* 定义一个等待队列 */ 209 if(atomic_read(dev-releasekey) 0) { /* 没有按键按下 */ 210 add_wait_queue(dev-r_wait, wait); /* 添加到等待队列头 */ 211 __set_current_state(TASK_INTERRUPTIBLE);/* 设置任务状态 */ 212 schedule(); /* 进行一次任务切换 */ 213 if(signal_pending(current)) { /* 判断是否为信号引起的唤醒 */ 214 ret -ERESTARTSYS; 215 goto wait_error; 216 } 217 __set_current_state(TASK_RUNNING); /*设置为运行状态 */ 218 remove_wait_queue(dev-r_wait, wait); /*将等待队列移除 */ 首先使用 DECLARE_WAITQUEUE 宏定义一个等待队列如果没有按键按下的话就使用 add_wait_queue 函数将当前任务的等待队列添加到等待队列头 r_wait 中。随后调用__set_current_state 函数设置当前进程的状态为 TASK_INTERRUPTIBLE也就是可以被信 号打断。接下来调用 schedule 函数进行一次任务切换当前进程就会进入到休眠态。如果有按 键按下那么进入休眠态的进程就会唤醒然后接着从休眠点开始运行。在这里也就是从第 213 行开始运行首先通过 signal_pending 函数判断一下进程是不是由信号唤醒的如果是由信号 唤醒的话就直接返回-ERESTARTSYS 这个错误码。如果不是由信号唤醒的(也就是被按键唤醒 的)那么就在 217 行调用__set_current_state 函数将任务状态设置为 TASK_RUNNING然后在 218 行调用 remove_wait_queue 函数将进程从等待队列中删除。 3.运行测试 1)、编译驱动程序和测试APP ①、编译驱动程序 1 KERNELDIR : /home/zuozhongkai/linux/IMX6ULL/linux/temp/linux-imxrel_imx_4.1.15_2.1.0_ga_alientek ...... 4 obj-m : blockio.o//修改变量的值 ...... 11 clean: 12 $(MAKE) -C $(KERNELDIR) M$(CURRENT_PATH) clean make -j32 编译成功以后就会生成一个名为“blockio.ko”的驱动模块文件。 ②、编译测试APP arm-linux-gnueabihf-gcc blockioApp.c -o blockioApp 2)、运行测试 depmod //第一次加载驱动的时候需要运行此命令 modprobe blockio.ko //加载驱动 驱动加载成功以后使用如下命令打开 blockioApp 这个测试 APP并且以后台模式运行   ./blockioApp /dev/blockio 当按下 KEY0 按键以后 blockioApp 这个测试 APP 就会打印出按键值。输入“top”命令查看 blockioAPP 这个应用 APP 的 CPU 使用率。 使用“kill -9 PID”即可“杀死”指定 PID 的进程例如杀死149进程命令为kill -9 149 三、非阻塞IO实验 1.硬件原理图分析 2.实验程序 1)、驱动程序编写 #define IMX6UIRQ_NAME noblockio /* 名字 */ //修改设备文件名字为“noblockio”当驱动程序加载成功以后就会在根文件系统 //中出现一个名为“/dev/noblockio”的文件。 if (filp-f_flags O_NONBLOCK) { /* 非阻塞访问 */if(atomic_read(dev-releasekey) 0) /* 没有按键按下 */return -EAGAIN; 判断是否为非阻塞式读取访问如果是的话就判断按键是否有效也就是判断一下有没有按键按下如果没有的话就返回-EAGAIN。 235 /* 236 * description : poll 函数用于处理非阻塞访问 237 * param - filp : 要打开的设备文件(文件描述符) 238 * param - wait : 等待列表(poll_table) 239 * return : 设备或者资源状态 240 */ 241 unsigned int imx6uirq_poll(struct file *filp, struct poll_table_struct *wait) 242 { 243 unsigned int mask 0; 244 struct imx6uirq_dev *dev (struct imx6uirq_dev *) filp-private_data; 245 246 poll_wait(filp, dev-r_wait, wait); 247 248 if(atomic_read(dev-releasekey)) { /* 按键按下 */ 249 mask POLLIN | POLLRDNORM; /* 返回 PLLIN */ 250 } 251 return mask; 252 } imx6uirq_poll 函数就是 file_operations 驱动操作集中的 poll 函数当应用程序调用 select 或者 poll 函数的时候 imx6uirq_poll 函数就会执行。第 246 行调用 poll_wait 函数将等待队列头添加到 poll_table 中第 248~250 行判断按键是否有效如果按键有效的话就向应用程序返回 POLLIN 这个事件表示有数据可以读取。 .poll imx6uirq_poll,//设置 file_operations 的 poll 成员变量为 imx6uirq_poll。 2)、测试APP编写 52 #if 0 53 /* 构造结构体 */ 54 fds.fd fd; 55 fds.events POLLIN; 56 57 while (1) { 58 ret poll(fds, 1, 500); 59 if (ret) { /* 数据有效 */ 60 ret read(fd, data, sizeof(data)); 61 if(ret 0) { 62 /* 读取错误 */ 63 } else { 64 if(data) 65 printf(key value %d \r\n, data); 66 } 67 } else if (ret 0) { /* 超时 */ 68 /* 用户自定义超时处理 */ 69 } else if (ret 0) { /* 错误 */ 70 /* 用户自定义错误处理 */ 71 } 72 } 73 #endif 使用 poll 函数来实现非阻塞访问。 75 while (1) { 76 FD_ZERO(readfds); 77 FD_SET(fd, readfds); 78 /* 构造超时时间 */ 79 timeout.tv_sec 0; 80 timeout.tv_usec 500000; /* 500ms */ 81 ret select(fd 1, readfds, NULL, NULL, timeout); 82 switch (ret) { 83 case 0: /* 超时 */ 84 /* 用户自定义超时处理 */ 85 break; 86 case -1: /* 错误 */ 87 /* 用户自定义错误处理 */ 88 break; 89 default: /* 可以读取数据 */ 90 if(FD_ISSET(fd, readfds)) { 91 ret read(fd, data, sizeof(data)); 92 if (ret 0) { 93 /* 读取错误 */ 94 } else { 95 if (data) 96 printf(key value%d\r\n, data); 97 } 98 } 99 break; 100 } 101 } 使用 select 函数来实现非阻塞访问。 3.运行测试 1、编译驱动程序和测试APP ①、编译驱动程序 obj-m : noblockio.o make -j32编译成功以后就会生成一个名为“noblockio.ko”的驱动模块文件。 ②、编译测试APP arm-linux-gnueabihf-gcc noblockioApp.c -o noblockioApp 编译成功以后就会生成 noblcokioApp 这个应用程序。 2)、运行测试 depmod //第一次加载驱动的时候需要运行此命令 modprobe noblockio.ko //加载驱动 驱动加载成功以后使用如下命令打开 noblockioApp 这个测试 APP并且以后台模式运行   ./noblockioApp /dev/noblockio 当按下 KEY0 按键以后 noblockioApp 这个测试 APP 就会打印出按键值。输入“top”命令 查看 noblockioAPP 这个应用 APP 的 CPU 使用率。 四、总结 本篇笔记为本节的后半部分主要内容为阻塞IO和非阻塞IO的驱动开发实现。 本文为参考正点原子开发板配套教程整理而得仅用于学习交流使用不得用于商业用途。

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

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

相关文章

书店网站建设目标调研的方案网站图片悬浮代码

将at24c04模块连接到开发板i2c2总线上 i2ctool查看i2c2总线上都有哪些设备 UU表示设备地址的从设备被驱动占用,卸载对应的驱动后,UU就会变成从设备地址。at24c04模块设备地址 0x50和0x51是at24c04模块i2c芯片的设备地址。这个从芯片手册上也可以得知。A0 A1 A2表示的是模块对…

中国建设教育协会的是假网站吗城乡建设学校网站

‍‍‍‍1这篇文章是在上一篇文章之后写的,因为上篇文章写到了嵌入式找兼职的一些坑,下面有同学留言说要怎么找到兼职项目,所以这篇文章会写一些我的兼职经历还有总结建议,希望对大家如何找兼职有一些帮助。这篇文章是写第二次了&…

提示网站正在建设中常州小型网站建设

使用Jest测试Cesium源码 介绍环境Cesium安装Jest安装Jest模块包安装babel安装Jest的VSC插件 测试例子小结 介绍 在使用Cesium时,我们常常需要编写自己的业务代码,其中需要引用Cesium的源码,这样方便调试。此外,目前代码中直接使用…

随手记 | 关于AI最新趋势和未来发展方向探讨

随手记 | 关于AI最新趋势和未来发展方向探讨总的来说,我想要表达的是未来的发展速度越来越快了 还有自己不能像别人那样清晰且流程的表述出自己的观点,即使自己在AI的领域中已经有很深入的学习了,也许是贬低或是却是…

网站建设企业号助手企业网站排名提升软件智能优化

错误显示 前提条件 apt-get install opensslapt-get install openssl-dev 解决办法 在CMakeLists.txt文件中加入如下命令link_libraries(crypto) 参考链接 无法将openssl库链接到CLion C 程序c - 无法将openssl库链接到CLion C程序

奉贤免费网站建设app模板下载网站模板

选择自己发新年短信群发还是106短信平台,取决于您的需求和资源。 如果您需要发送的短信数量较少,或者您有特定的发送需求,例如需要发送一些包含敏感信息的短信,那么您可以选择自己发送。您可以使用手机或电脑上的短信应用程序来发…

大名做网站网页好看的网站设计

在k8s当中支持两种声明资源的方式: 1、 yaml格式:主要用于和管理资源对象 2、 json格式:主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件,所有的内容都在y…

linux系统服务器怎么做网站图书信息管理系统代码网站建设

指定顶部模块和重新排序源 文件夹默认情况下,Vivado Design Suite会自动确定设计的顶层添加到的源文件的层次结构和细化、合成和模拟的顺序项目这可以通过右键单击中的“层次更新”设置进行控制“源”窗口的菜单。请参阅中的“源”窗口中的“层次更新”命令Vivado …

上海网站建设中心深圳高端网站建设创新

8月24日-27日,第十七届全国知识图谱与语义计算大会(CCKS 2023)在沈阳召开。大会以“知识图谱赋能通用AI”为主题,探讨知识图谱对通用AI技术的支撑能力,探索知识图谱在跨平台、跨领域等AI任务中的作用和应用途径。 作为…

模板网站的建设方式与方法广州广告网站建设

一、 多租户定义 多租户定义: 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用…

纪检监察网站建设方案用家用电脑建设网站

2013年手游行业的规模与收入均实现了大幅增长,发展势头强劲。然而,在手游快速发展的同一时候,因为监管、审核等方面存在着漏洞,手机游戏软件被破解后注入恶意代码、盗取用户財产、窃取用户设备信息的现象屡见不鲜。手游被破解后黑…

# Redis vs ElasticSearch 搜索性能对比

# Redis vs ElasticSearch 搜索性能对比Posted on 2025-10-07 05:00 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# Redis vs ElasticSearch 搜索性能对比Redis vs ElasticSearch 搜索性能对比 思维路线导读…

Redis部署策略

Redis部署策略Posted on 2025-10-07 05:00 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:Redis部署策略Redis 部署策略

AI骚扰电话:技术发展的双刃剑效应

AI骚扰电话:技术发展的双刃剑效应Posted on 2025-10-07 05:00 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:AI骚扰电话:技术发展的双刃剑效应AI骚扰电话:技术发展的双刃剑效应来源: 金错刀 - 霸榜315的「最…

早期白板编程案例

早期白板编程案例Posted on 2025-10-07 05:00 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:早期白板编程案例早期白板编程案例:Max Howell 的 Google 面试争议 背景介绍 Max Howell 是 macOS 上著名的包管理…

【Claude 3.5 Sonnet 生成】AI时代软件行业发展趋势与开发者成长路径分析报告

【Claude 3.5 Sonnet 生成】AI时代软件行业发展趋势与开发者成长路径分析报告Posted on 2025-10-07 05:00 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:【Claude 3.5 Sonnet 生成】AI时代软件行业发展趋势与开…

免费推广自己的网站网站建设技术手段

数据示例 前台单值参数实现in查询 主要函数FIND_IN_SET 该函数的作用是查询字段(strlist) 中是否包含(str)的结果,返回结果为 null或记录 select id,recommend_position_id from t_stk_task where FIND_IN_SET(359919,recommend_position_id)查询效果 前台集…

电商网站有哪些功能模块wordpress中文版书籍

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:JAVASE进阶:源码精读——HashMap源码详细解析 📚订阅专栏:JAVASE进阶 希望文章对你们有所帮助…

珠海建设集团网站首页商城网站支付系统怎么做

MySQL 是个服务,所以我们可以借用 Google 四个黄金指标的思路来解决问题。 1、延迟 应用程序会向 MySQL 发起 SELECT、UPDATE 等操作,处理这些请求花费了多久,是非常关键的,甚至我们还想知道具体是哪个 SQL 最慢,这样…

怎么让百度收录网站所有网页网站开发net教程

本文介绍基于VBA语言,对大量含有图片、文本框与表格的Word文档加以批量自动合并,并在每一次合并时添加分页符的方法。 在我们之前的文章基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符(https://blog.csdn.net/zhebu…