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

📄 os_core.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000004   0078               LDRB     R0,[R0, #+0]
   \   00000006   0128               CMP      R0,#+1
   \   00000008   18D1               BNE      ??OSSchedUnlock_0
    411                  OS_ENTER_CRITICAL();
   \   0000000A   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    412                  if (OSLockNesting > 0) {                               /* Do not decrement if already 0        */
   \   0000000E   ....               LDR      R1,??DataTable28  ;; OSLockNesting
   \   00000010   0978               LDRB     R1,[R1, #+0]
   \   00000012   0029               CMP      R1,#+0
   \   00000014   10D0               BEQ      ??OSSchedUnlock_1
    413                      OSLockNesting--;                                   /* Decrement lock nesting level         */
   \   00000016   ....               LDR      R1,??DataTable28  ;; OSLockNesting
   \   00000018   ....               LDR      R2,??DataTable28  ;; OSLockNesting
   \   0000001A   1278               LDRB     R2,[R2, #+0]
   \   0000001C   521E               SUBS     R2,R2,#+1
   \   0000001E   0A70               STRB     R2,[R1, #+0]
    414                      if (OSLockNesting == 0) {                          /* See if scheduler is enabled and ...  */
   \   00000020   0978               LDRB     R1,[R1, #+0]
   \   00000022   0029               CMP      R1,#+0
   \   00000024   08D1               BNE      ??OSSchedUnlock_2
    415                          if (OSIntNesting == 0) {                       /* ... not in an ISR                    */
   \   00000026   ....               LDR      R1,??DataTable29  ;; OSIntNesting
   \   00000028   0978               LDRB     R1,[R1, #+0]
   \   0000002A   0029               CMP      R1,#+0
   \   0000002C   04D1               BNE      ??OSSchedUnlock_1
    416                              OS_EXIT_CRITICAL();
   \   0000002E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    417                              OS_Sched();                                /* See if a HPT is ready                */
   \   00000032   ........           BL       OS_Sched
   \   00000036   01E0               B        ??OSSchedUnlock_0
    418                          } else {
    419                              OS_EXIT_CRITICAL();
    420                          }
    421                      } else {
    422                          OS_EXIT_CRITICAL();
    423                      }
    424                  } else {
    425                      OS_EXIT_CRITICAL();
   \                     ??OSSchedUnlock_2:
   \                     ??OSSchedUnlock_1:
   \   00000038   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    426                  }
    427              }
    428          }
   \                     ??OSSchedUnlock_0:
   \   0000003C   01BC               POP      {R0}
   \   0000003E   0047               BX       R0               ;; return
    429          #endif    
    430          
    431          /*$PAGE*/
    432          /*
    433          *********************************************************************************************************
    434          *                                          START MULTITASKING
    435          *
    436          * Description: This function is used to start the multitasking process which lets uC/OS-II manages the
    437          *              task that you have created.  Before you can call OSStart(), you MUST have called OSInit()
    438          *              and you MUST have created at least one task.
    439          *
    440          * Arguments  : none
    441          *
    442          * Returns    : none
    443          *
    444          * Note       : OSStartHighRdy() MUST:
    445          *                 a) Call OSTaskSwHook() then,
    446          *                 b) Set OSRunning to TRUE.
    447          *                 c) Load the context of the task pointed to by OSTCBHighRdy.
    448          *                 d_ Execute the task.
    449          *********************************************************************************************************
    450          */
    451          

   \                                 In segment CODE, align 4, keep-with-next
    452          void  OSStart (void)
    453          {
   \                     OSStart:
   \   00000000   00B5               PUSH     {LR}
    454              INT8U y;
    455              INT8U x;
    456          
    457          
    458              if (OSRunning == FALSE) {
   \   00000002   ....               LDR      R0,??DataTable51  ;; OSRunning
   \   00000004   0078               LDRB     R0,[R0, #+0]
   \   00000006   0028               CMP      R0,#+0
   \   00000008   20D1               BNE      ??OSStart_0
    459                  y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
    460                  x             = OSUnMapTbl[OSRdyTbl[y]];
    461                  OSPrioHighRdy = (INT8U)((y << 3) + x);
   \   0000000A   ....               LDR      R0,??DataTable41  ;; OSPrioHighRdy
   \   0000000C   ....               LDR      R1,??DataTable54  ;; OSRdyGrp
   \   0000000E   0978               LDRB     R1,[R1, #+0]
   \   00000010   ....               LDR      R2,??DataTable59  ;; OSUnMapTbl
   \   00000012   515C               LDRB     R1,[R2, R1]
   \   00000014   C900               LSLS     R1,R1,#+3
   \   00000016   ....               LDR      R2,??DataTable54  ;; OSRdyGrp
   \   00000018   1278               LDRB     R2,[R2, #+0]
   \   0000001A   ....               LDR      R3,??DataTable59  ;; OSUnMapTbl
   \   0000001C   9A5C               LDRB     R2,[R3, R2]
   \   0000001E   ....               LDR      R3,??DataTable65  ;; OSRdyTbl
   \   00000020   9A5C               LDRB     R2,[R3, R2]
   \   00000022   ....               LDR      R3,??DataTable59  ;; OSUnMapTbl
   \   00000024   9A5C               LDRB     R2,[R3, R2]
   \   00000026   8918               ADDS     R1,R1,R2
   \   00000028   0170               STRB     R1,[R0, #+0]
    462                  OSPrioCur     = OSPrioHighRdy;
   \   0000002A   ....               LDR      R0,??DataTable38  ;; OSPrioCur
   \   0000002C   ....               LDR      R1,??DataTable41  ;; OSPrioHighRdy
   \   0000002E   0978               LDRB     R1,[R1, #+0]
   \   00000030   0170               STRB     R1,[R0, #+0]
    463                  OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
   \   00000032   ....               LDR      R0,??DataTable44  ;; OSTCBHighRdy
   \   00000034   ....               LDR      R1,??DataTable41  ;; OSPrioHighRdy
   \   00000036   0978               LDRB     R1,[R1, #+0]
   \   00000038   8900               LSLS     R1,R1,#+2
   \   0000003A   ....               LDR      R2,??DataTable61  ;; OSTCBPrioTbl
   \   0000003C   5158               LDR      R1,[R2, R1]
   \   0000003E   0160               STR      R1,[R0, #+0]
    464                  OSTCBCur      = OSTCBHighRdy;
   \   00000040   ....               LDR      R0,??DataTable83  ;; OSTCBCur
   \   00000042   ....               LDR      R1,??DataTable44  ;; OSTCBHighRdy
   \   00000044   0968               LDR      R1,[R1, #+0]
   \   00000046   0160               STR      R1,[R0, #+0]
    465                  OSStartHighRdy();                            /* Execute target specific code to start task     */
   \   00000048   ........           _BLF     OSStartHighRdy,??OSStartHighRdy??rT
    466              }
    467          }
   \                     ??OSStart_0:
   \   0000004C   01BC               POP      {R0}
   \   0000004E   0047               BX       R0               ;; return
    468          /*$PAGE*/
    469          /*
    470          *********************************************************************************************************
    471          *                                        STATISTICS INITIALIZATION
    472          *
    473          * Description: This function is called by your application to establish CPU usage by first determining
    474          *              how high a 32-bit counter would count to in 1 second if no other tasks were to execute
    475          *              during that time.  CPU usage is then determined by a low priority task which keeps track
    476          *              of this 32-bit counter every second but this time, with other tasks running.  CPU usage is
    477          *              determined by:
    478          *
    479          *                                             OSIdleCtr
    480          *                 CPU Usage (%) = 100 * (1 - ------------)
    481          *                                            OSIdleCtrMax
    482          *
    483          * Arguments  : none
    484          *
    485          * Returns    : none
    486          *********************************************************************************************************
    487          */
    488          
    489          #if OS_TASK_STAT_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    490          void  OSStatInit (void)
    491          {
   \                     OSStatInit:
   \   00000000   00B5               PUSH     {LR}
    492          #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
    493              OS_CPU_SR  cpu_sr;
    494          #endif    
    495              
    496              
    497              OSTimeDly(2);                                /* Synchronize with clock tick                        */
   \   00000002   0220               MOVS     R0,#+2
   \   00000004   ........           _BLF     OSTimeDly,??OSTimeDly??rT
    498              OS_ENTER_CRITICAL();
   \   00000008   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    499              OSIdleCtr    = 0L;                           /* Clear idle counter                                 */
   \   0000000C   ....               LDR      R1,??DataTable47  ;; OSIdleCtr
   \   0000000E   0022               MOVS     R2,#+0
   \   00000010   0A60               STR      R2,[R1, #+0]
    500              OS_EXIT_CRITICAL();
   \   00000012   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    501              OSTimeDly(OS_TICKS_PER_SEC / 10);            /* Determine MAX. idle counter value for 1/10 second  */
   \   00000016   0A20               MOVS     R0,#+10
   \   00000018   ........           _BLF     OSTimeDly,??OSTimeDly??rT
    502              OS_ENTER_CRITICAL();
   \   0000001C   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
    503              OSIdleCtrMax = OSIdleCtr;                    /* Store maximum idle counter count in 1/10 second    */
   \   00000020   ....               LDR      R1,??DataTable46  ;; OSIdleCtrMax
   \   00000022   ....               LDR      R2,??DataTable47  ;; OSIdleCtr
   \   00000024   1268               LDR      R2,[R2, #+0]
   \   00000026   0A60               STR      R2,[R1, #+0]
    504              OSStatRdy    = TRUE;
   \   00000028   ....               LDR      R1,??DataTable48  ;; OSStatRdy
   \   0000002A   0122               MOVS     R2,#+1
   \   0000002C   0A70               STRB     R2,[R1, #+0]
    505              OS_EXIT_CRITICAL();
   \   0000002E   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
    506          }
   \   00000032   01BC               POP      {R0}
   \   00000034   0047               BX       R0               ;; return
    507          #endif
    508          /*$PAGE*/
    509          /*
    510          *********************************************************************************************************
    511          *                                         PROCESS SYSTEM TICK
    512          *
    513          * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
    514          *              as a 'clock tick').  This function should be called by the ticker ISR but, can also be
    515          *              called by a high priority task.
    516          *
    517          * Arguments  : none
    518          *
    519          * Returns    : none
    520          *********************************************************************************************************
    521          */
    522          

   \                                 In segment CODE, align 4, keep-with-next
    523          void  OSTimeTick (void)
    524          {
   \                     OSTimeTick:
   \   00000000   30B5               PUSH     {R4,R5,LR}
    525          #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register     */
    526              OS_CPU_SR  cpu_sr;
    527          #endif    
    528              OS_TCB    *ptcb;
    529              BOOLEAN    step;
    530          
    531          
    532          #if OS_TIME_TICK_HOOK_EN > 0
    533              OSTimeTickHook();                              

⌨️ 快捷键说明

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