开始:编写Os86tiny的任务切换器

 

这一步的例子实现一个任务切换函数__TaskSwitch。一旦被调用,这个函数将把当前任务使用的寄存器保存进堆栈,然后调用一个任务调度函数__TaskSchedule把系统切换到另一个任务的堆栈,最后将新堆栈中保存的各个寄存器值装入寄存器。这一步的例子只支持一个主任务和一个子任务,处理器的控制将会在两个任务中来回转移。

 

这一步的例子包含三个源文件和一个Borland C++的工程文件:

 

hal.asm 定义了任务切换函数__TaskSwitch。由于任务切换需要保存寄存器和装入寄存器,这个函数必须用汇编来写。

taskmgr.c 定义了任务调度函数__TaskSchedule,用来控制处理器在主任务和子任务之间作堆栈切换。定义了SubTaskInit函数,用来初始化子任务。

main.c 定义了主任务和子任务的任务代码。

os86tiny.prj 是Borland C++的工程文件。

 

下载这一步例子的源代码

 

注意:在调试时如果要查看程序的控制流程,不要用单步跟踪,而要在每个__TaskSwitch调用语句后设置断点。建议使用Turbo Debugger 来调试。另外,os86tiny.prj工程文件中的目录设置可能会和大家机器上的设置不同,可能需要自己修改。

 

本例的任务概念实际上就是下一步中的线程概念。

下一步:编写线程管理功能