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

📄 ucos_ii.lis

📁 ucos在mage128上的应用
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 003C                   .dbline 330
 003C           ;         OS_ENTER_CRITICAL();
 003C 0E940000          xcall _OS_CPU_SR_Save
 0040 A02E              mov R10,R16
 0042                   .dbline 331
 0042           ;         if (OSIntNesting > 0) {                            /* Prevent OSIntNesting from wrapping       */
 0042 80E0              ldi R24,0
 0044 20904B0A          lds R2,_OSIntNesting
 0048 8215              cp R24,R2
 004A 20F4              brsh L10
 004C           X3:
 004C                   .dbline 331
 004C                   .dbline 332
 004C           ;             OSIntNesting--;
 004C 822D              mov R24,R2
 004E 8150              subi R24,1
 0050 80934B0A          sts _OSIntNesting,R24
 0054                   .dbline 333
 0054           ;         }
 0054           L10:
 0054                   .dbline 334
 0054           ;         if (OSIntNesting == 0) {                           /* Reschedule only if all ISRs complete ... */
 0054 20904B0A          lds R2,_OSIntNesting
 0058 2220              tst R2
 005A 09F0              breq X8
 005C 6BC0              xjmp L12
 005E           X8:
 005E           X4:
 005E                   .dbline 334
 005E                   .dbline 335
 005E           ;             if (OSLockNesting == 0) {                      /* ... and not locked.                      */
 005E 2090490A          lds R2,_OSLockNesting
 0062 2220              tst R2
 0064 09F0              breq X9
 0066 66C0              xjmp L14
 0068           X9:
 0068           X5:
 0068                   .dbline 335
 0068                   .dbline 336
 0068           ;                 OSIntExitY    = OSUnMapTbl[OSRdyGrp];          
 0068 80E0              ldi R24,<_OSUnMapTbl
 006A 90E0              ldi R25,>_OSUnMapTbl
 006C E091460A          lds R30,_OSRdyGrp
 0070 FF27              clr R31
 0072 E80F              add R30,R24
 0074 F91F              adc R31,R25
 0076 2690              elpm R2,Z
 0078 20924A0A          sts _OSIntExitY,R2
 007C                   .dbline 337
 007C           ;                 OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
 007C 422C              mov R4,R2
 007E 80E0              ldi R24,<_OSRdyTbl
 0080 90E0              ldi R25,>_OSRdyTbl
 0082 E22D              mov R30,R2
 0084 FF27              clr R31
 0086 E80F              add R30,R24
 0088 F91F              adc R31,R25
 008A E081              ldd R30,z+0
 008C FF27              clr R31
 008E 80E0              ldi R24,<_OSUnMapTbl
 0090 90E0              ldi R25,>_OSUnMapTbl
 0092 E80F              add R30,R24
 0094 F91F              adc R31,R25
 0096 2690              elpm R2,Z
 0098 3324              clr R3
 009A 5524              clr R5
 009C 440C              lsl R4
 009E 551C              rol R5
 00A0 440C              lsl R4
 00A2 551C              rol R5
 00A4 440C              lsl R4
 00A6 551C              rol R5
 00A8 420C              add R4,R2
 00AA 531C              adc R5,R3
 00AC 4092470A          sts _OSPrioHighRdy,R4
 00B0                   .dbline 338
 00B0           ;                 if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy */
 00B0 2090480A          lds R2,_OSPrioCur
 00B4 342C              mov R3,R4
 00B6 4214              cp R4,R2
 00B8 09F4              brne X10
 00BA 3CC0              xjmp L16
 00BC           X10:
 00BC           X6:
 00BC                   .dbline 338
 00BC                   .dbline 339
 00BC           ;                     OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
 00BC 80E0              ldi R24,<_OSTCBPrioTbl
 00BE 90E0              ldi R25,>_OSTCBPrioTbl
 00C0 E42D              mov R30,R4
 00C2 FF27              clr R31
 00C4 EE0F              lsl R30
 00C6 FF1F              rol R31
 00C8 E80F              add R30,R24
 00CA F91F              adc R31,R25
 00CC 2080              ldd R2,z+0
 00CE 3180              ldd R3,z+1
 00D0 30923309          sts _OSTCBHighRdy+1,R3
 00D4 20923209          sts _OSTCBHighRdy,R2
 00D8                   .dbline 341
 00D8           ; #if OS_TASK_PROFILE_EN > 0
 00D8           ;                     OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task  */
 00D8 A101              movw R20,R2
 00DA 405F              subi R20,240  ; offset = 16
 00DC 5F4F              sbci R21,255
 00DE 81E0              ldi R24,1
 00E0 90E0              ldi R25,0
 00E2 A0E0              ldi R26,0
 00E4 B0E0              ldi R27,0
 00E6 FA01              movw R30,R20
 00E8 2080              ldd R2,z+0
 00EA 3180              ldd R3,z+1
 00EC 4280              ldd R4,z+2
 00EE 5380              ldd R5,z+3
 00F0 280E              add R2,R24
 00F2 391E              adc R3,R25
 00F4 4A1E              adc R4,R26
 00F6 5B1E              adc R5,R27
 00F8 2082              std z+0,R2
 00FA 3182              std z+1,R3
 00FC 4282              std z+2,R4
 00FE 5382              std z+3,R5
 0100                   .dbline 343
 0100           ; #endif
 0100           ;                     OSCtxSwCtr++;                          /* Keep track of the number of ctx switches */
 0100 81E0              ldi R24,1
 0102 90E0              ldi R25,0
 0104 A0E0              ldi R26,0
 0106 B0E0              ldi R27,0
 0108 4090960A          lds R4,_OSCtxSwCtr+2
 010C 5090970A          lds R5,_OSCtxSwCtr+2+1
 0110 2090940A          lds R2,_OSCtxSwCtr
 0114 3090950A          lds R3,_OSCtxSwCtr+1
 0118 280E              add R2,R24
 011A 391E              adc R3,R25
 011C 4A1E              adc R4,R26
 011E 5B1E              adc R5,R27
 0120 3092950A          sts _OSCtxSwCtr+1,R3
 0124 2092940A          sts _OSCtxSwCtr,R2
 0128 5092970A          sts _OSCtxSwCtr+2+1,R5
 012C 4092960A          sts _OSCtxSwCtr+2,R4
 0130                   .dbline 344
 0130           ;                     OSIntCtxSw();                          /* Perform interrupt level ctx switch       */
 0130 0E940000          xcall _OSIntCtxSw
 0134                   .dbline 345
 0134           ;                 }
 0134           L16:
 0134                   .dbline 346
 0134           ;             }
 0134           L14:
 0134                   .dbline 347
 0134           ;         }
 0134           L12:
 0134                   .dbline 348
 0134           ;         OS_EXIT_CRITICAL();
 0134 0A2D              mov R16,R10
 0136 0E940000          xcall _OS_CPU_SR_Restore
 013A                   .dbline 349
 013A           ;     }
 013A           L8:
 013A                   .dbline -2
 013A           L7:
 013A                   .dbline 0 ; func end
 013A 0C940000          xjmp pop_xgset300C
 013E                   .dbsym r cpu_sr 10 c
 013E                   .dbend
 013E                   .dbfunc e OSSchedLock _OSSchedLock fV
 013E           ;         cpu_sr -> R10
                        .even
 013E           _OSSchedLock::
 013E AA92              st -y,R10
 0140                   .dbline -1
 0140                   .dbline 370
 0140           ; }
 0140           ; /*$PAGE*/
 0140           ; /*
 0140           ; *********************************************************************************************************
 0140           ; *                                          PREVENT SCHEDULING
 0140           ; *
 0140           ; * Description: This function is used to prevent rescheduling to take place.  This allows your application
 0140           ; *              to prevent context switches until you are ready to permit context switching.
 0140           ; *
 0140           ; * Arguments  : none
 0140           ; *
 0140           ; * Returns    : none
 0140           ; *
 0140           ; * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other words, for every
 0140           ; *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
 0140           ; *********************************************************************************************************
 0140           ; */
 0140           ; 
 0140           ; #if OS_SCHED_LOCK_EN > 0
 0140           ; void  OSSchedLock (void)
 0140           ; {
 0140                   .dbline 376
 0140           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 0140           ;     OS_CPU_SR  cpu_sr;
 0140           ; #endif    
 0140           ;     
 0140           ;     
 0140           ;     if (OSRunning == TRUE) {                     /* Make sure multitasking is running                  */
 0140 80913D0A          lds R24,_OSRunning
 0144 8130              cpi R24,1
 0146 69F4              brne L19
 0148           X11:
 0148                   .dbline 376
 0148                   .dbline 377
 0148           ;         OS_ENTER_CRITICAL();
 0148 0E940000          xcall _OS_CPU_SR_Save
 014C A02E              mov R10,R16
 014E                   .dbline 378
 014E           ;         if (OSLockNesting < 255u) {              /* Prevent OSLockNesting from wrapping back to 0      */
 014E 8091490A          lds R24,_OSLockNesting
 0152 8F3F              cpi R24,255
 0154 18F4              brsh L21
 0156           X12:
 0156                   .dbline 378
 0156                   .dbline 379
 0156           ;             OSLockNesting++;                     /* Increment lock nesting level                       */
 0156 8F5F              subi R24,255    ; addi 1
 0158 8093490A          sts _OSLockNesting,R24
 015C                   .dbline 380
 015C           ;         }
 015C           L21:
 015C                   .dbline 381
 015C           ;         OS_EXIT_CRITICAL();
 015C 0A2D              mov R16,R10
 015E 0E940000          xcall _OS_CPU_SR_Restore
 0162                   .dbline 382
 0162           ;     }
 0162           L19:
 0162                   .dbline -2
 0162           L18:
 0162                   .dbline 0 ; func end
 0162 A990              ld R10,y+
 0164 0895              ret
 0166                   .dbsym r cpu_sr 10 c
 0166                   .dbend
 0166                   .dbfunc e OSSchedUnlock _OSSchedUnlock fV
 0166           ;         cpu_sr -> R10
                        .even
 0166           _OSSchedUnlock::
 0166 AA92              st -y,R10
 0168                   .dbline -1
 0168                   .dbline 404
 0168           ; }
 0168           ; #endif    
 0168           ; 
 0168           ; /*$PAGE*/
 0168           ; /*
 0168           ; *********************************************************************************************************
 0168           ; *                                          ENABLE SCHEDULING
 0168           ; *
 0168           ; * Description: This function is used to re-allow rescheduling.
 0168           ; *
 0168           ; * Arguments  : none
 0168           ; *
 0168           ; * Returns    : none
 0168           ; *
 0168           ; * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other words, for every
 0168           ; *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
 0168           ; *********************************************************************************************************
 0168           ; */
 0168           ; 
 0168           ; #if OS_SCHED_LOCK_EN > 0
 0168           ; void  OSSchedUnlock (void)
 0168           ; {
 0168                   .dbline 410
 0168           ; #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
 0168           ;     OS_CPU_SR  cpu_sr;
 0168           ; #endif    

⌨️ 快捷键说明

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