DSP-BIOS中断机制.docVIP

  • 6
  • 0
  • 约2.49千字
  • 约 3页
  • 2017-06-08 发布于北京
  • 举报
DSP/BIOS软件中断(SWI) 一、SWI模块概述 ??????? 在DSP/BIOS内核中,系统管理并运行的线程分为四个等级:硬件中断服务程序、软件中断服务程序、任务和后台空闲函数,优先级依次降低。每个软件中断服务程序都对应一个函数,当然,每个软件中断也可以单独设置优先级。高优先级的软件中断会抢占正在执行的低优先级的软件中断??????????? ??????? 所有软件中断都是通过DSP/BIOS内核的API调用来启动。一旦启动了一个SWI对象,此时,系统将为该SWI对象中的函数创建一个运行时间表。因此,当一个软件中断被启动后,其对象函数不一定会立即执行,而是会按照时间表在执行队列中根据优先级排队等候运行。DSP/BIOS根据软件中断优先级来判断是否要暂停当前运行的线程。 ????????中断线程(包括硬件中断和软件中断)都是使用相同的堆栈来执行的。当中断发生时,新的线程就会添加到栈顶,系统会执行一次任务切换(Context Switch)。由于高优先级软件中断会打断低优先级的软件中断的运行,所以SWI模块在运行高优先级软件中断前会自动保存寄存器中的内容。在高优先级软件中断运行完成后,寄存器会恢复原来的内容,以便继续运行原来的低优先级中断。如果没有启动其他高优先级的软件中断,低优先级的软件中断就会运行。DSP/BIOS内核虽然具有抢占的特点,但如果没有导致任务切换的API函数调用,系统则不会主动切换道其他线程去执行的。(理解这点在实际应用中很重要,即如果现在运行的是低优先级软中断对应的函数,如果你不在函数中调用如SWI_post()启动更高优先级的软件中断或启动了比自身低的优先级中断,则当前软中断就不会被打断,执行直到退出)。 ?????? 个人经验:尽量不要在一个软中断对应的函数中去启动另一个比其本身优先级高的软件中断,因为根据抢占原则,其本身将被打断,从而CPU转去执行高优先级软中断对应的函数,低优先级的实时性将得不到保证,当有多级优先级及系统复杂情况下甚至引起系统瘫痪。也不要设置很多的优先级。当然这也不是绝对的,如果系统规划的好,利用好软中断的基于优先级抢占式的特点会大大简化你的设计。 二、SWI的执行 ?????? 通过调用SWI_andn,SWI_sec,SWI_inc,SWI_or,SWI_post可以使软件中断被调度执行。这些函数本身可以在程序的任何地方调用------中断服务程序ISR中,周期函数中,空闲函数中或其他软件中断函数中。 ?????? 当一个SWI对象被触发时,SWI管理器将该软件中断添加到一个被触发软件中断的列表中等待,然后SWI管理器检查软件中断当前是否被使能。如果使能,SWI管理器将该SWI对象的优先级和当前运行线程的优先级进行比较。若当前运行线程是后台空闲循环IDL或是一个更低优先级的SWI,那么SWI管理器将这个SWI对象从被触发SWI对象列表中移除,并将CPU控制权从当前线程交给SWI对象,开始执行SWI函数。 ?????? Note:1.当一个SWI开始执行后,必须无阻塞地运行到结束; ????????????????? 2.当在HWI中调用时,调用任何会触发软件中断的SWI函数的代码必须包装在一个HWI_enter/HWI_exit ????????????????? ? 宏调用中,或者由HWI调度程序调用; ????????????????? 3.如果一个软件中断在SWI管理器将其从被触发SWI对象列表中移除之前,被触发多次,其SWI函数只 ????????????????????会执行一次。这个类似硬件中断的特征:即在CPU清除中断标志寄存器中相应的中断标志为之前,如 ??????????????????? 果该硬件中断触发多次,对应的HWI只会执行一次。 三、SWI对象的邮箱 ???????每个SWI对象有一个邮箱,可以决定是否触发该中断。用于触发SWI的API函数可以对邮箱值作不同的操作,并根据不同的限制条件触发SWI对象。其中SWI_post,SWI_or,SWI_inc无条件的触发。 1-1 SWI对象触发函数 动作 将油箱看作位掩模 将油箱看作计数器 不改变油箱值 无条件触发 SWI_or SWI_inc SWI_post 为0触发 SWI_andn SWI_dec ----------- ?????? 要访问一个SWI对象的邮箱值,可以在该SWI函数调用SWI_getmbox,这个函数只能在SWI函数中调用,其返回值是该SWI对象从被触发SWI对象队列中移除之前其邮箱的值。当SWI管理器从被触发对象列表中移除一个SWI对象时,其邮箱值被复位为其初始值。如果在SWI函数执行的时候该SWI对象又一次被触发,其邮箱值也会被相应的更新,然而这些都不会影响SWI

文档评论(0)

1亿VIP精品文档

相关文档