按键演示休眠与唤醒场景--基于IMX6ULL

简介: 按键演示休眠与唤醒场景--基于IMX6ULL

按键演示休眠与唤醒场景–基于IMX6ULL

1.APP 调用 read 等函数试图读取数据,比如读取按键;

2.APP 进入内核态,也就是调用驱动中的对应函数,发现有数据则复制到用户

空间并马上返回;

3.如果 APP 在内核态,也就是在驱动程序中发现没有数据,则 APP 休眠;

4.当有数据时,比如当按下按键时,驱动程序的中断服务程序被调用,它会记

录数据、唤醒 APP;

5.APP 继续运行它的内核态代码,也就是驱动程序中的函数,复制数据到用户

空间并马上返回。

驱动中有数据时,图 19.1 中红线就是 APP1 的执行过程,涉及用户态、内

核态:

ae5e0da741b547f490df514a7538dcf2.png

驱动中没有数据时,APP1 在内核态执行到 drv_read 时会休眠。所谓休眠就是把自己的状态改为非 RUNNING,这样内核的调度器就不会让它运行。当按下按键,驱动程序中的中断服务程序被调用,它会记录数据,并唤醒 APP1。所以唤醒就是把程序的状态改为 RUNNING,这样内核的调度器有合适的时间就会让它运行。当 APP1 再次运行时,就会继续执行 drv_read 中剩下的代码,把数据复制回用户空间,返回用户空间。APP1 的执行过程如下图的红色实线所示,它被分成了 2段:

9c598b398325493f87a6f8a896f20f68.png

值得注意的是,上面 2 个图中红线部分都属于 APP1 的“上下文”,或者这样说:红线所涉及的代码,都是 APP1 调用的。但是按键的中断服务程序,不属于APP1 的“上下文”,这是突如其来的,当中断发生时,APP1 正在休眠呢。

在 APP1 的“上下文”,也就是在 APP1 的执行过程中,它是可以休眠的。

在中断的处理过程中,也就是 gpio_key_irq 的执行过程中,它不能休眠:“中断”怎么能休眠?“中断”休眠了,谁来调度其他 APP 啊?

所以,请记住:在中断处理函数中,不能休眠,也就不能调用会导致休眠的

函数。

等待内核函数:


22d7ba4688434b4c9402e4fb8ee031e1.png

比较重要的参数就是:

wq:waitqueue,等待队列

休眠时除了把程序状态改为非 RUNNING 之外,还要把进程/进程放入wq 中,以后中断服务程序要从 wq 中把它取出来唤醒。

没有 wq 的话,茫茫人海中,中断服务程序去哪里找到你?

condition

这可以是一个变量,也可以是任何表达式。表示“一直等待,直到 condition为真”。

唤醒内核函数:

d7f19bb230674eeab2afe87f75f684ee.png

目录
相关文章
|
Linux 调度
按键消抖的两种方法--中断延迟工作与定时器
按键消抖的两种方法--中断延迟工作与定时器
661 0
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
428 2
|
6月前
全志 添加TP休眠触摸唤醒 Patch
全志 添加TP休眠触摸唤醒 Patch
46 1
|
传感器
Flir Blackfly S USB3 工业相机:计数器和定时器的使用方法
本文档概述了 Blackfly S 相机中的计数器和定时器的使用方法。 Blackfly S 采用业内先进的冰块外形传感器。 具有强大功能,可以轻松生成所需的精确图像,并加速应用程序开发。 包括对图像捕获和**相机预处理的自动和精确手动控制**。 Blackfly S 提供GigE、USB3、套装和板级版本。 精确图像 索尼CMOS传感器中的选择包括:全局快门、偏振和高灵敏度BSI传感器。
Flir Blackfly S USB3 工业相机:计数器和定时器的使用方法
三种方式中断运行的线程?(interrupt 方法)
三种方式中断运行的线程?(interrupt 方法)
98 0
|
存储 调度
51单片机--定时器与按键控制流水灯模式
51单片机--定时器与按键控制流水灯模式
460 0
|
芯片
STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
207 0
|
安全 网络协议 JavaScript
【玩转RT-Thread】 RT-Thread Studio使用(1)(按键控制电机正反转、蜂鸣器)
【玩转RT-Thread】 RT-Thread Studio使用(1)(按键控制电机正反转、蜂鸣器)
355 0
|
C语言 芯片
51单片机学习--定时器--中断--串口通信
51单片机学习--定时器--中断--串口通信
308 0