📄 schedule.lis
字号:
00D8 F91F adc R31,R25
00DA 0A80 ldd R0,y+2
00DC 1B80 ldd R1,y+3
00DE 1182 std z+1,R1
00E0 0082 std z+0,R0
00E2 .dbline 107
00E2 ; SCH_tasks_G[Index].RunMe = 0;
00E2 87E0 ldi R24,7
00E4 849F mul R24,R20
00E6 F001 movw R30,R0
00E8 80E0 ldi R24,<_SCH_tasks_G+6
00EA 90E0 ldi R25,>_SCH_tasks_G+6
00EC E80F add R30,R24
00EE F91F adc R31,R25
00F0 2224 clr R2
00F2 2082 std z+0,R2
00F4 .dbline 108
00F4 ; return Index; // 返回任务的位置(以便以后删除)
00F4 042F mov R16,R20
00F6 .dbline -2
00F6 L16:
00F6 0E940000 xcall pop_gset1
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbsym r Index 20 c
00FC .dbsym l PERIOD 2 ki
00FC .dbsym r DELAY 18 ki
00FC .dbsym r pFunction 16 pfV
00FC .dbend
00FC .dbfunc e SCH_Delete_Task _SCH_Delete_Task fc
00FC ; Return_code -> R20
00FC ; TASK_INDEX -> R16
.even
00FC _SCH_Delete_Task::
00FC 0E940000 xcall push_gset1
0100 .dbline -1
0100 .dbline 127
0100 ;
0100 ; }
0100 ;
0100 ;
0100 ;
0100 ; /*---------------------------------------------------------*-
0100 ; * 函数名称: SCH_Delete_Task()
0100 ; * 入 口: TASK_INDEX -任务索引.由SCH_Add_task()提供
0100 ; *
0100 ; * 出 口: 返回值: RETURN_ERROR(或)RETURN_NORMAL
0100 ; *
0100 ; * 函数功能: 从调度器删除任务.
0100 ; *
0100 ; * 说 明: 请注意:并不是从存储器中删除相关的函数,仅仅是不再
0100 ; * 由调度器调用这个任务.
0100 ; -*---------------------------------------------------------*/
0100 ;
0100 ; uchar SCH_Delete_Task(const unsigned char TASK_INDEX)
0100 ; {
0100 .dbline 130
0100 ; uchar Return_code; //返回错误代码
0100 ;
0100 ; if (SCH_tasks_G[TASK_INDEX].pTask == 0)
0100 87E0 ldi R24,7
0102 809F mul R24,R16
0104 F001 movw R30,R0
0106 80E0 ldi R24,<_SCH_tasks_G
0108 90E0 ldi R25,>_SCH_tasks_G
010A E80F add R30,R24
010C F91F adc R31,R25
010E 2080 ldd R2,z+0
0110 3180 ldd R3,z+1
0112 2220 tst R2
0114 21F4 brne L27
0116 3320 tst R3
0118 11F4 brne L27
011A X3:
011A .dbline 131
011A ; {
011A .dbline 132
011A ; Return_code = RETURN_ERROR;
011A 41E0 ldi R20,1
011C .dbline 133
011C ; }
011C 01C0 xjmp L28
011E L27:
011E .dbline 135
011E ; else
011E ; {
011E .dbline 136
011E ; Return_code = RETURN_NORMAL;
011E 4427 clr R20
0120 .dbline 137
0120 ; }
0120 L28:
0120 .dbline 140
0120 ;
0120 ; // 删除任务
0120 ; SCH_tasks_G[TASK_INDEX].pTask = 0x00;
0120 87E0 ldi R24,7
0122 809F mul R24,R16
0124 F001 movw R30,R0
0126 80E0 ldi R24,<_SCH_tasks_G
0128 90E0 ldi R25,>_SCH_tasks_G
012A E80F add R30,R24
012C F91F adc R31,R25
012E 2224 clr R2
0130 3324 clr R3
0132 3182 std z+1,R3
0134 2082 std z+0,R2
0136 .dbline 141
0136 ; SCH_tasks_G[TASK_INDEX].Delay = 0;
0136 87E0 ldi R24,7
0138 809F mul R24,R16
013A F001 movw R30,R0
013C 80E0 ldi R24,<_SCH_tasks_G+2
013E 90E0 ldi R25,>_SCH_tasks_G+2
0140 E80F add R30,R24
0142 F91F adc R31,R25
0144 3182 std z+1,R3
0146 2082 std z+0,R2
0148 .dbline 142
0148 ; SCH_tasks_G[TASK_INDEX].Period = 0;
0148 87E0 ldi R24,7
014A 809F mul R24,R16
014C F001 movw R30,R0
014E 80E0 ldi R24,<_SCH_tasks_G+4
0150 90E0 ldi R25,>_SCH_tasks_G+4
0152 E80F add R30,R24
0154 F91F adc R31,R25
0156 3182 std z+1,R3
0158 2082 std z+0,R2
015A .dbline 143
015A ; SCH_tasks_G[TASK_INDEX].RunMe = 0;
015A 87E0 ldi R24,7
015C 809F mul R24,R16
015E F001 movw R30,R0
0160 80E0 ldi R24,<_SCH_tasks_G+6
0162 90E0 ldi R25,>_SCH_tasks_G+6
0164 E80F add R30,R24
0166 F91F adc R31,R25
0168 2082 std z+0,R2
016A .dbline 145
016A ;
016A ; return Return_code;
016A 042F mov R16,R20
016C .dbline -2
016C L26:
016C 0E940000 xcall pop_gset1
0170 .dbline 0 ; func end
0170 0895 ret
0172 .dbsym r Return_code 20 c
0172 .dbsym r TASK_INDEX 16 kc
0172 .dbend
0172 .dbfunc s SCH_Updata _SCH_Updata fV
0172 ; Index -> R16
.even
0172 _SCH_Updata:
0172 .dbline -1
0172 .dbline 160
0172 ; }
0172 ;
0172 ;
0172 ; /*---------------------------------------------------------*-
0172 ; * 函数名称: SCH_Update()
0172 ; * 入 口:
0172 ; * 出 口:
0172 ; * 函数功能: 在调度器的中断服务程序中运行
0172 ; *
0172 ; * 说 明: "刷新"函数,确定某个任务需要运行时,将这个任务的
0172 ; * RunMe标志加1,然后该任务将由调度程序执行.
0172 ; -*---------------------------------------------------------*/
0172 ;
0172 ; static void SCH_Updata(void)
0172 ; {
0172 .dbline 162
0172 ; unsigned char Index;
0172 ; for (Index=0; Index < SCH_MAX_TASKS; Index++)
0172 0027 clr R16
0174 54C0 xjmp L36
0176 L33:
0176 .dbline 163
0176 ; {
0176 .dbline 165
0176 ; // 检测这里是否有任务?
0176 ; if (SCH_tasks_G[Index].pTask != 0)
0176 87E0 ldi R24,7
0178 809F mul R24,R16
017A F001 movw R30,R0
017C 80E0 ldi R24,<_SCH_tasks_G
017E 90E0 ldi R25,>_SCH_tasks_G
0180 E80F add R30,R24
0182 F91F adc R31,R25
0184 2080 ldd R2,z+0
0186 3180 ldd R3,z+1
0188 2220 tst R2
018A 19F4 brne X4
018C 3320 tst R3
018E 09F4 brne X7
0190 45C0 xjmp L37
0192 X7:
0192 X4:
0192 .dbline 166
0192 ; {
0192 .dbline 167
0192 ; if (SCH_tasks_G[Index].Delay == 0)
0192 87E0 ldi R24,7
0194 809F mul R24,R16
0196 F001 movw R30,R0
0198 80E0 ldi R24,<_SCH_tasks_G+2
019A 90E0 ldi R25,>_SCH_tasks_G+2
019C E80F add R30,R24
019E F91F adc R31,R25
01A0 2080 ldd R2,z+0
01A2 3180 ldd R3,z+1
01A4 2220 tst R2
01A6 09F0 breq X8
01A8 2CC0 xjmp L39
01AA X8:
01AA 3320 tst R3
01AC 09F0 breq X9
01AE 29C0 xjmp L39
01B0 X9:
01B0 X5:
01B0 .dbline 168
01B0 ; {
01B0 .dbline 169
01B0 ; SCH_tasks_G[Index].RunMe += 1; // RunMer标志加1
01B0 87E0 ldi R24,7
01B2 809F mul R24,R16
01B4 1001 movw R2,R0
01B6 80E0 ldi R24,<_SCH_tasks_G+6
01B8 90E0 ldi R25,>_SCH_tasks_G+6
01BA 280E add R2,R24
01BC 391E adc R3,R25
01BE F101 movw R30,R2
01C0 8081 ldd R24,z+0
01C2 8F5F subi R24,255 ; addi 1
01C4 8083 std z+0,R24
01C6 .dbline 170
01C6 ; if (SCH_tasks_G[Index].Period != 0)
01C6 87E0 ldi R24,7
01C8 809F mul R24,R16
01CA F001 movw R30,R0
01CC 80E0 ldi R24,<_SCH_tasks_G+4
01CE 90E0 ldi R25,>_SCH_tasks_G+4
01D0 E80F add R30,R24
01D2 F91F adc R31,R25
01D4 2080 ldd R2,z+0
01D6 3180 ldd R3,z+1
01D8 2220 tst R2
01DA 11F4 brne X6
01DC 3320 tst R3
01DE F1F0 breq L40
01E0 X6:
01E0 .dbline 171
01E0 ; {
01E0 .dbline 173
01E0 ; // 调度定期的任务再次运行
01E0 ; SCH_tasks_G[Index].Delay = SCH_tasks_G[Index].Period;
01E0 87E0 ldi R24,7
01E2 809F mul R24,R16
01E4 80E0 ldi R24,<_SCH_tasks_G+4
01E6 90E0 ldi R25,>_SCH_tasks_G+4
01E8 F001 movw R30,R0
01EA E80F add R30,R24
01EC F91F adc R31,R25
01EE 2080 ldd R2,z+0
01F0 3180 ldd R3,z+1
01F2 80E0 ldi R24,<_SCH_tasks_G+2
01F4 90E0 ldi R25,>_SCH_tasks_G+2
01F6 F001 movw R30,R0
01F8 E80F add R30,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -