请教如何安装中断处理程序

30 views
Skip to first unread message

Ziyu Yu

unread,
Jun 25, 2009, 6:07:16 AM6/25/09
to rtems-chines...@googlegroups.com

我现在要写一rtems驱动,请问中断处理程序怎么安装呢?
我现在是在驱动的init函数中先用rtems_io_register_name注册设备,然后再用
rtems_interrupt_catch设置isr.我的isr就是将一个全局变量加1,然后在任务中循
环检测这个全局变量,来看isr是否被调用.但是现在isr好像一直未被调用,不知道
是怎么回事.中断确实发生了,在状态寄存器中可以读到.

谢谢:)

xu ray

unread,
Jun 25, 2009, 8:57:59 AM6/25/09
to rtems-chines...@googlegroups.com
看起来像是中断处理函数没有被触发。你是在那个平台下进行开发的?
rtems_interrupt_catch会调用_ISR_Install_vector。并不是每种平台都实现该函数,需要看看你使用的硬件平台是否实现该函数。
此外,如果能调试也可看看,有没有进入中断处理...

2009/6/25 Ziyu Yu <yuziy...@gmail.com>



--
Thanks & Best Regards!

Ray, Xu

Ziyu Yu

unread,
Jun 25, 2009, 8:59:38 AM6/25/09
to rtems-chines...@googlegroups.com
我的cpu是arm7(at91m40800), 开发板是ev40.
xu ray 写道:
> 看起来像是中断处理函数没有被触发。你是在那个平台下进行开发的?
> rtems_interrupt_catch会调用_ISR_Install_vector。并不是每种平台都实现该函
> 数,需要看看你使用的硬件平台是否实现该函数。
> 此外,如果能调试也可看看,有没有进入中断处理...
>

xu ray

unread,
Jun 25, 2009, 9:03:47 AM6/25/09
to rtems-chines...@googlegroups.com
嗯可以看看csb337的BSP实现...都是atmel的嘛比较接近。
需要你自己实现BSP_install_rtems_irq_handler,然后通过这个函数安装中断处理。

2009/6/25 Ziyu Yu <yuziy...@gmail.com>

Ziyu Yu

unread,
Jun 25, 2009, 9:09:57 AM6/25/09
to rtems-chines...@googlegroups.com
谢谢您的回复。BSP_install_rtems_irq_handler已经实现了。而且确实已经被调
用了。。
xu ray 写道:
> 嗯可以看看csb337的BSP实现...都是atmel的嘛比较接近。
> 需要你自己实现BSP_install_rtems_irq_handler,然后通过这个函数安装中断处理。
>

xu ray

unread,
Jun 25, 2009, 10:05:34 AM6/25/09
to rtems-chines...@googlegroups.com
如果这样的话,比较麻烦。可能是ISR没有安装好,也可能是外部中断被屏蔽.....
看看ExecuteITHandler有没有被调用

2009/6/25 Ziyu Yu <yuziy...@gmail.com>

Ziyu Yu

unread,
Jun 25, 2009, 10:23:49 AM6/25/09
to rtems-chines...@googlegroups.com
请问ExecuteITHandler这个函数在哪?

xu ray 写道:

Ziyu Yu

unread,
Jul 7, 2009, 9:53:57 PM7/7/09
to rtems-chines...@googlegroups.com
像时钟isr里面调用rtems_clock_tick(),这个函数是会引起调度的啊。
isr不是不能引起调度吗?没有linux中的tasklet或workqueue这样的机制吗?

julyon

unread,
Jul 8, 2009, 7:50:26 AM7/8/09
to RTEMS Chinese User Group
时钟中断其中一个作用就是实现时间片轮转算法,其ISR当然会引起调度。但这个工作不再ISR里面做,它自是把调度使能位置位而已,当退出中断时,会检
测这个位,要是需要任务切换,就执行调度函数。

On 7月8日, 上午9时53分, Ziyu Yu <yuziyum...@gmail.com> wrote:
> 像时钟isr里面调用rtems_clock_tick(),这个函数是会引起调度的啊。
> isr不是不能引起调度吗?没有linux中的tasklet或workqueue这样的机制吗?

Reply all
Reply to author
Forward
0 new messages