📄 os_cpu_c.ls1
字号:
172 ; *****************************************************************************************
****************
173 ; */
A51 MACRO ASSEMBLER OS_CPU_C 07/03/2002 08:51:27 PAGE 4
174 ;
175 ; /* The stack variable points to the start pointer in hardware stack and is defined in OS_
CPU_A */
176 ; extern idata unsigned char Stack[1];
177 ;
178
---- 179 RSEG ?PR?OS_CPU_C
0000 180 Com0008:
0000 181 L?0009:
182 USING 0
0000 183 L?0010:
0000 120000 F 184 LCALL ?C?CSTPTR
0003 185 L?0011:
0003 850083 F 186 MOV DPH,?C_XBP
0006 850082 F 187 MOV DPL,?C_XBP+01H
0009 74FF 188 MOV A,#0FFH
000B F5F0 189 MOV B,A
000D 020000 F 190 LJMP ?C?PILDXDATA
0010 191 L?0012:
192 USING 0
0010 850083 F 193 MOV DPH,?C_XBP
0013 850082 F 194 MOV DPL,?C_XBP+01H
0016 A3 195 INC DPTR
0017 74FF 196 MOV A,#0FFH
0019 75F0FE 197 MOV B,#0FEH
001C 120000 F 198 LCALL ?C?IILDX
001F 900003 199 MOV DPTR,#03H
0022 120000 F 200 LCALL ?C?XBPOFF
0025 120000 F 201 LCALL ?C?PLDXDATA
0028 AE02 202 MOV R6,AR2
002A AF01 203 MOV R7,AR1
002C 204 L?0013:
002C 850083 F 205 MOV DPH,?C_XBP
002F 850082 F 206 MOV DPL,?C_XBP+01H
0032 22 207 RET
0033 208 L?0014:
209 USING 0
0033 210 L?0015:
0033 90FFFD 211 MOV DPTR,#0FFFDH
0036 120000 F 212 LCALL ?C?ADDXBP
0039 020000 F 213 LJMP ?C?PSTXDATA
003C 214 L?0016:
215 USING 0
003C 120000 F 216 LCALL ?C?PLDXDATA
003F EE 217 MOV A,R6
0040 8FF0 218 MOV B,R7
0042 020000 F 219 LJMP ?C?ISTPTR
220 ; END OF Com0008
221
222 ; OS_STK *OSTaskStkInit (void (*task)(void *pd) KCREENTRANT, void * vd, OS_STK *ptos, INT16
U opt) KCREENTRANT
223
---- 224 RSEG ?PR?_?OSTaskStkInit?OS_CPU_C
0000 225 _?OSTaskStkInit:
226 USING 0
227 ; SOURCE LINE # 62
0000 120000 F 228 LCALL L?0014
0003 90FFFD 229 MOV DPTR,#0FFFDH
0006 120000 F 230 LCALL ?C?ADDXBP
231 ; {
232 ; INT8U * stk;
233 ; opt = opt; /* 'opt' is not used, prevent warning
*/
234 ; SOURCE LINE # 65
0009 90000C 235 MOV DPTR,#0CH
000C 120000 F 236 LCALL ?C?XBPOFF
A51 MACRO ASSEMBLER OS_CPU_C 07/03/2002 08:51:27 PAGE 5
000F E0 237 MOVX A,@DPTR
0010 FE 238 MOV R6,A
0011 A3 239 INC DPTR
0012 E0 240 MOVX A,@DPTR
0013 FF 241 MOV R7,A
0014 90000C 242 MOV DPTR,#0CH
0017 120000 F 243 LCALL ?C?XBPOFF
001A EE 244 MOV A,R6
001B F0 245 MOVX @DPTR,A
001C A3 246 INC DPTR
001D EF 247 MOV A,R7
001E F0 248 MOVX @DPTR,A
249 ; stk = (INT8U *) ptos; /* Load stack pointer
*/
250 ; SOURCE LINE # 66
001F 900009 251 MOV DPTR,#09H
0022 120000 F 252 LCALL ?C?XBPOFF
0025 120000 F 253 LCALL ?C?PLDXDATA
0028 120000 F 254 LCALL L?0013
002B 120000 F 255 LCALL ?C?PSTXDATA
256 ;
257 ; stk -= sizeof(INT16U); /* The value should be load
ed to PC */
258 ; SOURCE LINE # 68
259 ; *(INT16U*)stk = (INT16U) task; /* next time when this task is running */
260 ; SOURCE LINE # 69
002E 120000 F 261 LCALL L?0012
0031 120000 F 262 LCALL L?0016
263 ;
264 ; stk -= sizeof(INT16U); /* The value should be load
ed to PC */
265 ; SOURCE LINE # 71
266 ; *(INT16U*)stk = (INT16U) task; /* next time when this task is running */
267 ; SOURCE LINE # 72
0034 120000 F 268 LCALL L?0012
0037 120000 F 269 LCALL L?0016
270 ;
271 ; /* Following is the registers pushed into hardware stack */
272 ; *--stk = 'A'; /* ACC */
273 ; SOURCE LINE # 75
003A 120000 F 274 LCALL L?0011
003D 7441 275 MOV A,#041H
276 ; *--stk = 'B'; /* B */
277 ; SOURCE LINE # 76
003F 120000 F 278 LCALL L?0009
0042 7442 279 MOV A,#042H
280 ; *--stk = 'L'; /* DPL */
281 ; SOURCE LINE # 77
0044 120000 F 282 LCALL L?0009
0047 744C 283 MOV A,#04CH
284 ; *--stk = 'H'; /* DPH */
285 ; SOURCE LINE # 78
0049 120000 F 286 LCALL L?0010
004C 7448 287 MOV A,#048H
288 ; *--stk = PSW; /* PSW */
289 ; SOURCE LINE # 79
004E 120000 F 290 LCALL L?0010
0051 E5D0 291 MOV A,PSW
292 ; *--stk = 0; /* R0 */
293 ; SOURCE LINE # 80
0053 120000 F 294 LCALL L?0010
0056 E4 295 CLR A
0057 120000 F 296 LCALL ?C?CSTPTR
297 ;
298 ; stk -= sizeof(void *); /* Keil C uses R1,R2,R3 to
pass the */
A51 MACRO ASSEMBLER OS_CPU_C 07/03/2002 08:51:27 PAGE 6
299 ; SOURCE LINE # 82
005A 120000 F 300 LCALL L?0013
005D A3 301 INC DPTR
005E 74FF 302 MOV A,#0FFH
0060 75F0FD 303 MOV B,#0FDH
0063 120000 F 304 LCALL ?C?IILDX
305 ; *(void**)stk = vd; /* arguments of functions. */
306 ; SOURCE LINE # 83
0066 900006 307 MOV DPTR,#06H
0069 120000 F 308 LCALL ?C?XBPOFF
006C 120000 F 309 LCALL ?C?PLDXDATA
006F C003 310 PUSH AR3
0071 C002 311 PUSH AR2
0073 C001 312 PUSH AR1
0075 120000 F 313 LCALL L?0013
0078 120000 F 314 LCALL ?C?PLDXDATA
007B 120000 F 315 LCALL ?C?PSTPTR
316 ;
317 ; *--stk = 4; /* R4 */
318 ; SOURCE LINE # 85
007E 120000 F 319 LCALL L?0011
0081 7404 320 MOV A,#04H
321 ; *--stk = 5; /* R5 */
322 ; SOURCE LINE # 86
0083 120000 F 323 LCALL L?0010
0086 7405 324 MOV A,#05H
325 ; *--stk = 6; /* R6 */
326 ; SOURCE LINE # 87
0088 120000 F 327 LCALL L?0010
008B 7406 328 MOV A,#06H
329 ; *--stk = 7; /* R7 */
330 ; SOURCE LINE # 88
008D 120000 F 331 LCALL L?0010
0090 7407 332 MOV A,#07H
333 ;
334 ; *--stk = 0x80; /* IE, EA is enabled */
335 ; SOURCE LINE # 90
0092 120000 F 336 LCALL L?0010
0095 7480 337 MOV A,#080H
0097 120000 F 338 LCALL ?C?CSTPTR
339 ; /*
340 ; Next is calculating the hardware stack pointer.
341 ; */
342 ; *--stk = (INT8U) Stack-1 /* Initial value when main was called
*/
343 ; SOURCE LINE # 94
009A 7400 F 344 MOV A,#LOW (Stack)
009C 2411 345 ADD A,#011H
009E FF 346 MOV R7,A
009F 120000 F 347 LCALL L?0011
00A2 EF 348 MOV A,R7
00A3 120000 F 349 LCALL ?C?CSTPTR
350 ; +1 /* IE */
351 ; +8 /* R0-R7, eight registers was saved */
352 ; +5 /* PSW, ACC, B, DPH, DPL, five registers */
353 ; +sizeof(INT16U) /* The PC value to be loaded */
354 ; +sizeof(INT16U) /* The PC value to be loaded */
355 ; ;
356 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -