| 开始:编写Os86tiny的任务切换器 |
|
这一步的例子实现一个任务切换函数__TaskSwitch。一旦被调用,这个函数将把当前任务使用的寄存器保存进堆栈,然后调用一个任务调度函数__TaskSchedule把系统切换到另一个任务的堆栈,最后将新堆栈中保存的各个寄存器值装入寄存器。这一步的例子只支持一个主任务和一个子任务,处理器的控制将会在两个任务中来回转移。
这一步的例子包含三个源文件和一个Borland C++的工程文件:
hal.asm 定义了任务切换函数__TaskSwitch。由于任务切换需要保存寄存器和装入寄存器,这个函数必须用汇编来写。
taskmgr.c 定义了任务调度函数__TaskSchedule,用来控制处理器在主任务和子任务之间作堆栈切换。定义了SubTaskInit函数,用来初始化子任务。
main.c 定义了主任务和子任务的任务代码。
os86tiny.prj 是Borland C++的工程文件。
注意:在调试时如果要查看程序的控制流程,不要用单步跟踪,而要在每个__TaskSwitch调用语句后设置断点。建议使用Turbo Debugger 来调试。另外,os86tiny.prj工程文件中的目录设置可能会和大家机器上的设置不同,可能需要自己修改。
本例的任务概念实际上就是下一步中的线程概念。