linux中断编程函数
来源:互联网 发布:安卓数据库编辑器 编辑:程序博客网 时间:2024/04/27 22:09
总结下linux中断编程的函数,方便下次使用时查看。
1.中断申请和释放
int request_irq( unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char * devname, void *dev_id )
irq---中断号
handler---中断处理函数
irqflags---中断属性
devname---中断名称
dev_id---传给中断的数据结构
void irq_free(unsigned int irq, void *dev_id)
irq---中断号
dev_id---传给中断的数据结构
2. 使能和屏蔽中断
void disable_irq(int irq);//立刻屏蔽中断,不能再顶半部调用该函数
void disable_irq_nosync(int irq);//等待处理完当前中断服务,然后屏蔽中断
void enable_irq(int irq);//重开中断
local_irq_save(flags);//保存本cpu中断状态并屏蔽中断
local_irq_restore(flags);//用flags恢复被cpu中断状态
void local_irq_disable(void);//禁止本cpu中断
local_irq_disable;//重看本cpu中断
3. tasklet
void xx_tasklet_func(unsigned long); //声明一个tasklet处理函数
DECLARE_TASKLET(xx_tasklet,xx_tasklet_func,data); //声明一个名字为xx_tasklet的tasklet,并将xx_tasklet_func作为处理函数,data为传给xx_tasklet_func的参数
tasklet_schedule(&xx_tasklet); //启动xx_tasklet调度
4.工作队列
struct work_struct my_wq; //声明一个工作队列
void my_wq_func(unsigned long); //定义一个工作队列处理函数
INIT_WORK(&my_wq, (void (*)(void *)) my_wq_func,NULL ); //将工作队列和处理函数绑定
schedule_work(&my_wq); //启动工作队列调度
5. 内核定时器
struct timer_list {
struct list_head entry;
unsigned long expires;//定时时间,jiffies+delayn
void (*function)(unsigned long);//处理函数
unsigned long data;
struct tvec_base *base;
...
};//内核定时器结构体
struct timer_list my_timer; //声明一个定时器
void init_timer(struct timer_list *timer); //初始化定时器,在该定时器成员赋值前,先执行初始化
void add_timer(struct timer_list *timer); //向内核添加一个定时器,启动该定时器
int mod_timer(struct timer_list *timer,unsigned long expires);//修改定时的expire
int del_timer(struct timer_list *timer); //删除一个定时器
内核定时使用简介:声明一个定时器,然后初始化,然后添加定时器到内核,定时器开始启动,时间到后,定时器处理程序会自动执行,在中断程序里需要重新设置定时值,并重新使用add_timer来开启定时器。
6. 短延时
void ndelay(unsigned long nsecs); //忙等待延时nsecs纳秒
void udelay(unsigned long usecs); //忙等待延时usecs微秒
void mdelay(unsigned long msecs); //忙等待延时msecs毫秒
7. 长延时
例子1:延时100个jiffies
unsigned long delay = jiffes+100;
while(time_before( jiffes,delay) );
例子2:延时2秒
unsigned long delay = jiffes+2*Hz;
while(time_before( jiffes,delay) );
此外还有time_after(a,b),用法类似。
8. 睡着延时
void msleep( unsigned int millisecs ); //睡眠millisecs个毫秒的延时
void ssleep( unsigned int seconds ); //睡眠seconds秒的延时
unsigned long msleep_interruptible( unsigned int millisecs );//睡眠millisecs个毫秒的延时,并且睡眠期间可被中断
- linux中断编程函数
- linux中断编程函数
- linux中断--内核中断编程
- linux中断--内核中断编程
- Linux的中断编程
- Linux中断内核编程
- Linux中断内核编程
- Linux中断编程
- Linux中断内核编程
- Linux中断内核编程
- linux中断编程
- Linux中断内核编程
- Linux中断内核编程
- linux驱动编程--中断
- 中断编程 -- linux内核
- Linux 中断学习及中断内核编程
- 《Linux中断编程》中断处理底半部
- 《Linux中断编程》中断处理底半部
- 《多线程》学习笔记
- mnesia 数据转移
- strrchr
- 《设计模式》读书笔记
- plsql 表中字段及注释时为乱码
- linux中断编程函数
- 线段树应用
- Hadoop-2.X HA模式下的FSImage和EditsLog合并过程
- 关于64位系统上运行32位IIS,而不能调用的ODBC获取数据的问题。
- UVA455 Periodic Strings
- Codeforces Round #357 (Div. 2) Editorial
- 1999: [Noip2007]Core树网的核
- Hadoop错误积累
- java谜题-库谜题(复写hashcode与equal方法)