内核中的快速中断库函数有问题!!

jackadandy jackadandy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用的内核版本linux--2.4.13
它提供了快速中断函数,我的机子里是在/usr/src/arm/linux/arch/arm/kernel/fiq.c 在该文件中,宏FIQ_START的值为64,那么在调用函数enable_fiq(fiq)时,他就会间接调用了enable_irq(fiq+FIQ_START)函数。其中enable_irq的参数会大于等于64,这样就出错了,因为下面数组irq_desc[]最大包含30个元素(struct irqdesc irq_desc[NR_IRQS]; NR_IRQS=30)

void enable_irq(unsigned int irq)
87 {
88 unsigned long flags;
89
90 spin_lock_irqsave(&irq_controller_lock, flags);
91 irq_desc[irq].probing = 0;
92 irq_desc[irq].triggered = 0;
93 irq_desc[irq].enabled = 1;
94 irq_desc[irq].unmask(irq);
95 spin_unlock_irqrestore(&irq_controller_lock, flags);
96 }

我在驱动中调用这个函数试就出错了!


还有一个
int claim_fiq(struct fiq_handler *f)
185 {
186 int ret = 0;
187
188 if (current_fiq) {
189 ret = -EBUSY;
190
191 if (current_fiq->fiq_op != NULL)
192 ret = current_fiq->fiq_op(current_fiq->dev_id, 1);
193 }
194
195 if (!ret) {
196 f->next = current_fiq;
197 current_fiq = f;
198 }
199
200 return ret;
201 }
中的current_fiq初始赋为 default_owner
而default_owner = {
89 name: "default",
90 fiq_op: fiq_def_op,
91 };
这样的话当第一次申请FIQ,调用claim_fiq时,current_fiq!=0(current_fiq->name!=NULL,current_fiq->fiq_op =NULL),这样的话,岂不是ret= -EBUSY,永远提示设备忙,不能申请啊?


谁了解,指点一下吧!!!

...全文

相关推荐

STM32的EXTI外部中断(库函数)

STM32的EXTI外部中断(库函数),内有详细代码注释和说明讲解,很好的学习资料。

weixin_41205554

Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

---------------------------------------------------Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

hanksonyao

自己写的STM32 IO 定时器 外部中断例程 库函数

STM32 IO 定时器 外部中断的库函数例程 自己写的 很有用哦

dd940314812

stm32库函数中文使用手册

stm32库函数中文使用手册,stm32开发中经常会需要查文档,但是全部是英文的,特意找了一个中文版的给大家分享

jcyd_123

Linux内核中的中断

中断处理程序是被内核调用来响应中断的,它运行在中断上下文,中断处理程序是上半部,当接收到一个中断,它立即开始执行,但只做有严格时限的工作,例如对接收的中断进行应答或复位硬件,这些工作都是在所有中断被禁止的情况下完成。能够被允许稍后完成的工作会推迟到下半部去。   中断处理程序的注册是通过request_irq函数,由于该函数内部有分配内存的操作,所以它不能在中断上下文或其他不允许阻塞的代码中调用。Linux中的中断处理程序是无须重入的,因为当一个给定的中断处理程序正在执行时,所有其他的中断都是打开的,而当前中断线总是被禁止的,由此可见,同一个中断处理程序绝不会被同时调用以处理嵌套的中断。中

weixin_38615591
评论 3
收藏 已收藏
分享
返回顶部
jackadandy
Linux_Kernel 4,469 成员 17,458 内容