⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_cpu_a.lst

📁 uc/os在c167上的移植代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
0174 D4360600 3    301                   MOV     R3,[R6+#06h]                ;     Get Task STATUS
0178 D4460800 2    302                   MOV     R4,[R6+#08h]                ;     Get Task DPP1
017C D4060A00 1    303                   MOV     R0,[R6+#0Ah]                ;     Get Task R0
0180 F6F402FE      304                   MOV     DPP1,R4
                   305   
0184 C4350400      306                   MOV     [R5+#04h],R3                ; Load "saved" PSW
0188 C4150200      307                   MOV     [R5+#02h],R1                ; Load "saved" CSP
018C B825          308                   MOV     [R5],R2                     ; Load "saved" IP
                   309   
018E 9810          310                   MOV     R1,[R0+]                    ; Restore MDL
0190 F6F10EFE      311                   MOV     MDL,R1                      ;
0194 9810          312                   MOV     R1,[R0+]                    ; Restore MDH
0196 F6F10CFE      313                   MOV     MDH,R1                      ;
019A 9810          314                   MOV     R1,[R0+]                    ; Restore MDC
019C F6F10EFF      315                   MOV     MDC,R1                      ;
01A0 9810          316                   MOV     R1,[R0+]                    ; Restore DPP0
01A2 F6F100FE      317                   MOV     DPP0,R1                     ;
01A6 9810          318                   MOV     R1,[R0+]                    ; Restore DPP2
01A8 F6F104FE      319                   MOV     DPP2,R1                     ;
01AC 9810          320                   MOV     R1,[R0+]                    ; Restore DPP3
01AE F6F106FE      321                   MOV     DPP3,R1                     ;
01B2 9810          322                   MOV     R1,[R0+]                    ; Restore CP
01B4 F6F110FE      323                   MOV     CP,R1                       ;
01B8 CC00          324                   NOP
01BA 98F0          325                   MOV     R15,[R0+]                   ; Restore R15
01BC 98E0          326                   MOV     R14,[R0+]                   ; Restore R14
01BE 98D0          327                   MOV     R13,[R0+]                   ; Restore R13
01C0 98C0          328                   MOV     R12,[R0+]                   ; Restore R12
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc.                       Date: Dec  5 2000  Time: 10:02:43  Page:   7
os_cpu_a

 LOC CODE        LINE   SOURCELINE

01C2 98B0          329                   MOV     R11,[R0+]                   ; Restore R11
01C4 98A0          330                   MOV     R10,[R0+]                   ; Restore R10
01C6 9890          331                   MOV     R9,[R0+]                    ; Restore R9
01C8 9880          332                   MOV     R8,[R0+]                    ; Restore R8
01CA 9870          333                   MOV     R7,[R0+]                    ; Restore R7
01CC 9860          334                   MOV     R6,[R0+]                    ; Restore R6
01CE 9850          335                   MOV     R5,[R0+]                    ; Restore R5
01D0 9840          336                   MOV     R4,[R0+]                    ; Restore R4
01D2 9830          337                   MOV     R3,[R0+]                    ; Restore R3
01D4 9820          338                   MOV     R2,[R0+]                    ; Restore R2
01D6 9810          339                   MOV     R1,[R0+]                    ; Restore R1; Restore General Purpose Registers
                   340   
01D8 BF88          341                   BSET    IEN                         ; Enable interrupts
                   342   
01DA FB88          343                   RETI                                ; Return to new task
                   344   
                   345   _OSCtxSw        ENDP
                   346   UCOS_C16X       ENDS
                   347   
                   348   ;********************************************************************************************************
                   349   ;                                 PERFORM A CONTEXT SWITCH (From an ISR)
                   350   ;                                           void OSIntCtxSw(void)
                   351   ; Note(s): 1) Upon entry,
                   352   ;             OSTCBCur     points to the OS_TCB of the task to suspend
                   353   ;             OSTCBHighRdy points to the OS_TCB of the task to resume
                   354   ;
                   355   ;          2) The system stack frame of the task to suspend looks as follows:
                   356   ;                                           SYSTEM STACK AREA
                   357   ;                                     SP -> +0  OFFSET  of task to suspend    (Low memory)
                   358   ;                                           +2  SEGMENT of task to suspend
                   359   ;                                           +4  PSW     of task to suspend    (High memory)
                   360   ;
                   361   ;          3) The user stack frame of the task to resume looks as follows:
                   362   ;
                   363   ;                                                TASK STACK AREA                              (High Memory)
                   364   ;                                           +12  TASK DATA PARAMETER PAGE pointer of task
                   365   ;                                           +10  TASK DATA PARAMETER OFFSET pointer of task
                   366   ;                                           +0E  SEGMENT of task code address
                   367   ;                                           +0C  OFFSET  of task code address
                   368   ;                                           +0A  USER STACK OFFSET POINTER (R0) of task
                   369   ;                                           +08  USER STACK PAGE POINTER (DPP1) of task
                   370   ;                                           +06  PSW flags of task
                   371   ;                                           +04  OFFSET  of task return address
                   372   ;                                           +02  SEGMENT of task return address
                   373   ;             OSTCBHighRdy->OSTCBStkPtr -->   0
                   374   ;                                           -02  R[1 ..15] General Purpose registers of task
                   375   ;                                           -20  CP     Context pointer of task
                   376   ;                                           -22  DPP3   Data page pointer 3 of task
                   377   ;                                           -24  DPP2   Data page pointer 2 of task
                   378   ;                                           -26  DPP0   Data page pointer 0 of task
                   379   ;                                           -28  MDC    Multiply/Divide Control of task
                   380   ;                                           -2A  MDH    Multiply/Divide High register of task
                   381   ;                                           -2C  MDL    Multiply/Divide Low register of task
                   382   ;                                           -2E  Calls to OsIntExit, OSIntCtxSw and locals.   (Low Memory)
                   383   ;********************************************************************************************************
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc.                       Date: Dec  5 2000  Time: 10:02:43  Page:   8
os_cpu_a

 LOC CODE        LINE   SOURCELINE

                   384   
                   385   UCOS_C16X       SECTION CODE
                   386   _OSIntCtxSw     PROC    FAR
                   387   
01DC 06F00800      388                   ADD     R0,#8                       ; Ignore calls to OSIntExit,OSIntCtxSw and locals.
                   389   
01E0 D7500000  R   390                   EXTP    #PAG _OSTCBCur,#02h         ; Load Task stack pointer from current TCB
01E4 F2F80000 2R   391                   MOV     R8,POF (_OSTCBCur)          ;     R7:R6 = OSTCBCur->OSTCBStkPtr
01E8 F2F90000 1R   392                   MOV     R9,POF (_OSTCBCur+2)
01EC DC59          393                   EXTP    R9,#02h
01EE 9868     2    394                   MOV     R6,[R8+]
01F0 A878     1    395                   MOV     R7,[R8]
                   396   
01F2 F2F512FE      397                   MOV     R5,SP
01F6 D4350400      398                   MOV     R3,[R5+#04h]                ; Get "current" PSW
01FA D4150200      399                   MOV     R1,[R5+#02h]                ; Get "current" CSP
01FE A825          400                   MOV     R2,[R5]                     ; Get "current" IP
0200 F2F402FE      401                   MOV     R4,DPP1                     ; Get "current" DPP1
                   402                                                       
0204 DC57          403                   EXTP    R7,#02h                     ; Save this task's interrupt context in task user stack
0206 C4160200 2    404                   MOV     [R6+#02h],R1                ;     Task CSP
020A C4260400 1    405                   MOV     [R6+#04h],R2                ;     Task IP
020E DC67          406                   EXTP    R7,#03h
0210 C4360600 3    407                   MOV     [R6+#06h],R3                ;     Task STATUS
0214 C4460800 2    408                   MOV     [R6+#08h],R4                ;     Task DPP1
0218 C4060A00 1    409                   MOV     [R6+#0Ah],R0                ;     Task R0
                   410                                                        
021C E6F90000  R   411                   MOV     R9,#SOF _ADDR02             ; Call user defined task switch hook
0220 8890          412                   MOV     [-R0],R9
0222 E6F90000  R   413                   MOV     R9,#SEG _ADDR02
0226 8890          414                   MOV     [-R0],R9
0228 FA000000  R   415                   JMPS   SEG( _OSTaskSwHook),SOF( _OSTaskSwHook)
022C               416   _ADDR02:                                            
022C D7500000  R   417                   EXTP    #PAG (_OSTCBHighRdy),#02h   ; OSTCBCur = OSTCBHighRdy
0230 F2F80000 2R   418                   MOV     R8,POF (_OSTCBHighRdy)
0234 F2F90000 1R   419                   MOV     R9,POF (_OSTCBHighRdy+2)
0238 D7500000  R   420                   EXTP    #PAG (_OSTCBCur),#02h
023C F6F80000 2R   421                   MOV     POF (_OSTCBCur),R8
0240 F6F90000 1R   422                   MOV     POF (_OSTCBCur+2),R9
                   423               
0244 D7400000  R   424                   EXTP    #PAG _OSPrioHighRdy,#01h    ;  OSPrioCur = OSPrioHighRdy;
0248 F3F20000 1R   425                   MOVB    RL1,POF _OSPrioHighRdy
024C D7400000  R   426                   EXTP    #PAG _OSPrioCur,#01h
0250 F7F20000 1R   427                   MOVB    POF _OSPrioCur,RL1
                   428                                                       
0254 DC59          429                   EXTP    R9,#02h                     ; Get the stack pointer of the task to resume
0256 9868     2    430                   MOV     R6,[R8+]                    ;     R7:R6 = OSTCBHighRdy->OSTCBStkPtr
0258 A878     1    431                   MOV     R7,[R8]
                   432                                                      
025A DC57          433                   EXTP    R7,#02h                     ; Get & Initialise task's context from TCB
025C D4160200 2    434                   MOV     R1,[R6+#02h]                ;     Task CSP
0260 D4260400 1    435                   MOV     R2,[R6+#04h]                ;     Task IP
0264 DC67          436                   EXTP    R7,#03h
0266 D4360600 3    437                   MOV     R3,[R6+#06h]                ;     Task STATUS
026A D4460800 2    438                   MOV     R4,[R6+#08h]                ;     Task DPP1
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc.                       Date: Dec  5 2000  Time: 10:02:43  Page:   9
os_cpu_a

 LOC CODE        LINE   SOURCELINE

026E D4060A00 1    439                   MOV     R0,[R6+#0Ah]                ;     Task R0
0272 F6F402FE      440                   MOV     DPP1,R4
                   441   
0276 C4350400      442                   MOV     [R5+#04h],R3                ; Load "saved" PSW
027A C4150200      443                   MOV     [R5+#02h],R1                ; Load "saved" CSP
027E B825          444                   MOV     [R5],R2                     ; Load "saved" IP
                   445                                                       
0280 9810          446                   MOV     R1,[R0+]                    ; Restore MDL
0282 F6F10EFE      447                   MOV     MDL,R1                      ;
0286 9810          448                   MOV     R1,[R0+]                    ; Restore MDH
0288 F6F10CFE      449                   MOV     MDH,R1                      ;
028C 9810          450                   MOV     R1,[R0+]                    ; Restore MDC
028E F6F10EFF      451                   MOV     MDC,R1                      ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -