⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_task.dt

📁 义隆单片机上实现的任务调度
💻 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 + -