ucOS是一个抢占式多任务操作系统,其核心就是人物调度机制,该机制保证了多个任务在一个MCU上并发执行。
关于多任务实现我们就不得不谈一谈一段程序运行的上下文。所谓程序运行的上下文就是指一段代码(一般以函数为基本单位)运行过程中需要使用到的资源,这个资源被我称之为上下文。这些资源包括当前系统的基本工作寄存器,函数使用到的零时变量,全局变量等等。当这些资源被给定后我们无论在何时去执行一个给定的地址开始的代码都将得到完全相同的结果。下边以具体代码为例讲解该过程,以下代码get_val为一个计算1到10累加和的函数,C代码如下:
unsigned char get_val(void)
{
unsigned char i = 0;
unsigned char temp = 0;
for(i = 0; i < 10; i++)
temp += i;
return temp;
}
要了解上下文信息我们需要查看汇编代码,汇编代码如下: get_val:
C:0x0003 E4 CLR A
C:0x0004 FF MOV R7,A
C:0x0005 FE MOV R6,A
C:0x0006 EF MOV A,R7
C:0x0007 2E ADD A,R6
C:0x0008 FE MOV R6,A
C:0x0009 0F INC R7
C:0x000A BF0AF9 CJNE R7,#0x0A,C:0006
C:0x000D AF06 MOV R7,0x06
C:0x000F 22 RET
|