📄 kernel.lis
字号:
00BA 3320 tst R3
00BC 19F0 breq L15
00BE X0:
00BE .dbline 85
00BE ; {
00BE .dbline 86
00BE ; return(true);
00BE 01E0 ldi R16,1
00C0 10E0 ldi R17,0
00C2 05C0 xjmp L10
00C4 L15:
00C4 .dbline 88
00C4 L12:
00C4 .dbline 82
00C4 4395 inc R20
00C6 L14:
00C6 .dbline 82
00C6 4017 cp R20,R16
00C8 68F3 brlo L11
00CA .dbline 89
00CA ; }
00CA ; }
00CA ; return(false);
00CA 0027 clr R16
00CC 1127 clr R17
00CE .dbline -2
00CE L10:
00CE 0E940000 xcall pop_gset1
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r bTemp 20 c
00D4 .dbsym r bTaskPrio 16 c
00D4 .dbend
00D4 .dbfunc e OS_Task_Update _OS_Task_Update fV
00D4 ; bTemp -> R20
.even
00D4 _OS_Task_Update::
00D4 0E940000 xcall push_gset1
00D8 .dbline -1
00D8 .dbline 100
00D8 ; }
00D8 ;
00D8 ; //******************************************************************************
00D8 ; // Function : OS_Task_Update
00D8 ; // Input : none
00D8 ; // Output : none
00D8 ; // Description : increase timercount of all tasks in each SYS clock ISR.if task
00D8 ; // is timeout,Kernel send a timer event to the task
00D8 ; //******************************************************************************
00D8 ; void OS_Task_Update(void)
00D8 ; {
00D8 .dbline 102
00D8 ; INT8U bTemp;
00D8 ; for(bTemp = 0;bTemp < cMaxTask;bTemp++)
00D8 4427 clr R20
00DA 30C0 xjmp L22
00DC L19:
00DC .dbline 103
00DC ; {
00DC .dbline 104
00DC ; OSTCB[bTemp].wTimerCount++;
00DC 86E0 ldi R24,6
00DE 849F mul R24,R20
00E0 1001 movw R2,R0
00E2 80E0 ldi R24,<_OSTCB+2
00E4 90E0 ldi R25,>_OSTCB+2
00E6 280E add R2,R24
00E8 391E adc R3,R25
00EA F101 movw R30,R2
00EC 8081 ldd R24,z+0
00EE 9181 ldd R25,z+1
00F0 0196 adiw R24,1
00F2 9183 std z+1,R25
00F4 8083 std z+0,R24
00F6 .dbline 105
00F6 ; if(OSTCB[bTemp].wTimerCount == OSTCB[bTemp].wTimerPeriod)
00F6 86E0 ldi R24,6
00F8 849F mul R24,R20
00FA 80E0 ldi R24,<_OSTCB
00FC 90E0 ldi R25,>_OSTCB
00FE F001 movw R30,R0
0100 E80F add R30,R24
0102 F91F adc R31,R25
0104 2080 ldd R2,z+0
0106 3180 ldd R3,z+1
0108 80E0 ldi R24,<_OSTCB+2
010A 90E0 ldi R25,>_OSTCB+2
010C F001 movw R30,R0
010E E80F add R30,R24
0110 F91F adc R31,R25
0112 4080 ldd R4,z+0
0114 5180 ldd R5,z+1
0116 4214 cp R4,R2
0118 5304 cpc R5,R3
011A 79F4 brne L24
011C .dbline 106
011C ; {
011C .dbline 107
011C ; OSTCB[bTemp].wTimerCount = 0;
011C 86E0 ldi R24,6
011E 849F mul R24,R20
0120 F001 movw R30,R0
0122 80E0 ldi R24,<_OSTCB+2
0124 90E0 ldi R25,>_OSTCB+2
0126 E80F add R30,R24
0128 F91F adc R31,R25
012A 2224 clr R2
012C 3324 clr R3
012E 3182 std z+1,R3
0130 2082 std z+0,R2
0132 .dbline 108
0132 ; OS_Event_Post(bTemp,0);
0132 2227 clr R18
0134 3327 clr R19
0136 042F mov R16,R20
0138 83DF xcall _OS_Event_Post
013A .dbline 109
013A ; }
013A L24:
013A .dbline 110
013A L20:
013A .dbline 102
013A 4395 inc R20
013C L22:
013C .dbline 102
013C 4430 cpi R20,4
013E 08F4 brsh X1
0140 CDCF xjmp L19
0142 X1:
0142 .dbline -2
0142 .dbline 111
0142 ; }
0142 ; }
0142 L18:
0142 0E940000 xcall pop_gset1
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r bTemp 20 c
0148 .dbend
0148 .dbfunc e OS_Init _OS_Init fV
0148 ; bTemp -> R16
.even
0148 _OS_Init::
0148 .dbline -1
0148 .dbline 120
0148 ;
0148 ; //******************************************************************************
0148 ; // Function : OS_Init
0148 ; // Input : none
0148 ; // Output : none
0148 ; // Description : Initlization of TCBs
0148 ; //******************************************************************************
0148 ; void OS_Init(void)
0148 ; {
0148 .dbline 122
0148 ; INT8U bTemp;
0148 ; for(bTemp = 0;bTemp < cMaxTask;bTemp++)
0148 0027 clr R16
014A 1EC0 xjmp L32
014C L29:
014C .dbline 123
014C .dbline 124
014C 86E0 ldi R24,6
014E 809F mul R24,R16
0150 F001 movw R30,R0
0152 80E0 ldi R24,<_OSTCB
0154 90E0 ldi R25,>_OSTCB
0156 E80F add R30,R24
0158 F91F adc R31,R25
015A 2224 clr R2
015C 3324 clr R3
015E 3182 std z+1,R3
0160 2082 std z+0,R2
0162 .dbline 125
0162 86E0 ldi R24,6
0164 809F mul R24,R16
0166 F001 movw R30,R0
0168 80E0 ldi R24,<_OSTCB+2
016A 90E0 ldi R25,>_OSTCB+2
016C E80F add R30,R24
016E F91F adc R31,R25
0170 3182 std z+1,R3
0172 2082 std z+0,R2
0174 .dbline 126
0174 86E0 ldi R24,6
0176 809F mul R24,R16
0178 F001 movw R30,R0
017A 80E0 ldi R24,<_OSTCB+4
017C 90E0 ldi R25,>_OSTCB+4
017E E80F add R30,R24
0180 F91F adc R31,R25
0182 3182 std z+1,R3
0184 2082 std z+0,R2
0186 .dbline 127
0186 L30:
0186 .dbline 122
0186 0395 inc R16
0188 L32:
0188 .dbline 122
0188 0430 cpi R16,4
018A 00F3 brlo L29
018C .dbline -2
018C .dbline 128
018C ; {
018C ; OSTCB[bTemp].wTimerPeriod = 0;
018C ; OSTCB[bTemp].wTimerCount = 0;
018C ; OSTCB[bTemp].wEvent = 0;
018C ; }
018C ; }
018C L28:
018C .dbline 0 ; func end
018C 0895 ret
018E .dbsym r bTemp 16 c
018E .dbend
018E .dbfunc e OS_Start _OS_Start fV
.even
018E _OS_Start::
018E .dbline -1
018E .dbline 137
018E ;
018E ; //******************************************************************************
018E ; // Function : OS_Start
018E ; // Input : none
018E ; // Output : none
018E ; // Description : Initlization of tasks and Start Kernel
018E ; //******************************************************************************
018E ; void OS_Start(void)
018E ; {
018E .dbline 138
018E ; Task_Init();
018E 0E940000 xcall _Task_Init
0192 .dbline 139
0192 ; Task_Start();
0192 .dbline -2
0192 .dbline 140
0192 ; }
0192 L35:
0192 .dbline 0 ; func end
0192 0C940000 xjmp _Task_Start
0196 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\多任务模拟系统设计\Kernel.c
0000 _OSTCB::
0000 .blkb 24
0018 .dbsym e OSTCB _OSTCB A[24:4]X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -