论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
⑤ OS_Task_Lock:锁定任务调度,禁止任务调度。主要用来锁定在低优先级中的一些可重入的代码或一些重要代码。
⑥ OS_Task_Unlock:解锁任务调度,和上面的子程序功能相反。
⑦ OS_Task_Wakeup:唤醒指定优先级的任务,并产生一次任务调度,如果被唤醒任务的优先级比当前运行的任务的优先级高,任务就会切换到被唤醒的任务中,否则等待下一个调度时机。
2.3 主要功能的实现
(1)任务初始化
系统加电运行后,首先对硬件资源进行初始化,接着就要对多任务进行初始化了。主要是初始化每个任务的任务栈、每个任务的时钟滴答数和堆栈指针位置。我们把每个任务栈都初始化成图1形式。
任务栈的初始化如下程序(r11是用来初始任务堆栈的一个指针,r10是一个循环计数器):
mov.w #(栈底 2) , r11
clr.w Task_Tick(r10) ;清0时钟滴答数
mov.w #任务首地址 , 0(r11) ;把任务地址压入堆栈
mov.w SR , -2(r11) ;把标志寄存器放入任务栈
mov.w r11 , Task_SP(r10)
sub.w #现场所占的字节数 , Task_SP(r10) ;SP位置放
;入堆栈
初始化完任务栈之后,就把堆栈指针指向最高任务优先级任务栈的任务首地址处,再执行ret返回。这样,多任务就启动开了,程序如下:
mov.w #09feh , sp ;最高