📄 os_task.dt
字号:
/*
*********************************************************************************************************
* 任务调度操作
*
* 功能 : 根据任务队列(TaskQueue)对相应的任务,根据优先级切换到相应的任务。
*
* 入口参数 : none 每个大循环执行一次任务调度
*
* 出口参数 : none
*********************************************************************************************************
*/
OSTaskSchedule:
mov a,@0xf8 ; 清除任务的ID号
and OSFlag,a
Sch0:
jbs TaskQueue,0
jmp Sch1
mov a,@0 ; OSFlag中记录当前执行的任务ID
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,0 ; 蒙板操作
jmp Task0 ; 调用第一个任务
Sch0_end:
jmp OSTaskSch_end
Sch1:
jbs TaskQueue,1
jmp Sch2
mov a,@1
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,1
jmp Task1
Sch1_end:
jmp OSTaskSch_end
Sch2:
jbs TaskQueue,2
jmp Sch3
mov a,@2
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,2
jmp Task2
Sch2_end:
jmp OSTaskSch_end
Sch3:
jbs TaskQueue,3
jmp Sch4
mov a,@3
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,3
jmp Task3
Sch3_end:
jmp OSTaskSch_end
Sch4:
jbs TaskQueue,4
jmp Sch5
mov a,@4
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,4
jmp Task4
Sch4_end:
jmp OSTaskSch_end
Sch5:
jbs TaskQueue,5
jmp Sch6
mov a,@5
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,5
jmp Task5
Sch5_end:
jmp OSTaskSch_end
Sch6:
jbs TaskQueue,6
jmp Sch7
mov a,@6
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,6
jmp Task6
Sch6_end:
jmp OSTaskSch_end
Sch7:
jbs TaskQueue,7
jmp Sch_Idle
mov a,@7
or OSFlag,a
clr ShieldQueue
bs ShieldQueue,7
jmp Task7
Sch7_end:
jmp OSTaskSch_end
Sch_Idle: ; 如果任务队列为空则进入空闲任务
jmp OSTaskIdle
Sch_Idle_end:
nop
OSTaskSch_end:
jmp schedule_end
/*
*********************************************************************************************************
* 生成任务操作
*
* 功能 : 将任务队列(TaskQueue)相应的位置1实现生成任务,将任务加入调度。
*
* 入口参数 : a
*
* 出口参数 : none
*********************************************************************************************************
*/
OSTaskCreat:
mov a,@0xff
mov TaskQueue,a
ret
/*
*********************************************************************************************************
* 自我删除任务
*
* 功能 : 将任务队列(TaskQueue)中任务相应的位置0,将等待队列(WaitQueue)中相应的位置0
*
* 入口参数 : none
*
* 出口参数 : none
*********************************************************************************************************
*/
OSTaskDel:
coma ShieldQueue ; 蒙板中记录的是当前任务的位置
and TaskQueue,a ; 将本任务从任务队列中削去
and WaitQueue,a ; 将本任务从等待队列中削去
ret
/*
*********************************************************************************************************
* 任务切换操作
*
* 功能 : 用于手动的,不参与OSTimeDly调度的任务切换。
*
* 入口参数 : a
*
* 出口参数 : none
*********************************************************************************************************
*/
OSTaskChange:
/*
mov OSTemp0,a
mov a,TaskQueue
or a,Operand0 ; Enable
and a,OSTemp0 ; Disable
mov TaskQueue,a
*/
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -