DSP/BIOS提供了如下几种类型的线程。HWI(硬件中断),SWI(软件中断),TSK(任务),IDL(空闲线程)。
HWI在配置的时候,如果勾选了Dispatch的话,则会在调用HWI函数的前后自动调用HWI_enter和HWI_exit。如果不勾选的话,需要在程序中写入这两句话。这两个函数完成如下2个功能。
1在执行其ISR之前将它所用到的可能改变的寄存器保护起来,返回时要将这些值填写回去。
在使用HWI对象时,若其中断处理函数使用C语言来编写则一定不能使用interrupt关键字或INTERRUPT pragma,因为HWI对象调用的函数已经包含了这些功能
如果希望当前的HWI在不被其他的HWI打断的话,可以在不能被打断的代码前后调用HWI_disable和HWI_enable。
SWI是一条道跑到黑,如果有SW1,SW2,SW2运行当中,SW1被post的话,立刻执行SW1,SW1执行完后,在执行SW2
TSK是一条道来回跑,任务之间可以相互切换,不用将任务全部执行完在跳转回切换前的任务。
HWI和SWI都使用系统堆栈,而每个TSK都有自己的堆栈。可以在TSK线程之间随意地互相切换,切换时DSP/BIOS将自动地更新堆栈寄存器,因此TSK线程可以被阻塞。