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

📄 os_task.lst

📁 ARM仿真案例
💻 LST
📖 第 1 页 / 共 5 页
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION    21/Jul/2006  22:36:57 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
# Time limited license: 21 days left                                         #
#                                                                            #
#    Cpu mode        =  interwork                                            #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  E:\Project\ucos-ii\pwm\uCOS-II\os_task.c             #
#    Command line    =  E:\Project\ucos-ii\pwm\uCOS-II\os_task.c -lCN        #
#                       E:\Project\ucos-ii\pwm\Debug\List\ -lA               #
#                       E:\Project\ucos-ii\pwm\Debug\List\ -o                #
#                       E:\Project\ucos-ii\pwm\Debug\Obj\ -z3 --no_cse       #
#                       --no_unroll --no_inline --no_code_motion --no_tbaa   #
#                       --no_clustering --no_scheduling --debug --cpu_mode   #
#                       thumb --endian little --cpu ARM7TDMI-S               #
#                       --stack_align 4 --interwork -e --fpu None            #
#                       --dlib_config "E:\Program Files\IAR                  #
#                       Systems\Embedded Workbench 4.0                       #
#                       Evaluation\ARM\LIB\dl4tptinl8n.h" -I                 #
#                       E:\Project\ucos-ii\pwm\ -I                           #
#                       E:\Project\ucos-ii\pwm\App\ -I                       #
#                       E:\Project\ucos-ii\pwm\ARM\ -I                       #
#                       E:\Project\ucos-ii\pwm\BSP\ -I                       #
#                       E:\Project\ucos-ii\pwm\uCOS-II\ -I "E:\Program       #
#                       Files\IAR Systems\Embedded Workbench 4.0             #
#                       Evaluation\ARM\INC\"                                 #
#    List file       =  E:\Project\ucos-ii\pwm\Debug\List\os_task.lst        #
#    Object file     =  E:\Project\ucos-ii\pwm\Debug\Obj\os_task.r79         #
#                                                                            #
#                                                                            #
##############################################################################

E:\Project\ucos-ii\pwm\uCOS-II\os_task.c
      1          /*
      2          *********************************************************************************************************
      3          *                                                uC/OS-II
      4          *                                          The Real-Time Kernel
      5          *                                            TASK MANAGEMENT
      6          *
      7          *                          (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
      8          *                                           All Rights Reserved
      9          *
     10          * File : OS_TASK.C
     11          * By   : Jean J. Labrosse
     12          *********************************************************************************************************
     13          */
     14          
     15          #ifndef  OS_MASTER_FILE
     16          #include <ucos_ii.h>
     17          #endif
     18          
     19          /*
     20          *********************************************************************************************************
     21          *                                        CHANGE PRIORITY OF A TASK
     22          *
     23          * Description: This function allows you to change the priority of a task dynamically.  Note that the new
     24          *              priority MUST be available.
     25          *
     26          * Arguments  : oldp     is the old priority
     27          *
     28          *              newp     is the new priority
     29          *
     30          * Returns    : OS_NO_ERR        is the call was successful
     31          *              OS_PRIO_INVALID  if the priority you specify is higher that the maximum allowed
     32          *                               (i.e. >= OS_LOWEST_PRIO)
     33          *              OS_PRIO_EXIST    if the new priority already exist.
     34          *              OS_PRIO_ERR      there is no task with the specified OLD priority (i.e. the OLD task does
     35          *                               not exist.
     36          *********************************************************************************************************
     37          */
     38          
     39          #if OS_TASK_CHANGE_PRIO_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
     40          INT8U  OSTaskChangePrio (INT8U oldprio, INT8U newprio)
     41          {
   \                     OSTaskChangePrio:
   \   00000000   F0B5               PUSH     {R4-R7,LR}
   \   00000002   81B0               SUB      SP,SP,#+4
   \   00000004   0400               MOVS     R4,R0
   \   00000006   0D00               MOVS     R5,R1
     42          #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
     43              OS_CPU_SR    cpu_sr;
     44          #endif
     45          
     46          #if OS_EVENT_EN > 0
     47              OS_EVENT    *pevent;
     48          #endif
     49          
     50              OS_TCB      *ptcb;
     51              INT8U        x;
     52              INT8U        y;
     53              INT8U        bitx;
     54              INT8U        bity;
     55              INT8U        y_old;
     56          
     57          
     58          #if OS_ARG_CHK_EN > 0
     59              if (oldprio >= OS_LOWEST_PRIO) {
   \   00000008   3F2C               CMP      R4,#+63
   \   0000000A   03D3               BCC      ??OSTaskChangePrio_0
     60          	    if (oldprio != OS_PRIO_SELF) {
   \   0000000C   FF2C               CMP      R4,#+255
   \   0000000E   01D0               BEQ      ??OSTaskChangePrio_0
     61                      return (OS_PRIO_INVALID);
   \   00000010   2A20               MOVS     R0,#+42
   \   00000012   B3E0               B        ??OSTaskChangePrio_1
     62          		}
     63          	}
     64              if (newprio >= OS_LOWEST_PRIO) {
   \                     ??OSTaskChangePrio_0:
   \   00000014   3F2D               CMP      R5,#+63
   \   00000016   01D3               BCC      ??OSTaskChangePrio_2
     65                  return (OS_PRIO_INVALID);
   \   00000018   2A20               MOVS     R0,#+42
   \   0000001A   AFE0               B        ??OSTaskChangePrio_1
     66              }
     67          #endif
     68              OS_ENTER_CRITICAL();
   \                     ??OSTaskChangePrio_2:
   \   0000001C   ........           _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
     69              if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) {                 /* New priority must not already exist */
   \   00000020   2D06               LSLS     R5,R5,#+24       ;; ZeroExtS R5,R5,#+24,#+24
   \   00000022   2D0E               LSRS     R5,R5,#+24
   \   00000024   0421               MOVS     R1,#+4
   \   00000026   6943               MULS     R1,R5,R1
   \   00000028   ....               LDR      R2,??DataTable26  ;; OSTCBPrioTbl
   \   0000002A   5158               LDR      R1,[R2, R1]
   \   0000002C   0029               CMP      R1,#+0
   \   0000002E   03D0               BEQ      ??OSTaskChangePrio_3
     70                  OS_EXIT_CRITICAL();
   \   00000030   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
     71                  return (OS_PRIO_EXIST);
   \   00000034   2820               MOVS     R0,#+40
   \   00000036   A1E0               B        ??OSTaskChangePrio_1
     72              } 
     73              if (oldprio == OS_PRIO_SELF) {                              /* See if changing self                */
   \                     ??OSTaskChangePrio_3:
   \   00000038   FF2C               CMP      R4,#+255
   \   0000003A   03D1               BNE      ??OSTaskChangePrio_4
     74                  oldprio = OSTCBCur->OSTCBPrio;                          /* Yes, get priority                   */
   \   0000003C   ....               LDR      R1,??DataTable1  ;; OSTCBCur
   \   0000003E   0968               LDR      R1,[R1, #+0]
   \   00000040   2D31               ADDS     R1,R1,#+45
   \   00000042   0C78               LDRB     R4,[R1, #+0]
     75              }
     76              ptcb = OSTCBPrioTbl[oldprio];
   \                     ??OSTaskChangePrio_4:
   \   00000044   2406               LSLS     R4,R4,#+24       ;; ZeroExtS R4,R4,#+24,#+24
   \   00000046   240E               LSRS     R4,R4,#+24
   \   00000048   0421               MOVS     R1,#+4
   \   0000004A   6143               MULS     R1,R4,R1
   \   0000004C   ....               LDR      R2,??DataTable26  ;; OSTCBPrioTbl
   \   0000004E   5158               LDR      R1,[R2, R1]
     77              if (ptcb == (OS_TCB *)0) {                                  /* Does task to change exist?          */
   \   00000050   0029               CMP      R1,#+0
   \   00000052   03D1               BNE      ??OSTaskChangePrio_5
     78                  OS_EXIT_CRITICAL();                                     /* No, can't change its priority!      */
   \   00000054   ........           _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
     79                  return (OS_PRIO_ERR);
   \   00000058   2920               MOVS     R0,#+41
   \   0000005A   8FE0               B        ??OSTaskChangePrio_1
     80              }                                       
     81              y                     = newprio >> 3;                       /* Yes, compute new TCB fields         */
   \                     ??OSTaskChangePrio_5:
   \   0000005C   2A00               MOVS     R2,R5
   \   0000005E   1206               LSLS     R2,R2,#+24       ;; ZeroExtS R2,R2,#+24,#+24
   \   00000060   120E               LSRS     R2,R2,#+24
   \   00000062   D208               LSRS     R2,R2,#+3
     82              bity                  = OSMapTbl[y];
   \   00000064   6B46               MOV      R3,SP
   \   00000066   1206               LSLS     R2,R2,#+24       ;; ZeroExtS R2,R2,#+24,#+24
   \   00000068   120E               LSRS     R2,R2,#+24
   \   0000006A   464E               LDR      R6,??OSTaskChangePrio_6  ;; OSMapTbl
   \   0000006C   B65C               LDRB     R6,[R6, R2]
   \   0000006E   5E70               STRB     R6,[R3, #+1]
     83              x                     = newprio & 0x07;
   \   00000070   6B46               MOV      R3,SP
   \   00000072   6E07               LSLS     R6,R5,#+29       ;; ZeroExtS R6,R5,#+29,#+29
   \   00000074   760F               LSRS     R6,R6,#+29
   \   00000076   9E70               STRB     R6,[R3, #+2]
     84              bitx                  = OSMapTbl[x];
   \   00000078   6B46               MOV      R3,SP
   \   0000007A   6E46               MOV      R6,SP
   \   0000007C   B678               LDRB     R6,[R6, #+2]
   \   0000007E   414F               LDR      R7,??OSTaskChangePrio_6  ;; OSMapTbl
   \   00000080   BE5D               LDRB     R6,[R7, R6]
   \   00000082   1E70               STRB     R6,[R3, #+0]
     85              OSTCBPrioTbl[oldprio] = (OS_TCB *)0;                        /* Remove TCB from old priority        */
   \   00000084   0423               MOVS     R3,#+4
   \   00000086   5C43               MULS     R4,R3,R4
   \   00000088   ....               LDR      R3,??DataTable26  ;; OSTCBPrioTbl
   \   0000008A   0026               MOVS     R6,#+0
   \   0000008C   1E51               STR      R6,[R3, R4]
     86              OSTCBPrioTbl[newprio] = ptcb;                               /* Place pointer to TCB @ new priority */
   \   0000008E   2D06               LSLS     R5,R5,#+24       ;; ZeroExtS R5,R5,#+24,#+24
   \   00000090   2D0E               LSRS     R5,R5,#+24
   \   00000092   0423               MOVS     R3,#+4
   \   00000094   6B43               MULS     R3,R5,R3
   \   00000096   ....               LDR      R4,??DataTable26  ;; OSTCBPrioTbl
   \   00000098   E150               STR      R1,[R4, R3]
     87              y_old                 = ptcb->OSTCBY;

⌨️ 快捷键说明

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