1. 由于Blackfin5xx系列开关中断比较特殊,必须有一个临时变量去保存中断掩蔽寄存器IMASK的值便于后续的中断重新enable:
#define portDISABLE_INTERRUPTS() (imask = cli())
#define portENABLE_INTERRUPTS() (sti(imask))
因此在所有用到该对开关中断的地方都需要定义该临时变量。
2. 对于Blackfin可以通过发起软中断进行任务上下文的切换:
#define portYIELD() \
{ \
asm("raise 14;"); \
}
上述代码就启动了一个软中断,当然在系统上电初始化时,需要注册该软中断对应的ISR函数,如下:
//register the OS context switcher ISR into the vector
void vSetupOsCtxSw(void)
{
register_handler_ex(ik_ivg14, (ex_handler_fn)OSCtxSw, EX_INT_ENABLE);
}
其中的函数register_handler_ex() 以及 该函数的入参(ik_ivg14, ex_handler_fn, EX_INT_ENABLE) 都需要引用blackfin的头文件进行支持的: