中断一旦被系统识别,CPU则保存部分(或全部)现场(context),即部分(或全部)寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后执行任务调度,程序回到就绪态优先级最高的任务开始运行
1. 时钟节拍
RTC_PeriodicIntConfig(RTC_Per_128Hz); ???
#define OS_TICKS_PER_SEC 64 /* Set the number of ticks in one second
OSTimeDly(OS_TICKS_PER_SEC ); //延时1S,相当于VC中的sleep函数
一般在10~200 ms之间
void OSTickISR(void) {
保存处理器寄存器的值;
调用OSIntEnter ()或是将OSIntNesting加1;
调用OSTimeTick ();
调用OSIntExit (); //该函数包含中断任务切换函数OSIntCtxSw();
恢复处理器寄存器的值;
执行中断返回指令;
}
允许时钟节拍中断在OSStart()之后,而不是OSInit()之后
用户必须在第一个任务中打开时钟节拍中断
在ARM中
IRQ_Addr DCD OS_CPU_IRQ_ISR
OS_CPU_IRQ_ISR
。。。。。。。。。。。。。。。。。
LDR r0, = VectorAddress
BX r0 ; Branch to the IRQ handler.(跳转到相应的中断处理函数)
。。。。。。。。。。。。。。。
LDR R0, =OSIntExit ; OSIntExit(); (中断退出处理,如果有更高级任务,则转到更高级任务运行,
。。。。。。。。。。。。。。。。。。 ;否则退出中断继续执行原任务)