中断子系统

设备树中:

只需要在我们编写的设备树节点中引用已经写好的中断控制器父节点以及配置中断信息即可

重点在于interrupt-parent和interrupts

interrupt-parent:(父控制器节点)

这个填写的内容在 imx6ull.dtsi文件中含有成员interrupt-controller(含有该成员说明是一个中断控制器)中选择合适的填写即gpio1~gpio5、gpc、intc

interrupts:(触发方式)

程序中:

基本函数介绍:

中断注册函数:

中断注销函数

中断处理函数

中断的使能和禁用函数

tip:在调用request_irq函数后等于已经调用了enable_irq函数

关闭和开启全局中断相关函数(宏定义)

软中断:

        定义:

        由软件发送中断指令产生的中断

        软中断编号:

        tip:NR_SOFTIRQS并不是中断编号

软中断相关函数:

注册软中断函数:

触发软中断函数:

tasklet:

简介:

         tasklet 是基于软中断实现,如果对效率没有特殊要求推荐是用 tasklet 实现中断分层。为什么这么说,根据之前讲解软中断的中断服务函数是一个全局的数组,在多 CPU 系统中,所有 CPU 都可以访问,所以在多 CPU 系统中需要用户自己考虑并发、可重入等问题,增加编程负担。软中断资源非常有限一些软中断是为特定的外设准备的(不是说只能用于特定外设)例如“NET_TX_SOFTIRQ,NET_RX_SOFTIRQ,”从名字可以看出它们用于网络的 TX 和 RX。像网络这
种对效率要求较高的场合还是会使用软中断实现中断分层的。 相比软中断 tasklet 使用起来更简单,最重要的一点是在多 CPU 系统中同一时间只有一个 CPU 运 行 tasklet ,所以并发、可重入问题就变得很容易处理(一个 tasklet 甚至不用去考虑)。

结构体:

struct tasklet_struct
{
         struct tasklet_struct * next;
         unsigned long state;
         atomic_t count;
        void ( * func)( unsigned long );
         unsigned long data;
};

函数介绍:

初始化函数:
void tasklet_init ( struct tasklet_struct * t, void ( * func)( unsigned long ), unsigned long data)
参数:
        t:指定要初始化的 tasklet_struct 结构体
        func:指定 tasklet 处理函数,等同于中断中的中断服务函数
        data:指定 tasklet 处理函数的参数。函数实现就是根据设置的参数填充 tasklet_struct 结构体
返回值
触发中断函数(用来触发中断的)
         static inline void tasklet_schedule( struct tasklet_struct * t)

工作队列:

简介:        

        工作队列运行在内核线程,允许被重新调度和睡眠。

结构体:

        struct work_struct {

                 atomic_long_t data;
                 struct list_head entry;
                work_func_t func;
        #ifdef CONFIG_LOCKDEP
                struct lockdep_map lockdep_map;
        #endif
        };
重点在于work_func_t func, 该参数用于指定“工作”的处理函数。

函数介绍:

初始化函数(初始宏定义):

        #define INIT_WORK(_work, _func)

        该红顶共有两个参数,_work 用于指定要初始化的工作结构体,_func 用于指定工作的处理函数。

触发中断函数:

        static inline bool schedule_work(struct work_struct *work)

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值