- 论坛徽章:
- 0
|
有过嵌入式操作系统中断程序开发经验的人,都知道中断程序开发不是容易的事,不是简单的仅仅实现中断处理程序,还有很多其他的事要做,比如。
1) 将中断处理程序绑定到中断向量表,这又分两种。
a) 向量模式的中断,这种情况下,直接填充向量表。
b) 非向量模式,这种情况下,要有个总的中断入口(比如arm9的IRQ),然后在总的入口读取中断号,然后跳到你的中断处理函数。
2) 中断响应,这个主要涉及到清pending位。
3) 现场保护,就是寄存器的值。
所以在嵌入式操作系统中写个中断程序不容易啊,你肯定得知道相关的芯片信息,比如寄存器的信息,同时也得理解中断系统,就是整个中断过程,要不你怎么开发啊?
有没有一种简单的方法啊,有,acoral给了你一个偷懒的机会。
acoral的中断分为三种模式。
a 普通模式中断:
这种中断就是为了方便用户开发中断处理程序的,这种中断,用户只需实现中断处理程序,然后通过系统接口acoral_intr_attach即可实现中断处理程序,而不用实现上面的三个部分。
b 专家模式中断:
既然是专家,那你肯定就有能力知道芯片的相关信息,所以清中断位这些中断响应工作就得你来做,不过现场保存还是由系统统一帮你做。
c 实时模式中断:
上面两种中断模式对向量模式的中断都有一定的性能损耗,而有些系统对中断实时要求很严格,且能够达到实时,这是选择这种模式是首选,这种模式下中断处理程序的编写和刚开始提到的中断一样,用户需要实现上面的中断绑定,中断响应,现场保护等附属工作。
acoral中的中断处理模型如下:
当然部分开发平台也是支持简易中断处理编写,比如在ads中加上_irq关键字来声明一个函数是用来处理中断的,那么编译器会自动帮你生成保存现场的代码,但是其他的辅助工作还是需要你来做的,且不是所有开发平台支持这种模式,且这种有时会产生一些误差,比如cortex-m3系列的芯片。 |
|