Linux输入io口为什么一直检测到0

Linux驱动,那些调试的日子,终于拨开云雾见青天。实践证明,摄取多少知识并不等于你会了多少,实践才出真知,动手才能够打破疑惑。

上次分享留下了一个问题,自己也正在解决。为了能够解决,为了开会能够汇报进度,不想这个问题一直卡在这里,周末加了个小班,终于把这个问题解决了。

先回顾一下这个问题,就是对IO口的操作,输入检测一直为零。很纳闷,为什么输出可以输入不可以,是否是调用的函数有问题,还是配置的电气属性有问题。刚开始调的时候,设备树引脚重用检查了,内核调用的函数检查了,应用函数检查了,硬是没发现问题,这有点让我怀疑硬件有没有问题。

今天把输入脚配置成输出,控制没有问题,说明引脚被其他占用是不可能的了,因为能够正常访问控制。那问题就出在我的输入配置上了。仔细检查,查看原理图,今天一看,果然还是有点问题,因为在调试的过程换过好多个引脚,所以不确定之前是否真的配对,今天看来是没配对,这是一个点。

其次是设备树其实是有两个地方需要配置的,一个是配置引脚,另一个是配置属性。有点大意的地方是一直以为没有问题,因为刚开始的时候两个一起配了,后面只关注引脚,没关注属性这里,配置高电平也需要写引脚,这里没改,以至于出现一连串的问题。
在这里插入图片描述
这里还有一个点就是,引脚配置寄存器的时候,写成10b0和f080都可以检测到高低电平的变化,只要配置成输入就行了,这一点我需要再去看看。这个问题算是解决了。
在这里插入图片描述
在下还遇到一个问题,就是这些我在串口挂载,读取,控制都没有问题,但是放到应用程序里面会发现实现不了控制和检测,这里面微妙的变化还在研究,也希望广大朋友提点一下,感谢感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux IO 模型是指 Linux 操作系统中的 IO 处理机制。它的目的是解决多个程序同时使用 IO 设备时的资源竞争问题,以及提供一种高效的 IO 处理方式。 Linux IO 模型主要分为三种:阻塞 IO、非阻塞 IOIO 多路复用。 阻塞 IO 指的是当程序进行 IO 操作时,会被挂起直到 IO 操作完成,这种方式简单易用,但是对于高并发环境不太适用。 非阻塞 IO 指的是程序进行 IO 操作时,如果无法立即完成,会立即返回一个错误码,程序可以通过循环不断地进行 IO 操作来实现轮询的效果。非阻塞 IO 可以提高程序的响应速度,但是会增加程序的复杂度。 IO 多路复用指的是程序可以同时监听多个 IO 设备,一旦有 IO 事件发生,就会立即执行相应的操作。IO 多路复用可以提高程序的效率,但是需要程序员手动编写代码来实现。 Linux IO 模型还有其他的实现方式,比如信号驱动 IO 和异步 IO 等。但是这些方式的使用比较复杂,一般不常用。 ### 回答2: LinuxIO模型是指操作系统在处理输入输出(IO)时的工作方式和机制。Linux支持多种IO模型,包括阻塞IO、非阻塞IOIO多路复用和异步IO。 1. 阻塞IO(Blocking IO):当应用程序发起IO操作时,会一直阻塞等待IO操作完成才会返回结果。在阻塞IO模式下,内核会一直等待IO完成,期间CPU处于空闲状态,无法处理其他任务。 2. 非阻塞IO(Non-blocking IO):非阻塞IO模式下,应用程序通过设置IO文件描述符为非阻塞模式,并不断地轮询IO操作的状态。如果IO操作没有立即完成,应用程序不会等待,而是继续执行其他任务。这种模式下,CPU利用率较高,但需要消耗大量的轮询时间。 3. IO多路复用(IO Multiplexing):IO多路复用指的是通过select、poll、epoll等系统调用,能够同时监听多个IO事件。当任意一个IO事件准备就绪时,操作系统会通知应用程序进行IO操作。IO多路复用模型能够支持同时处理多个IO事件,提高了系统的整体性能。 4. 异步IO(Asynchronous IO):异步IO模式下,应用程序发起IO操作后立即返回,而不需要等待IO操作的完成。当IO操作完成后,操作系统会通知应用程序进行结果获取。异步IO模型能够在等待IO操作完成的同时进行其他任务,减少了等待时间,提高了系统的并发性能。 不同的IO模型适用于不同的场景和需求。阻塞IO适用于简单的应用程序,非阻塞IO适用于需要同时处理多个IO事件的高负载情况,IO多路复用适用于需要同时监听多个IO事件的场景,异步IO适用于需要高并发处理IO操作的应用程序。 ### 回答3: LinuxIO模型主要包括阻塞IO、非阻塞IO、多路复用IO和异步IO。 1. 阻塞IO模型:当用户进程发起IO操作时,如果操作不能立即完成,则进程会被阻塞,直到操作完成或出现错误。这种模型简单直观,适用于处理短时间内并发IO操作较少的情况,但会造成进程资源浪费。 2. 非阻塞IO模型:用户进程发起IO操作之后,会立即返回,不会被阻塞。进程可以通过轮询或者信号来检查IO操作是否完成,从而执行其他任务。这种模型适用于需要处理多个IO事件并希望不阻塞进程的情况。 3. 多路复用IO模型:通过使用select、poll或epoll等系统调用,将多个IO操作集中在一个系统调用中同时等待,从而有效提高IO效率。当有其中任何一个IO就绪时,进程被通知进行处理,可以同时处理多个IO事件,减少了轮询的开销。 4. 异步IO模型:用户进程发起IO操作后,不需要等待操作完成或者被通知,而是继续执行其他任务。当IO操作完成后,系统会通知进程进行处理。这种模型适用于需要处理多个IO事件且IO操作较耗时的情况。 总结来说,LinuxIO模型提供了多种选择,可以根据应用程序的需求和设计特点来选择适合的模型,以提高IO效率和系统性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值