在用 RTX51 TINY 做一个数据采集系统,用下面方法给TINY 增加了任务优先级,目前系统运行稳定,希望和大家一起讨论。
;------------------------------------------------
; 任务切换
os_switch_task:
IF (CODE_BANKING <> 0)
PUSH ?B_CURRENTBANK
ENDIF
os_switch_task1:
; next = current;
IF (TIMESHARING <> 0)
SETB ?RTX_TS_DELAY ; Delay Task Switching
ENDIF
MOV A,?RTX_CURRENTTASK
MOV R7,A
; while (1) {
RL A
ADD A,#?RTX?TASKSTATE?S+1
MOV R0,A
;-----------------------
MOV R7,#?RTX_MAXTASKN ;增加1、每次切换任务时存入最大任务号
;-----------------------
?C0001:
; if (++next == MAXTASKN+1) next = 0;
INC R7
INC R0
INC R0
IF (CPU_IDLE_CODE)
MOV A,R7
CJNE A,?RTX_CURRENTTASK,NoIDLE
JBC ?RTX_ISR_SIG,NoIDLE
CPU_IDLE ; CPU sleep
NoIDLE:
ENDIF
CJNE R7,#?RTX_MAXTASKN+1,?C0003_b ;将?C0003跳转地址改一下
MOV R7,#0
MOV R0,#?RTX?TASKSTATE?S+1
;-----------------------
?C0003_b: ;增加2、是当前任务不检查就绪标记
MOV A,R7
CJNE A,?RTX_CURRENTTASK,?C0003
SJMP ?C0001
;-----------------------
?C0003:
; if (STATE[next].st & K_READY) break;
MOV A,@R0
JNB ACC.B_READY,?C0001
; }
--------- |