项目中QNX的USB驱动开发的反思

2023-11-11


锋影

e-mail:174176320@qq.com


接触驱动层的东西,心里还有点小激动。总感觉自己比没搞之前提高了那么一点点,也不知是真的假的,拉出来遛遛。

 

1.整体思路

 

★驱动层

  先从驱动层说起,他将USB设备通过Resource Manager注册成一个文件,提供 IO服务:

①    :通过USB控制接口登陆回调函数

②    :通过USB的回调函数“insertion”,也就是USB插入信号来生成ResourceManager。如果设备已经插入,驱动启动后会立刻受到“insertion”回调。

③    :通过ResourceManager登陆的各种IO接口,提供IO服务。底层是用usb_io来访问USB设备。

 

★接口层

  接口层通过解释设备中的数据协议,提供数据服务,主要有以下三种:

①    连接控制:通过连接接口控制app的接入,处理资源的获取和释放。

②    应答响应:通过各种操作接口提供数据服务,响应用户的请求。

③    通知处理:通过通知接口及时反映系统的状态。

2.现实

  虽然看起来还不错,但是实际运用的时候惨的一塌糊涂,那个各种不稳定啊,现在想起来心里还堵得慌。

  这次失败在接口层的通知处理上,当时那位神人是这么搞得

  ?1秒一次的数据通知,在通知线程中实现

  ?数据的发送/应答在客户线程中实现

  ?极品的来了,通知处理和应答处理各自访问设备文件。

    应答线程的处理是这样的

         ?通知→转发通知→继续收

         ?本消息的应答→返回

         ?其他消息→无视→继续收

    通知线程的处理是这样的

         ?通知→发通知→继续收

         ?其他消息→无视→继续收

  问题出来了,只要设备的连接不稳定,那消息是各种丢啊。最后没办法,系统只能频繁的通过重新连接来恢复。

 

3.反思

  再有机会的话要这样:

  ?通知处理与应答处理应该使用共通的IO层。受到的消息到哪里去由IO层决定。这样消息就不会莫名其妙的消息被丢掉了。

  ?应答处理中实现消息堆栈。虽然正常状况下消息是一个一个来得,但总是会有一些意外的,为了能在意外发生时保持正常,就要看看自己到底发了啥,来得是真的错误消息,还是其他消息的应答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

项目中QNX的USB驱动开发的反思 的相关文章

  • 配置qnx6.6中screen 环境变量

    锋影 e mail 174176320 qq com 配置qnx6 6 中 screen 环境变量 根据 Screen Graphics Subsystem Developer s Guide 总结 停止 screen 进程 slay sc
  • YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 锋影 email 174176320 qq com YUV图解 YUV444 YUV422 YUV420 YV12 NV12 NV21 YUV格
  • Ubuntu下SSH设置,实现远程登录

    网上有很多介绍在Ubuntu下开启SSH服务的文章 但大多数介绍的方法测试后都不太理想 均不能实现远程登录到Ubuntu上 最后分析原因是都没有真正开启ssh server服务 最终成功的方法如下 Ubuntu 下安装 OpenSSH Se
  • [转]转型后的BlackBerry“恋上”汽车市场,QNX拿什么与免费的安卓/Linux对抗?

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com BlackBe
  • 基于QNX的Testbed单元测试环境配置过程

    锋影 e mail 174176320 qq com 1 本机安装QNX系统 A安装VMware Workstation v exe B在VMware打开QNX虚拟机 vmware Qnx Other vmx 2 打开Virtual Box
  • QNX学习笔记-Neutrino-QNX-boot启动流程分析

    锋影 e mail 174176320 qq com 嵌入式系统的启动都是类似的 先启动一个boot程序 然后又boot控制系统的进一步加载运行 1 处理从复位向量执行代码 2 启动系统的启动代码 qnx的启动代码就是IPL 3 IPL会将
  • [转]QNX_IDE使用cin输入变量不能编译通过的解决方法

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 在使用QNX
  • 搭建QNX开发环境-qnx系统环境开发

    锋影 e mail 174176320 qq com QNX是可以提供试用30天 目前发布最新的是qnx7 0版本 申请也是只能7 0 做好白老鼠的准备 老版本不再申请试用 其实多数时候 老版本的650 650sp1 和较新稳定的660版本
  • [转]汽车电子还能这么玩

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 导读 汽车电子
  • [译]一机多屏的虚拟机方案multivisor

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 创建生命和任务
  • 体验一个全新的RTOS-QNX系统功能介绍

    锋影 e mail 174176320 qq com QNX的简单的介绍 这个我就很惭愧的引用一下官方的一些说法 QNX Quick Unix Unix AT T QNX 实时操作系统是由加拿大著名的QNX SOFTWARE SYSTEMS
  • QNX车载操作系统音频功能扩展Acoustics for Voice 3.0-qnx的音频降噪技术

    锋影 e mail 174176320 qq com QNX的降噪技术 那套有源噪声控制系统只要车内有扬声器和麦克风 就能将车内噪声降低20分贝 这次新发布的Acoustics for Voice 3 0与之功能类似 可以看做是它的升级版
  • [转][QNX]对存储设备分区

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 email 174176320 qq com 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 命令格式 fdisk
  • qnx的汽车全液晶仪表-基于qnx系统的汽车仪表-车机系统开发

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 e mail 174176320 qq com QNX系统在
  • QNX下获取系统信息的方法(cpu,内存,进程等等)

    有不少朋友问在qnx下如何获取内存及cpu占有率等等 想到两年前自己做过一个类似windows里的任务管理器的东东 里面有一部分就是获取内存 cpu 磁盘及进程信息的GUI程序 记得也美其名曰xxxTaskMan 把里面的关键代码写下来供兄
  • QNX系统+Crank的UI设计方案-qnx的HMI方案

    锋影 e mail 174176320 qq com 今天先把QNX Acceleration Kit验证一下
  • QNX的应用移植迁移到Linux

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 author 锋影 e mail 174176320 qq com 近年来许多嵌入式产品将是公司从自营到开放源代码平台为他们提供更多灵活性和成本
  • [转]漫谈虚拟化-计算虚拟化中的 I/O 虚拟化

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 今天 咱们继续
  • 如何在与 gcc 链接时绕过“多个定义的符号”

    我使用的是具有 gcc 2 95 3 的旧系统 我必须链接两个对象 尽管它们彼此无关 但它们每个都有相似的命名方法 我无法重命名它们中的任何一个 但我希望有一种方法来构建它们 以免链接器抱怨 它所抱怨的方法都是由对象内的类在内部调用的 我能
  • 如何检测来自 QNX 中 ncurses 的屏幕调整大小事件?

    我无法配置为接收有关使用 ncurses QNX Momentics 更改终端大小的事件 我使用Putyy作为终端 通过COM端口传输数据 我的问题是如何实现使用远程终端时接收屏幕变化事件 FILE fcons fopen dev ser1

随机推荐