在SYS/BIOS中,一个线程就是控制单点,它能够激活一个函数的调用,或者是激活一段中断服务程序(ISR)。SYS/BIOS中提供了一系列具有不同属性的线程,每个线程类型具有不同的优先权和执行特性,各种线程从最高优先级到最低优先级排列如下:
- HWI(硬件中断):包括了定时器函数
- SWI(软件中断):包括了CLOCK函数
- TASK(任务)
- IDLE(后台空闲线程)
本文主要讲解SYS/BIOS中的HWI线程。HWI也成为中断服务程序(ISR)是SYS/BIOS中具有最高优先级的线程:
从上图可以看出,在我们编写一个main程序时,其后台的处理流程是:先进行初始化,紧接着执行BIOS_start函数,执行SYS/BIOS中的HWI线程,处理完成后才会执行空闲的循环线程。
钩子:HWI,SWI,TASK线程在线程生命周期内可以提供插入点来插入用户代码,方便调试代码,每个这种代码叫做一个“钩子”,提供给钩子的函数叫钩子函数。
HWI线程具有以下5种钩子函数:
-
Register:在静态创建的HWI下,运行时被初始化前调用的一个函数。在main函数前启动,并且在中断使能之前。
-
Create:创建HWI时调用的一个函数,包含静态创建与动态创建。
-
Begin:在运行ISR函数前调用的一个函数。
-
End:在ISR运行完后调用的一个函数。
-
Delete:在运行时删除HWI线程的一个函数 。
动态创建HWI线程:
hwi0是一个创建HWI对象的句柄,id是定义的中断号,hwiFunc是与中断相关的函数名,hwiParams是一个结构体,这里将其参数设置为5。eb是一个错误块,通过它处理在创建硬件中断对象时可能发生的错误。
静态创建HWI线程:
结果与上面相同。
钩子函数的结构体定义如下: