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

📄 os_core.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000054   0010C0E5           STRB     R1,[R0, #+0]
    394                      }
    395                  }
    396                  OS_EXIT_CRITICAL();
   \                     ??OSSchedLock_1:
   \   00000058   0400B0E1           MOVS     R0,R4
   \   0000005C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    397              }
    398          }
   \                     ??OSSchedLock_0:
   \   00000060   1080BDE8           POP      {R4,PC}          ;; return
    399          #endif
    400          
    401          /*$PAGE*/
    402          /*
    403          *********************************************************************************************************
    404          *                                          ENABLE SCHEDULING
    405          *
    406          * Description: This function is used to re-allow rescheduling.
    407          *
    408          * Arguments  : none
    409          *
    410          * Returns    : none
    411          *
    412          * Notes      : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair.  In other words, for every
    413          *                 call to OSSchedLock() you MUST have a call to OSSchedUnlock().
    414          *********************************************************************************************************
    415          */
    416          
    417          #if OS_SCHED_LOCK_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    418          void  OSSchedUnlock (void)
    419          {
   \                     OSSchedUnlock:
   \   00000000   10402DE9           PUSH     {R4,LR}
    420          #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
    421              OS_CPU_SR  cpu_sr = 0;
   \   00000004   0000A0E3           MOV      R0,#+0
   \   00000008   0040B0E1           MOVS     R4,R0
    422          #endif
    423          
    424          
    425          
    426              if (OSRunning == OS_TRUE) {                            /* Make sure multitasking is running        */
   \   0000000C   ........           LDR      R0,??DataTable80  ;; OSRunning
   \   00000010   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000014   010050E3           CMP      R0,#+1
   \   00000018   1E00001A           BNE      ??OSSchedUnlock_0
    427                  OS_ENTER_CRITICAL();
   \   0000001C   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   00000020   0040B0E1           MOVS     R4,R0
    428                  if (OSLockNesting > 0) {                           /* Do not decrement if already 0            */
   \   00000024   ........           LDR      R0,??DataTable96  ;; OSLockNesting
   \   00000028   0000D0E5           LDRB     R0,[R0, #+0]
   \   0000002C   010050E3           CMP      R0,#+1
   \   00000030   1600003A           BCC      ??OSSchedUnlock_1
    429                      OSLockNesting--;                               /* Decrement lock nesting level             */
   \   00000034   ........           LDR      R0,??DataTable96  ;; OSLockNesting
   \   00000038   ........           LDR      R1,??DataTable96  ;; OSLockNesting
   \   0000003C   0010D1E5           LDRB     R1,[R1, #+0]
   \   00000040   011051E2           SUBS     R1,R1,#+1
   \   00000044   0010C0E5           STRB     R1,[R0, #+0]
    430                      if (OSLockNesting == 0) {                      /* See if scheduler is enabled and ...      */
   \   00000048   ........           LDR      R0,??DataTable96  ;; OSLockNesting
   \   0000004C   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000050   000050E3           CMP      R0,#+0
   \   00000054   0A00001A           BNE      ??OSSchedUnlock_2
    431                          if (OSIntNesting == 0) {                   /* ... not in an ISR                        */
   \   00000058   ........           LDR      R0,??DataTable95  ;; OSIntNesting
   \   0000005C   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000060   000050E3           CMP      R0,#+0
   \   00000064   0300001A           BNE      ??OSSchedUnlock_3
    432                              OS_EXIT_CRITICAL();
   \   00000068   0400B0E1           MOVS     R0,R4
   \   0000006C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    433                              OS_Sched();                            /* See if a HPT is ready                    */
   \   00000070   ........           BL       OS_Sched
   \   00000074   070000EA           B        ??OSSchedUnlock_0
    434                          } else {
    435                              OS_EXIT_CRITICAL();
   \                     ??OSSchedUnlock_3:
   \   00000078   0400B0E1           MOVS     R0,R4
   \   0000007C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
   \   00000080   040000EA           B        ??OSSchedUnlock_0
    436                          }
    437                      } else {
    438                          OS_EXIT_CRITICAL();
   \                     ??OSSchedUnlock_2:
   \   00000084   0400B0E1           MOVS     R0,R4
   \   00000088   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
   \   0000008C   010000EA           B        ??OSSchedUnlock_0
    439                      }
    440                  } else {
    441                      OS_EXIT_CRITICAL();
   \                     ??OSSchedUnlock_1:
   \   00000090   0400B0E1           MOVS     R0,R4
   \   00000094   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    442                  }
    443              }
    444          }
   \                     ??OSSchedUnlock_0:
   \   00000098   1080BDE8           POP      {R4,PC}          ;; return
    445          #endif
    446          
    447          /*$PAGE*/
    448          /*
    449          *********************************************************************************************************
    450          *                                          START MULTITASKING
    451          *
    452          * Description: This function is used to start the multitasking process which lets uC/OS-II manages the
    453          *              task that you have created.  Before you can call OSStart(), you MUST have called OSInit()
    454          *              and you MUST have created at least one task.
    455          *
    456          * Arguments  : none
    457          *
    458          * Returns    : none
    459          *
    460          * Note       : OSStartHighRdy() MUST:
    461          *                 a) Call OSTaskSwHook() then,
    462          *                 b) Set OSRunning to OS_TRUE.
    463          *                 c) Load the context of the task pointed to by OSTCBHighRdy.
    464          *                 d_ Execute the task.
    465          *********************************************************************************************************
    466          */
    467          

   \                                 In segment CODE, align 4, keep-with-next
    468          void  OSStart (void)
    469          {
   \                     OSStart:
   \   00000000   00402DE9           PUSH     {LR}
    470              if (OSRunning == OS_FALSE) {
   \   00000004   ........           LDR      R0,??DataTable80  ;; OSRunning
   \   00000008   0000D0E5           LDRB     R0,[R0, #+0]
   \   0000000C   000050E3           CMP      R0,#+0
   \   00000010   1100001A           BNE      ??OSStart_0
    471                  OS_SchedNew();                               /* Find highest priority's task priority number   */
   \   00000014   ........           BL       OS_SchedNew
    472                  OSPrioCur     = OSPrioHighRdy;
   \   00000018   ........           LDR      R0,??DataTable98  ;; OSPrioCur
   \   0000001C   ........           LDR      R1,??DataTable108  ;; OSPrioHighRdy
   \   00000020   0010D1E5           LDRB     R1,[R1, #+0]
   \   00000024   0010C0E5           STRB     R1,[R0, #+0]
    473                  OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
   \   00000028   ........           LDR      R0,??DataTable103  ;; OSTCBHighRdy
   \   0000002C   ........           LDR      R1,??DataTable108  ;; OSPrioHighRdy
   \   00000030   0010D1E5           LDRB     R1,[R1, #+0]
   \   00000034   0420A0E3           MOV      R2,#+4
   \   00000038   ........           LDR      R3,??DataTable120  ;; OSTCBPrioTbl
   \   0000003C   923121E0           MLA      R1,R2,R1,R3
   \   00000040   001091E5           LDR      R1,[R1, #+0]
   \   00000044   001080E5           STR      R1,[R0, #+0]
    474                  OSTCBCur      = OSTCBHighRdy;
   \   00000048   ........           LDR      R0,??DataTable91  ;; OSTCBCur
   \   0000004C   ........           LDR      R1,??DataTable103  ;; OSTCBHighRdy
   \   00000050   001091E5           LDR      R1,[R1, #+0]
   \   00000054   001080E5           STR      R1,[R0, #+0]
    475                  OSStartHighRdy();                            /* Execute target specific code to start task     */
   \   00000058   ........           _BLF     OSStartHighRdy,??OSStartHighRdy??rA
    476              }
    477          }
   \                     ??OSStart_0:
   \   0000005C   0080BDE8           POP      {PC}             ;; return
    478          /*$PAGE*/
    479          /*
    480          *********************************************************************************************************
    481          *                                        STATISTICS INITIALIZATION
    482          *
    483          * Description: This function is called by your application to establish CPU usage by first determining
    484          *              how high a 32-bit counter would count to in 1 second if no other tasks were to execute
    485          *              during that time.  CPU usage is then determined by a low priority task which keeps track
    486          *              of this 32-bit counter every second but this time, with other tasks running.  CPU usage is
    487          *              determined by:
    488          *
    489          *                                             OSIdleCtr
    490          *                 CPU Usage (%) = 100 * (1 - ------------)
    491          *                                            OSIdleCtrMax
    492          *
    493          * Arguments  : none
    494          *
    495          * Returns    : none
    496          *********************************************************************************************************
    497          */
    498          
    499          #if OS_TASK_STAT_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    500          void  OSStatInit (void)
    501          {
   \                     OSStatInit:
   \   00000000   10402DE9           PUSH     {R4,LR}
    502          #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    503              OS_CPU_SR  cpu_sr = 0;
   \   00000004   0000A0E3           MOV      R0,#+0
   \   00000008   0040B0E1           MOVS     R4,R0
    504          #endif
    505          
    506          
    507          
    508              OSTimeDly(2);                                /* Synchronize with clock tick                        */
   \   0000000C   0200A0E3           MOV      R0,#+2
   \   00000010   ........           _BLF     OSTimeDly,??OSTimeDly??rA
    509              OS_ENTER_CRITICAL();
   \   00000014   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   00000018   0040B0E1           MOVS     R4,R0
    510              OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
   \   0000001C   ........           LDR      R0,??DataTable118  ;; OSIdleCtr
   \   00000020   0010A0E3           MOV      R1,#+0
   \   00000024   001080E5           STR      R1,[R0, #+0]
    511              OS_EXIT_CRITICAL();
   \   00000028   0400B0E1           MOVS     R0,R4
   \   0000002C   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
    512              OSTimeDly(OS_TICKS_PER_SEC / 10);            /* Determine MAX. idle counter value for 1/10 second  */
   \   00000030   6400A0E3           MOV      R0,#+100
   \   00000034   ........           _BLF     OSTimeDly,??OSTimeDly??rA
    513              OS_ENTER_CRITICAL();
   \   00000038   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
   \   0000003C   0040B0E1           MOVS     R4,R0
    514              OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1/10 second    */
   \   00000040   ........           LDR      R0,??DataTable119  ;; OSIdleCtrMax
   \   00000044   ........           LDR      R1,??DataTable118  ;; OSIdleCtr
   \   00000048   001091E5           LDR      R1,[R1, #+0]
   \   0000004C   001080E5           STR      R1,[R0, #+0]
    515              OSStatRdy    = OS_TRUE;
   \   00000050   ........           LDR      R0,??DataTable113  ;; OSStatRdy
   \   00000054   0110A0E3           MOV      R1,#+1
   \   00000058   0010C0E5           STRB     R1,

⌨️ 快捷键说明

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