os_time.lst

来自「称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可」· LST 代码 · 共 748 行 · 第 1/3 页

LST
748
字号
   1               		.file	"os_time.c"
   2               		.arch atmega128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 108               	.global	OSTimeDly
 110               	OSTimeDly:
   1:../OSsrc/os_time.c **** /*
   2:../OSsrc/os_time.c **** ***************************************************************************************************
   3:../OSsrc/os_time.c **** *                                                uC/OS-II
   4:../OSsrc/os_time.c **** *                                          The Real-Time Kernel
   5:../OSsrc/os_time.c **** *                                             TIME MANAGEMENT
   6:../OSsrc/os_time.c **** *
   7:../OSsrc/os_time.c **** *                          (c) Copyright 1992-2007, Jean J. Labrosse, Weston, FL
   8:../OSsrc/os_time.c **** *                                           All Rights Reserved
   9:../OSsrc/os_time.c **** *
  10:../OSsrc/os_time.c **** * File    : OS_TIME.C
  11:../OSsrc/os_time.c **** * By      : Jean J. Labrosse
  12:../OSsrc/os_time.c **** * Version : V2.85
  13:../OSsrc/os_time.c **** *
  14:../OSsrc/os_time.c **** * LICENSING TERMS:
  15:../OSsrc/os_time.c **** * ---------------
  16:../OSsrc/os_time.c **** *   uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful re
  17:../OSsrc/os_time.c **** * If you plan on using  uC/OS-II  in a commercial product you need to contact Micri祄 to properly l
  18:../OSsrc/os_time.c **** * its use in your product. We provide ALL the source code for your convenience and to help you expe
  19:../OSsrc/os_time.c **** * uC/OS-II.   The fact that the  source is provided does  NOT  mean that you can use it without  pa
  20:../OSsrc/os_time.c **** * licensing fee.
  21:../OSsrc/os_time.c **** ***************************************************************************************************
  22:../OSsrc/os_time.c **** */
  23:../OSsrc/os_time.c **** 
  24:../OSsrc/os_time.c **** #ifndef  OS_MASTER_FILE
  25:../OSsrc/os_time.c **** #include <ucos_ii.h>
  26:../OSsrc/os_time.c **** #endif
  27:../OSsrc/os_time.c **** 
  28:../OSsrc/os_time.c **** /*
  29:../OSsrc/os_time.c **** ***************************************************************************************************
  30:../OSsrc/os_time.c **** *                                DELAY TASK 'n' TICKS   (n from 0 to 65535)
  31:../OSsrc/os_time.c **** *
  32:../OSsrc/os_time.c **** * Description: This function is called to delay execution of the currently running task until the
  33:../OSsrc/os_time.c **** *              specified number of system ticks expires.  This, of course, directly equates to dela
  34:../OSsrc/os_time.c **** *              the current task for some time to expire.  No delay will result If the specified del
  35:../OSsrc/os_time.c **** *              0.  If the specified delay is greater than 0 then, a context switch will result.
  36:../OSsrc/os_time.c **** *
  37:../OSsrc/os_time.c **** * Arguments  : ticks     is the time delay that the task will be suspended in number of clock 'tick
  38:../OSsrc/os_time.c **** *                        Note that by specifying 0, the task will not be delayed.
  39:../OSsrc/os_time.c **** *
  40:../OSsrc/os_time.c **** * Returns    : none
  41:../OSsrc/os_time.c **** ***************************************************************************************************
  42:../OSsrc/os_time.c **** */
  43:../OSsrc/os_time.c **** 
  44:../OSsrc/os_time.c **** void  OSTimeDly (INT16U ticks)
  45:../OSsrc/os_time.c **** {
 112               	.LM1:
 113               	/* prologue: frame size=0 */
 114 0000 CF93      		push r28
 115 0002 DF93      		push r29
 116               	/* prologue end (size=2) */
 117 0004 9C01      		movw r18,r24
  46:../OSsrc/os_time.c ****     INT8U      y;
  47:../OSsrc/os_time.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
  48:../OSsrc/os_time.c ****     OS_CPU_SR  cpu_sr = 0;
  49:../OSsrc/os_time.c **** #endif
  50:../OSsrc/os_time.c **** 
  51:../OSsrc/os_time.c **** 
  52:../OSsrc/os_time.c **** 
  53:../OSsrc/os_time.c ****     if (OSIntNesting > 0) {                      /* See if trying to call from an ISR              
 119               	.LM2:
 120 0006 8091 0000 		lds r24,OSIntNesting
 121 000a 8823      		tst r24
 122 000c 11F5      		brne .L1
  54:../OSsrc/os_time.c ****         return;
  55:../OSsrc/os_time.c ****     }
  56:../OSsrc/os_time.c ****     if (ticks > 0) {                             /* 0 means no delay!                              
 124               	.LM3:
 125 000e 2115      		cp r18,__zero_reg__
 126 0010 3105      		cpc r19,__zero_reg__
 127 0012 F9F0      		breq .L1
  57:../OSsrc/os_time.c ****         OS_ENTER_CRITICAL();
 129               	.LM4:
 130               	/* #APP */
 131 0014 F894      		cli
  58:../OSsrc/os_time.c ****         y            =  OSTCBCur->OSTCBY;        /* Delay current task                             
 133               	.LM5:
 134               	/* #NOAPP */
 135 0016 A091 0000 		lds r26,OSTCBCur
 136 001a B091 0000 		lds r27,(OSTCBCur)+1
 137 001e ED01      		movw r28,r26
 138 0020 8D8D      		ldd r24,Y+29
  59:../OSsrc/os_time.c ****         OSRdyTbl[y] &= ~OSTCBCur->OSTCBBitX;
 140               	.LM6:
 141 0022 E82F      		mov r30,r24
 142 0024 FF27      		clr r31
 143 0026 E050      		subi r30,lo8(-(OSRdyTbl))
 144 0028 F040      		sbci r31,hi8(-(OSRdyTbl))
 145 002a 9E8D      		ldd r25,Y+30
 146 002c 9095      		com r25
 147 002e 8081      		ld r24,Z
 148 0030 8923      		and r24,r25
 149 0032 8083      		st Z,r24
  60:../OSsrc/os_time.c ****         if (OSRdyTbl[y] == 0) {
 151               	.LM7:
 152 0034 8823      		tst r24
 153 0036 39F4      		brne .L4
  61:../OSsrc/os_time.c ****             OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
 155               	.LM8:
 156 0038 9F8D      		ldd r25,Y+31
 157 003a 9095      		com r25
 158 003c 8091 0000 		lds r24,OSRdyGrp
 159 0040 8923      		and r24,r25
 160 0042 8093 0000 		sts OSRdyGrp,r24
 161               	.L4:
  62:../OSsrc/os_time.c ****         }
  63:../OSsrc/os_time.c ****         OSTCBCur->OSTCBDly = ticks;              /* Load ticks in TCB                              
 163               	.LM9:
 164 0046 FD01      		movw r30,r26
 165 0048 308F      		std Z+24,r19
 166 004a 278B      		std Z+23,r18
  64:../OSsrc/os_time.c ****         OS_EXIT_CRITICAL();
 168               	.LM10:
 169               	/* #APP */
 170 004c 7894      		sei
  65:../OSsrc/os_time.c ****         OS_Sched();                              /* Find next task to run!                         
 172               	.LM11:
 173               	/* #NOAPP */
 174 004e 0E94 0000 		call OS_Sched
 175               	.L1:
 176               	/* epilogue: frame size=0 */
 177 0052 DF91      		pop r29
 178 0054 CF91      		pop r28
 179 0056 0895      		ret
 180               	/* epilogue end (size=3) */
 181               	/* function OSTimeDly size 46 (41) */
 186               	.Lscope0:
 192               	.global	OSTimeDlyHMSM
 194               	OSTimeDlyHMSM:
  66:../OSsrc/os_time.c ****     }
  67:../OSsrc/os_time.c **** }
  68:../OSsrc/os_time.c **** /*$PAGE*/
  69:../OSsrc/os_time.c **** /*
  70:../OSsrc/os_time.c **** ***************************************************************************************************
  71:../OSsrc/os_time.c **** *                                     DELAY TASK FOR SPECIFIED TIME
  72:../OSsrc/os_time.c **** *
  73:../OSsrc/os_time.c **** * Description: This function is called to delay execution of the currently running task until some 
  74:../OSsrc/os_time.c **** *              expires.  This call allows you to specify the delay time in HOURS, MINUTES, SECONDS 
  75:../OSsrc/os_time.c **** *              MILLISECONDS instead of ticks.
  76:../OSsrc/os_time.c **** *
  77:../OSsrc/os_time.c **** * Arguments  : hours     specifies the number of hours that the task will be delayed (max. is 255)
  78:../OSsrc/os_time.c **** *              minutes   specifies the number of minutes (max. 59)
  79:../OSsrc/os_time.c **** *              seconds   specifies the number of seconds (max. 59)
  80:../OSsrc/os_time.c **** *              milli     specifies the number of milliseconds (max. 999)
  81:../OSsrc/os_time.c **** *
  82:../OSsrc/os_time.c **** * Returns    : OS_ERR_NONE
  83:../OSsrc/os_time.c **** *              OS_ERR_TIME_INVALID_MINUTES
  84:../OSsrc/os_time.c **** *              OS_ERR_TIME_INVALID_SECONDS
  85:../OSsrc/os_time.c **** *              OS_ERR_TIME_INVALID_MS
  86:../OSsrc/os_time.c **** *              OS_ERR_TIME_ZERO_DLY
  87:../OSsrc/os_time.c **** *              OS_ERR_TIME_DLY_ISR
  88:../OSsrc/os_time.c **** *
  89:../OSsrc/os_time.c **** * Note(s)    : The resolution on the milliseconds depends on the tick rate.  For example, you can't
  90:../OSsrc/os_time.c **** *              a 10 mS delay if the ticker interrupts every 100 mS.  In this case, the delay would 
  91:../OSsrc/os_time.c **** *              set to 0.  The actual delay is rounded to the nearest tick.
  92:../OSsrc/os_time.c **** ***************************************************************************************************
  93:../OSsrc/os_time.c **** */
  94:../OSsrc/os_time.c **** 
  95:../OSsrc/os_time.c **** #if OS_TIME_DLY_HMSM_EN > 0
  96:../OSsrc/os_time.c **** INT8U  OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms)
  97:../OSsrc/os_time.c **** {
 196               	.LM12:
 197               	/* prologue: frame size=0 */
 198 0058 AF92      		push r10
 199 005a BF92      		push r11
 200 005c CF92      		push r12
 201 005e DF92      		push r13
 202 0060 EF92      		push r14
 203 0062 FF92      		push r15
 204 0064 0F93      		push r16
 205 0066 1F93      		push r17
 206 0068 CF93      		push r28
 207 006a DF93      		push r29
 208               	/* prologue end (size=10) */
 209 006c 982F      		mov r25,r24
 210 006e A62E      		mov r10,r22
 211 0070 D42E      		mov r13,r20
 212 0072 E901      		movw r28,r18
  98:../OSsrc/os_time.c ****     INT32U ticks;
  99:../OSsrc/os_time.c ****     INT16U loops;
 100:../OSsrc/os_time.c **** 
 101:../OSsrc/os_time.c **** 
 102:../OSsrc/os_time.c ****     if (OSIntNesting > 0) {                      /* See if trying to call from an ISR              
 214               	.LM13:
 215 0074 8091 0000 		lds r24,OSIntNesting
 216 0078 8823      		tst r24
 217 007a 19F0      		breq .L6
 103:../OSsrc/os_time.c ****         return (OS_ERR_TIME_DLY_ISR);
 219               	.LM14:
 220 007c 85E5      		ldi r24,lo8(85)
 221 007e 90E0      		ldi r25,hi8(85)
 222 0080 82C0      		rjmp .L5
 223               	.L6:
 104:../OSsrc/os_time.c ****     }
 105:../OSsrc/os_time.c **** #if OS_ARG_CHK_EN > 0
 106:../OSsrc/os_time.c ****     if (hours == 0) {
 225               	.LM15:
 226 0082 9923      		tst r25
 227 0084 49F4      		brne .L7
 107:../OSsrc/os_time.c ****         if (minutes == 0) {
 229               	.LM16:
 230 0086 6623      		tst r22
 231 0088 39F4      		brne .L7
 108:../OSsrc/os_time.c ****             if (seconds == 0) {
 233               	.LM17:
 234 008a 4423      		tst r20
 235 008c 59F4      		brne .L11
 109:../OSsrc/os_time.c ****                 if (ms == 0) {
 237               	.LM18:
 238 008e 232B      		or r18,r19
 239 0090 79F4      		brne .L12
 110:../OSsrc/os_time.c ****                     return (OS_ERR_TIME_ZERO_DLY);
 241               	.LM19:
 242 0092 84E5      		ldi r24,lo8(84)
 243 0094 90E0      		ldi r25,hi8(84)
 244 0096 77C0      		rjmp .L5
 245               	.L7:
 111:../OSsrc/os_time.c ****                 }
 112:../OSsrc/os_time.c ****             }
 113:../OSsrc/os_time.c ****         }
 114:../OSsrc/os_time.c ****     }
 115:../OSsrc/os_time.c ****     if (minutes > 59) {
 247               	.LM20:
 248 0098 8BE3      		ldi r24,lo8(59)
 249 009a 8A15      		cp r24,r10
 250 009c 18F4      		brsh .L11
 116:../OSsrc/os_time.c ****         return (OS_ERR_TIME_INVALID_MINUTES);    /* Validate arguments to be within range          
 252               	.LM21:
 253 009e 81E5      		ldi r24,lo8(81)
 254 00a0 90E0      		ldi r25,hi8(81)
 255 00a2 71C0      		rjmp .L5
 256               	.L11:
 117:../OSsrc/os_time.c ****     }
 118:../OSsrc/os_time.c ****     if (seconds > 59) {
 258               	.LM22:
 259 00a4 ABE3      		ldi r26,lo8(59)
 260 00a6 AD15      		cp r26,r13
 261 00a8 18F4      		brsh .L12

⌨️ 快捷键说明

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