📄 os_18c801_a.lst
字号:
00121 ; a) //Call OSTaskSwHook() then,
00122 ; b) Set OSRunning to TRUE,
00123 ; c) Switch to the highest priority task.
00124 ;*******************************************************************************************************
**
00125
00126
00127 ASMCODE CODE
00128 ;*************************************************************************************************
000000 00129 OSStartHighRdy
000000 C??? FFF6 00130 movff OSTCBHighRdy,TBLPTRL
000004 C??? FFF7 00131 movff OSTCBHighRdy+1,TBLPTRH
000008 C??? FFF8 00132 movff OSTCBHighRdy+2,TBLPTRU
00133
00134 ;read the stack's address on ext-RAM
00000C 0009 00135 tblrd*+
00000E CFF5 FFF3 00136 movff TABLAT,PRODL
000012 0009 00137 tblrd*+
000014 CFF5 FFF4 00138 movff TABLAT,PRODH
000018 0008 00139 tblrd* ;the UPPER byte is in TABLAT
00140
00141 ;make TBLPTR point to the external stack
00001A CFF5 FFF8 00142 movff TABLAT,TBLPTRU
00001E CFF4 FFF7 00143 movff PRODH,TBLPTRH
000022 CFF3 FFF6 00144 movff PRODL,TBLPTRL
00145
00146 ;Set OSRunning as TRUE
000026 0E01 00147 movlw 0x01
000028 CFE8 F??? 00148 movff WREG,OSRunning ;OSRunning=TRUE
00149
00150 ;put the task's address to TOS of hard-stack
00002C 2AFC 00151 incf STKPTR,0x01,0 ;STKPTR++
00002E 0009 00152 tblrd*+
000030 50F5 00153 movf TABLAT,0x00,0
000032 6EFD 00154 movwf TOSL,0
000034 0009 00155 tblrd*+
000036 50F5 00156 movf TABLAT,0x00,0
000038 6EFE 00157 movwf TOSH,0
00003A 0008 00158 tblrd*
00003C 50F5 00159 movf TABLAT,0x00,0
00003E 6EFF 00160 movwf TOSU,0 ;There must be only ONE address--startup address
of a task
00161
000040 CFE1 F??? 00162 movff FSR1L,OSSysStkBase ;Save the base address,which is used to get software-sta
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 6
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
ck depth
000044 0010 00163 retfie 0
00164 ;**************************************************************************************************
00165
00166
00167
00168
00169 ;*******************************************************************************************************
**
00170 ; PERFORM A CONTEXT SWITCH (From task level)
00171 ; void OSCtxSw(void)
00172 ;
00173 ; Note(s): 1) Upon entry,
00174 ; OSTCBCur points to the OS_TCB of the task to suspend
00175 ; OSTCBHighRdy points to the OS_TCB of the task to resume
00176 ;
00177 ; 2) The stack frame of the task to suspend looks as follows:
00178 ;
00179 ; SP -> OFFSET of task to suspend (Low memory)
00180 ; SEGMENT of task to suspend
00181 ; PSW of task to suspend (High memory)
00182 ;
00183 ; 3) The stack frame of the task to resume looks as follows:
00184 ;
00185 ;Software stack in ONCHIP RAM:
00186 ;Shift_Addr: 0x00--------0x19
00187 ;Content: SFRs,AARGBx,software_stack_depth and hardware_stack_depth
00188 ;Shift_Addr: 0x1A--------0x1F
00189 ;Content: Reserved
00190 ;Hardware stack in External RAM
00191 ;Shift_Addr: 0x00--------0xBF
00192 ;Content: GPRs
00193 ;Shift_Addr: 0xC0--------0xFF
00194 ;Content: hardware_stack
00195 ;Following is the details:
00196 ;-----------------------------------------------------------------------------
00197 ;Shift_Addr: 00 01 02 03 04 05
06 07
00198 ;Register: STATUS BSR WREG FSR2H FSR2L FSR1H FSR1L FSR0H
00199 ;-----------------------------------------------------------------------------
00200 ;Shift_Addr: 08 09 0A 0B 0C 0D
0E 0F
00201 ;Register: FSR0L STKPTR PRODH PRODL TBLPTRU TBLPTRH TBLPTRL TABLAT
00202 ;-----------------------------------------------------------------------------
00203 ;Shift_Addr: 10 11 12 13 14 15
16 17
00204 ;Register: AARGB0 AARGB1 AARGB2 AARGB3 AARGB4 AARGB5 AARGB6 AARGB7
00205 ;-----------------------------------------------------------------------------
00206 ;Shift_Addr: 18 19 1A 1B 1C 1D
1E 1F
00207 ;Register: DepthSf DepthHd (REST_ONCHIP_STACK_SFR bytes reserved......)
00208 ;-----------------------------------------------------------------------------
00209 ;Shift_Addr: 20 21 22 23 24 25
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 7
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
26 27
00210 ;Register: BOS_1L BOS_1H BOS_1U BOS_2L BOS_2H BOS_2U BOS_3L BOS_3H
00211 ;-----------------------------------------------------------------------------
00212 ;Shift_Addr: 28 29 2A 2B 2C 2D
2E 2F
00213 ;Register: BOS_3U (MAX_ONCHIP_STACK_ADDR address at total......)
00214 ;-----------------------------------------------------------------------------
00215 ;Shift_Addr: 30 31 32 33 34 35
36 37
00216 ;Register:
00217 ;-----------------------------------------------------------------------------
00218 ;Shift_Addr: 38 39 3A 3B 3C 3D
3E 3F
00219 ;Register:
00220 ;*******************************************************************************************************
**
00221
000046 00222 OSCtxSw
00223 ;save some necessary registers to system soft-stack
00224 lpush_all
000046 CFD8 FFE4 M movff STATUS,PREINC1 ;STATUS
00004A CFE0 FFE4 M movff BSR,PREINC1 ;BSR
00004E 6EE4 M movwf PREINC1,0 ;WREG
000050 CFDA FFE4 M movff FSR2H,PREINC1 ;FSR2H
000054 CFD9 FFE4 M movff FSR2L,PREINC1 ;FSR2L
000058 CFEA FFE4 M movff FSR0H,PREINC1 ;FSR0H
00005C CFE9 FFE4 M movff FSR0L,PREINC1 ;FSR0L
000060 CFF4 FFE4 M movff PRODH,PREINC1 ;PRODH
000064 CFF3 FFE4 M movff PRODL,PREINC1 ;PRODL
000068 CFF8 FFE4 M movff TBLPTRU,PREINC1 ;TBLPTRU
00006C CFF7 FFE4 M movff TBLPTRH,PREINC1 ;TBLPTRH
000070 CFF6 FFE4 M movff TBLPTRL,PREINC1 ;TBLPTRL
000074 CFF5 FFE4 M movff TABLAT,PREINC1 ;TABLAT
000078 CFFA FFE4 M movff PCLATH,PREINC1 ;PCLATH
00007C CFFB FFE4 M movff PCLATU,PREINC1 ;PCLATU
000080 52E6 M movf POSTINC1,0x01,0 ;FSR1L++
M ;
M ;Save 0x2B Registers in BANK-0 from 0x000-0x02A
000082 6AEA M clrf FSR0H,0
000084 6AE9 M clrf FSR0L,0
000086 0E38 M movlw SAVE_BANK0_PUSH_NUM
000088 M IntPushRegsInBank0:
000088 CFEE FFE6 M movff POSTINC0,POSTINC1
00008C 04E8 M decf WREG,0
00008E E1?? M bnz IntPushRegsInBank0
00225
000090 00226 GetExtStackAddr:
000090 C??? FFF6 00227 movff OSTCBCur,TBLPTRL
000094 C??? FFF7 00228 movff OSTCBCur+1,TBLPTRH
000098 C??? FFF8 00229 movff OSTCBCur+2,TBLPTRU
00009C 0009 00230 tblrd*+
00009E CFF5 FFF3 00231 movff TABLAT,PRODL
0000A2 0009 00232 tblrd*+
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 8
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000A4 CFF5 FFF4 00233 movff TABLAT,PRODH
0000A8 0008 00234 tblrd*
0000AA CFF5 FFF8 00235 movff TABLAT,TBLPTRU
0000AE CFF5 FFE7 00236 movff TABLAT,INDF1 ;TBLPTRU --> [FSR1] for later use
0000B2 CFF4 FFF7 00237 movff PRODH,TBLPTRH
0000B6 CFF3 FFF6 00238 movff PRODL,TBLPTRL
00239
0000BA 00240 SaveHdStack:
0000BA 0E?? 00241 movlw high StackDepth
0000BC 6EEA 00242 movwf FSR0H,0
0000BE 0E?? 00243 movlw low StackDepth
0000C0 2500 00244 addwf OSPrioCur,0x00,1
0000C2 2500 00245 addwf OSPrioCur,0x00,1
0000C4 6EE9 00246 movwf FSR0L,0 ;FSR0--> Hardware_Stack_Depth
00247
0000C6 9EF2 00248 bcf INTCON,GIEH,0
0000C8 0E03 00249 movlw TASK_HD_STK_PTR ;3-> main()'s caller; OSStart()'s; OSStartHighRdy()'s
0000CA 5CFC 00250 subwf STKPTR,0x00,0 ;pointer numbers is in WREG( multiplied by 3bytes each o
ne)
0000CC 6EEF 00251 movwf INDF0,0 ;save hard-stack's depth
0000CE 0E03 00252 movlw TASK_HD_STK_PTR
0000D0 6EFC 00253 movwf STKPTR ;Adjust STKPTR,ready to save
0000D2 50EE 00254 movf POSTINC0,0x00,0 ;FSR0--> Software_Stack_Depth
0000D4 00255 HdStk2ExtRAM:
0000D4 2AFC 00256 incf STKPTR,0x01,0 ;STKPTR++
0000D6 CFFD FFF5 00257 movff TOSL,TABLAT
0000DA 000D 00258 tblwt*+
0000DC CFFE FFF5 00259 movff TOSH,TABLAT
0000E0 000D 00260 tblwt*+
0000E2 CFFF FFF5 00261 movff TOSU,TABLAT
0000E6 000D 00262 tblwt*+
0000E8 04E8 00263 decf WREG,0x00,0
0000EA E1?? 00264 bnz HdStk2ExtRAM
0000EC 8EF2 00265 bsf INTCON,GIEH,0
00266
00267
0000EE 00268 SaveSoftStack:
0000EE CFE7 FFF8 00269 movff INDF1,TBLPTRU ;FSR1 is 1-byte higher than originally value after this line
0000F2 CFF4 FFF7 00270 movff PRODH,TBLPTRH
0000F6 CFF3 FFF6 00271 movff PRODL,TBLPTRL
0000FA 0E60 00272 movlw EXT_SOFT_STK_SHIFT
0000FC 26F6 00273 addwf TBLPTRL,0x01,0
0000FE 0E00 00274 movlw 0x00
000100 22F7 00275 addwfc TBLPTRH,0x01,0
000102 22F8 00276 addwfc TBLPTRU,0x01,0
00277
000104 C??? FFE8 00278 movff OSSysStkBase,WREG ;OSSysStkBase-->WREG
000108 6ED9 00279 movwf FSR2L,0 ;Start location
00010A 5CE1 00280 subwf FSR1L,0,0
00010C 6EEF 00281 movwf INDF0,0 ;software stack depth
00010E CFE2 FFDA 00282 movff FSR1H,FSR2H
000112 00283 SfStk2ExtRAM:
000112 CFDE FFF5 00284 movff POSTINC2,TABLAT
MPASM 03.50 Released OS_18C801_A.ASM 7-16-2003 20:27:32 PAGE 9
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000116 000D 00285 tblwt*+
000118 04E8 00286 decf WREG,0x00,0
00011A E1?? 00287 bnz SfStk2ExtRAM
00288
00289 ;load new task's TCB
00011C 00290 ChangeCurrentTask:
00011C 0E03 00291 movlw TASK_HD_STK_PTR
00011E 6EFC 00292 movwf STKPTR ;Adjust STKPTR,ready to save
000120 C??? F??? 00293 movff OSTCBHighRdy,OSTCBCur
000124 C??? FFF6 00294 movff OSTCBHighRdy,TBLPTRL
000128 C??? F??? 00295 movff OSTCBHighRdy+1,OSTCBCur+1
00012C C??? FFF7 00296 movff OSTCBHighRdy+1,TBLPTRH
000130 C??? F??? 00297 movff OSTCBHighRdy+2,OSTCBCur+2
000134 C??? FFF8 00298 movff OSTCBHighRdy+2,TBLPTRU
000138 0009 00299 tblrd*+
00013A CFF5 FFF3 00300 movff TABLAT,PRODL
00013E 0009 00301 tblrd*+
000140 CFF5 FFF4 00302 movff TABLAT,PRODH
000144 0008 00303 tblrd* ;the UPPER byte is in TABLAT,MUST be 0x0
0
000146 CFF5 FFF8 00304 movff TABLAT,TBLPTRU
00014A CFF5 FFE7 00305 movff TABLAT,INDF1
00014E CFF4 FFF7 00306 movff PRODH,TBLPTRH
000152 CFF3 FFF6 00307 movff PRODL,TBLPTRL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -