linux 驱动开发笔记_内核定时器&tasklet

本文详细介绍了Linux内核中如何判断代码状态,包括`in_interrupt()`和`in_atomic()`函数的使用。接着深入讲解了内核定时器的创建、初始化、更新和删除过程,并指出其在设定未来时间后自动调用功能。最后,讨论了Tasklet机制,它在软件中断上下文以原子模式运行,以及如何定义、调度和控制Tasklet。
摘要由CSDN通过智能技术生成

1.判断内核代码的状态

in_interrupt()

1.判断内核自己是否处于中断上下文中;
2.无需输入参数;
3.如果处理器运行在中断上下文就返回非零值。(包含硬件中断和软件中断)。

in_atomic()

1.判断是否位于原子上下文中;
2.无输入参数;
3.调度不被允许时,返回非零值。(包含硬/软中断、拥有自旋锁的的时间点)。

2.内核定时器使用

1.创建结构体(定时器)

struct timer_list {

unsigned long expires; //期望运行的时间
void (*function)(unsigned long); //调用的函数
unsigned long data; //传入函数的参数数据
};

 struct timer_list  timer;   //先定义再初始化
 init_timer(&test.timer);

2.初始化其中的变量

    timer.expires = jiffies + msecs_to_jiffies(1000);  //延时1s执行
    timer.function = timer_fun
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值