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

镇江网站优化哪家好如何在建设部网站查企业资质

镇江网站优化哪家好,如何在建设部网站查企业资质,长沙网站建设公司哪家专业,wordpress o2o插件Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在正式开启今天的学习前#xff0c;讲一讲为什么标题中加入了【主动】俩字。之前学习的阻塞和非阻塞IO#xff0c;都是在被动的接受应用程序的操作。而今天的学…Linux版本号4.1.15   芯片I.MX6ULL                                    大叔学Linux    品人间百味  思文短情长  在正式开启今天的学习前讲一讲为什么标题中加入了【主动】俩字。之前学习的阻塞和非阻塞IO都是在被动的接受应用程序的操作。而今天的学习的异步通知则是驱动程序自动的去上报自己的状态类似于以前我们学习的中断机制。 谈到【主动】和大家共勉一句话凡事先干起来就能消除90%的焦虑。当我第一次看到这句话的时候突然有种豁然开朗的感觉。往往大家都是在托腮忧虑自己想象中的困难而久久不知所措而停止行动。殊不知我们自己想象中的大部分困难也只存在于我们的想象中。当着手开始行动时你会发现也许并不难。 本篇笔记主要学习了嵌入式Linux异步通知驱动开发相关知识主要内容包括异步通知的相关概念及驱动开发的过程。其中异步通知又包括异步通知简介、驱动中的信号处理以及应用程序对异步通知的处理。驱动开发包括设备树的修改、驱动开发及测试。其中驱动开发是本节重点需要关注的内容。 本篇笔记的思维导图如下 一、异步通知 关键字主动 中断 1.异步通知简介 关键字信号 在应用程序中使用 signal 函数来设置指定信号的处理函数. sighandler_t signal(int signum, sighandler_t handler) signum要设置处理函数的信号。handler 信号的处理函数。返回值 设置成功的话返回信号的前一个处理函数设置失败的话返回 SIG_ERR。   2.驱动中的信号处理 1)、fasync_struct struct fasync_struct { spinlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next; struct file *fa_file; struct rcu_head fa_rcu; }; 一般将 fasync_struct 结构体指针变量定义到设备结构体中。 2、fasync函数 int (*fasync) (int fd, struct file *filp, int on) int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp) 当应用程序通过“fcntl(fd, F_SETFL, flags | FASYNC)”改变fasync 标记的时候驱动程序 file_operations 操作集中的 fasync 函数就会执行。 在关闭驱动文件的时候需要在 file_operations 操作集中的 release 函数中释放 fasync_structfasync_struct 的释放函数同样为 fasync_helper。 3)、kill_fasync 负责发送指定的信号。函数的原型如下 void kill_fasync(struct fasync_struct **fp, int sig, int band) fp要操作的 fasync_struct。sig 要发送的信号。band 可读时设置为 POLL_IN可写时设置为 POLL_OUT。 3.应用程序对异步通知的处理 1、注册信号处理函数 2、将本应用程序的进程号告诉给内核  fcntl(fd, F_SETOWN, getpid()) 3、开启异步通知 flags fcntl(fd, F_GETFL); /* 获取当前的进程状态 */ fcntl(fd, F_SETFL, flags | FASYNC); /* 开启当前进程异步通知功能 */ 二、硬件原理图分析 三、应用程序编写 1.修改设备树文件 2.程序编写 #include linux/fcntl.h//因为要用到相关的 API 函数。 struct fasync_struct *async_queue; /* 设备结构体中加入异步相关结构体 */ 109 if(atomic_read(dev-releasekey)) { /* 一次完整的按键过程 */ 110 if(dev-async_queue) 111 kill_fasync(dev-async_queue, SIGIO, POLL_IN); 112 } 如果是一次完整的按键过程那么就通过 kill_fasync 函数发送 SIGIO 信号。 269 static int imx6uirq_fasync(int fd, struct file *filp, int on) 270 { 271 struct imx6uirq_dev *dev (struct imx6uirq_dev *) filp-private_data; 272 return fasync_helper(fd, filp, on, dev-async_queue); 273 } imx6uirq_fasync 函数为 file_operations 操作集中的 fasync 函数此函数内容很简单就是调用一下 fasync_helper。 281 static int imx6uirq_release(struct inode *inode, struct file *filp) 282 { 283 return imx6uirq_fasync(-1, filp, 0); 284 } release 函数应用程序调用 close 函数关闭驱动设备文件的时候此函数就会执行在此函数中释放掉 fasync_struct 指针变量。 292 .fasync imx6uirq_fasync, 293 .release imx6uirq_release, 设置 file_operations 操作集中的 fasync 和 release 这两个成员变量。 3.编写测试APP 27 /* 28 * SIGIO 信号处理函数 29 * param - signum : 信号值 30 * return : 无 31 */ 32 static void sigio_signal_func(int signum) 33 { 34 int err 0; 35 unsigned int keyvalue 0; 36 37 err read(fd, keyvalue, sizeof(keyvalue)); 38 if(err 0) { 39 /* 读取错误 */ 40 } else { 41 printf(sigio signal! key value%d\r\n, keyvalue); 42 } 43 } sigio_signal_func 函数 SIGIO 信号的处理函数当驱动程序有效按键按下以后就会发送 SIGIO 信号此函数就会执行。此函数通过 read 函数读取按键值然后通过printf 函数打印在终端上。 signal(SIGIO, sigio_signal_func); 通过 signal 函数设置 SIGIO 信号的处理函数为 sigio_signal_func。 71 fcntl(fd, F_SETOWN, getpid()); /* 将当前进程的进程号告诉给内核 */ 72 flags fcntl(fd, F_GETFD); /* 获取当前的进程状态 */ 73 fcntl(fd, F_SETFL, flags | FASYNC);/* 设置进程启用异步通知功能 */ 设置当前进程的状态开启异步通知的功能。 四、运行测试 1.编译驱动程序和测试APP 1、编译驱动程序 obj-m : asyncnoti.o make -j32             asyncnoti.ko”的驱动模块   2、编译测试APP arm-linux-gnueabihf-gcc asyncnotiApp.c -o asyncnotiApp 应用程序asyncnotiApp 2.运行测试 depmod //第一次加载驱动的时候需要运行此命令 modprobe asyncnoti.ko //加载驱动 ./asyncnotiApp /dev/asyncnoti 按下开发板上的 KEY0 键终端就会输出按键值。 五、总结 本篇笔记主要学习了嵌入式Linux异步通知驱动开发相关知识主要内容包括异步通知的相关概念及驱动开发的过程。 本文为参考正点原子开发板配套教程整理而得仅用于学习交流使用不得用于商业用途。
http://www.tj-hxxt.cn/news/130926.html

相关文章:

  • 科技部网站建设合同成都专业网站建设价格低
  • 网站建设与单位干部作风的关系做网站如何盈利
  • html 手机网站开发网站建设用哪个好
  • 网站环境搭建做视频搬运哪个网站最赚钱
  • 北京出名做网站的公司wordpress超级排版
  • 常州建设银行网站网站公司做销售怎么样
  • 2018年怎么做网站排名品牌推广营销平台
  • 岱山建设网站页面设计排版网站
  • 环保工程 技术支持 东莞网站建设怎么做网站的教程
  • 网站开发最严重的问题医疗网站建设资讯
  • 男人是用什么做的视频网站php网站漂浮广告代码
  • 网站建设评选打分学做网站论坛vip账号破解
  • 传统企业建设网站的内容门窗网站模板
  • 手机建设银行网站首页怎么下别人wordpress模板
  • 武陟网站建设苏州哪家保洁公司好
  • 济南外贸网站建设宁波建设教育培训网
  • 微信小程序传奇怎么制作seo文章推广
  • 优秀网站例子专业优化网站建设
  • 海外网站建设外贸是做什么的学什么专业
  • 石家庄红酒公司 网站建设广州白云区网站开发
  • 珠海网站seo建设一个机械公司网站多少钱
  • 哈尔滨做网站搭建的wordpress自动缩略图
  • 网站目录怎么做网站建设 镇江万达
  • 手机端开发网站模板下载中企动力科技股份官网
  • 外贸 国外推广网站网站开发设计工程师岗位职责
  • 上传网站教程做app多少钱
  • 自己做网站一定要实名吗开发公司挖出的沙子归谁
  • 金泉网 网站建设站群软件
  • 网站建设与运营的预算方案模板厦门住房和城乡建设局网站
  • 如何用七牛云做视频网站网站建设与运营合同