【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

发现问题的契机:
学习异步通知的时候,自己实现一个功能:按键控制蜂鸣器,同时LED灯在闪烁
结果:LED好像也同时被按键控制了

最后调试结果发现:
应用层的sleep被驱动层的kill_fasync打断,所以sleep没有执行完就重新进入下一次循环了
在这里插入图片描述
修改代码后解决该问题
解决逻辑就是:既然休眠函数会被打断,则让每次休眠的时间短一点
在这里插入图片描述
解释:
sleep函数是可以被中断的,也就是说当进程在睡眠的过程中,如果被中断,那么当中断结束回来再执行该进程的时候,该进程会从sleep函数的下一条语句执行。
说明kill_fasync这个函数中有中断发生。

PS:
为什么sleep被中断后会直接执行下一句呢?(感谢网友的提问 @dhy9974)

查看sleep的man手册

man 3 sleep

发现sleep函数有返回值

SLEEP(3)                               Linux Programmer's Manual                               SLEEP(3)

NAME
       sleep - sleep for a specified number of seconds

SYNOPSIS
       #include <unistd.h>

       unsigned int sleep(unsigned int seconds);

DESCRIPTION
       sleep()  causes  the calling thread to sleep either until the number of real-time seconds speci‐
       fied in seconds have elapsed or until a signal arrives which is not ignored.

RETURN VALUE
       Zero if the requested time has elapsed, or the number of seconds left to sleep, if
        the call  was interrupted by a signal handler.

返回值:
如果请求的时间已过,则返回零,
如果调用被信号处理程序中断,则返回剩余的睡眠秒数。

如果想做到真正的睡眠,sleep被中断了也没问题的话,可以这么写

int time;
while(time > 0){
    time = sleep(time);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值