软件中断只有在操作系统中才有这一说,它是对硬件中断的一种克隆,在SYSBIOS中它的优先级是低于硬件中断高于任务线程的,其最多可以有32个优先级,只要系统的资源允许,理论上可以创建无穷多个软件中断,而硬件中断则是少数有限个的。由于它是由SYSBIOS内核调度管理的因此在响应的时间上是要长于硬件中断的。

        今天我就来给大家介绍一下关于软件中断(SWI)的创建方法,与硬件中断的创建的方法一样,它也有两种创建方法:静态创建和动态创建。

       下面是利用图形化配置界面来创建静态的软件中断:

bios 中断10 dos系统单步执行 sysbios 硬件中断_SYSBIOS

下面是关于动态创建的方法,在这里要特别注意的是软件中断的创建只能在任务线程和空闲线程中创建,千万不要在软件中断线程和硬件中断线程中创建,否则会出现不可预测的后果。下面是一种典型的软件中断线程创建方法:


Void SWIInit(Void)
{
    // 动态创建软件中断
    Swi_Params swiParams;

    // 使用默认值初始化参数
    Swi_Params_init(&swiParams);
    // 触发变量 二进制 0000 0000 0000 0000 0000 0000 0000 0011
    swiParams.trigger = 3;
    swi0 = Swi_create(KEYSwi, &swiParams, NULL);
}

 


        上述的创建结果与图形化配置的结果一样,创建完了以后如果要执行相应的中断服务函数就需要发布该中断函数,这个是通过调用

 Swi_post() 函数来发布该软件中断的,该函数输入的参数为被发布的软件中断的句柄。可以看到软件中断的触发是由程序触发的,而硬件中断大多数是由中断事件触发的比如串口的接收中断事件,不一定是由程序触发的

        当然要实现一定条件的软件中断发布,可以调用Swi_andn();   Swi_dec();   Swi_inc();   Swi_or(); 等这些函数来实现一定条件的发布,对于这些函数是如何使用的可以查阅相关的手册。