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

📄 os_task.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
   1               		.file	"os_task.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:
 132               	.global	OSTaskChangePrio
 134               	OSTaskChangePrio:
   1:os/source/os_task.c **** /*
   2:os/source/os_task.c **** ***************************************************************************************************
   3:os/source/os_task.c **** *                                                uC/OS-II
   4:os/source/os_task.c **** *                                          The Real-Time Kernel
   5:os/source/os_task.c **** *                                            TASK MANAGEMENT
   6:os/source/os_task.c **** *
   7:os/source/os_task.c **** *                          (c) Copyright 1992-2001, Jean J. Labrosse, Weston, FL
   8:os/source/os_task.c **** *                                           All Rights Reserved
   9:os/source/os_task.c **** *
  10:os/source/os_task.c **** * File : OS_TASK.C
  11:os/source/os_task.c **** * By   : Jean J. Labrosse
  12:os/source/os_task.c **** ***************************************************************************************************
  13:os/source/os_task.c **** */
  14:os/source/os_task.c **** 
  15:os/source/os_task.c **** #ifndef  OS_MASTER_FILE
  16:os/source/os_task.c **** #include <include.h>
  17:os/source/os_task.c **** #endif
  18:os/source/os_task.c **** 
  19:os/source/os_task.c **** /*
  20:os/source/os_task.c **** ***************************************************************************************************
  21:os/source/os_task.c **** *                                        CHANGE PRIORITY OF A TASK
  22:os/source/os_task.c **** *
  23:os/source/os_task.c **** * Description: This function allows you to change the priority of a task dynamically.  Note that th
  24:os/source/os_task.c **** *              priority MUST be available.
  25:os/source/os_task.c **** *
  26:os/source/os_task.c **** * Arguments  : oldp     is the old priority
  27:os/source/os_task.c **** *
  28:os/source/os_task.c **** *              newp     is the new priority
  29:os/source/os_task.c **** *
  30:os/source/os_task.c **** * Returns    : OS_NO_ERR        is the call was successful
  31:os/source/os_task.c **** *              OS_PRIO_INVALID  if the priority you specify is higher that the maximum allowed
  32:os/source/os_task.c **** *                               (i.e. >= OS_LOWEST_PRIO)
  33:os/source/os_task.c **** *              OS_PRIO_EXIST    if the new priority already exist.
  34:os/source/os_task.c **** *              OS_PRIO_ERR      there is no task with the specified OLD priority (i.e. the OLD task
  35:os/source/os_task.c **** *                               not exist.
  36:os/source/os_task.c **** ***************************************************************************************************
  37:os/source/os_task.c **** */
  38:os/source/os_task.c **** 
  39:os/source/os_task.c **** #if OS_TASK_CHANGE_PRIO_EN > 0
  40:os/source/os_task.c **** INT8U  OSTaskChangePrio (INT8U oldprio, INT8U newprio)
  41:os/source/os_task.c **** {
 136               	.LM1:
 137               	/* prologue: frame size=0 */
 138 0000 BF92      		push r11
 139 0002 CF92      		push r12
 140 0004 DF92      		push r13
 141 0006 EF92      		push r14
 142 0008 FF92      		push r15
 143 000a 0F93      		push r16
 144 000c 1F93      		push r17
 145 000e CF93      		push r28
 146 0010 DF93      		push r29
 147               	/* prologue end (size=9) */
 148 0012 482F      		mov r20,r24
 149 0014 F62E      		mov r15,r22
  42:os/source/os_task.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
  43:os/source/os_task.c ****     OS_CPU_SR    cpu_sr;
  44:os/source/os_task.c **** #endif
  45:os/source/os_task.c **** 
  46:os/source/os_task.c **** #if OS_EVENT_EN > 0
  47:os/source/os_task.c ****     OS_EVENT    *pevent;
  48:os/source/os_task.c **** #endif
  49:os/source/os_task.c **** 
  50:os/source/os_task.c ****     OS_TCB      *ptcb;
  51:os/source/os_task.c ****     INT8U        x;
  52:os/source/os_task.c ****     INT8U        y;
  53:os/source/os_task.c ****     INT8U        bitx;
  54:os/source/os_task.c ****     INT8U        bity;
  55:os/source/os_task.c **** 
  56:os/source/os_task.c **** 
  57:os/source/os_task.c **** 
  58:os/source/os_task.c **** #if OS_ARG_CHK_EN > 0
  59:os/source/os_task.c ****     if ((oldprio >= OS_LOWEST_PRIO && oldprio != OS_PRIO_SELF)  ||
  60:os/source/os_task.c ****          newprio >= OS_LOWEST_PRIO) {
  61:os/source/os_task.c ****         return (OS_PRIO_INVALID);
  62:os/source/os_task.c ****     }
  63:os/source/os_task.c **** #endif
  64:os/source/os_task.c ****     OS_ENTER_CRITICAL();
 151               	.LM2:
 152               	/* #APP */
 153 0016 F894      		cli
  65:os/source/os_task.c ****     if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) {                 /* New priority must not already ex
 155               	.LM3:
 156               	/* #NOAPP */
 157 0018 262F      		mov r18,r22
 158 001a 3327      		clr r19
 159 001c D901      		movw r26,r18
 160 001e A20F      		add r26,r18
 161 0020 B31F      		adc r27,r19
 162 0022 A050      		subi r26,lo8(-(OSTCBPrioTbl))
 163 0024 B040      		sbci r27,hi8(-(OSTCBPrioTbl))
 164 0026 6D91      		ld r22,X+
 165 0028 7C91      		ld r23,X
 166 002a 1197      		sbiw r26,1
 167 002c 6115      		cp r22,__zero_reg__
 168 002e 7105      		cpc r23,__zero_reg__
 169 0030 21F0      		breq .L2
  66:os/source/os_task.c ****         OS_EXIT_CRITICAL();
 171               	.LM4:
 172               	/* #APP */
 173 0032 7894      		sei
  67:os/source/os_task.c ****         return (OS_PRIO_EXIST);
 175               	.LM5:
 176               	/* #NOAPP */
 177 0034 88E2      		ldi r24,lo8(40)
 178 0036 90E0      		ldi r25,hi8(40)
 179 0038 84C0      		rjmp .L1
 180               	.L2:
  68:os/source/os_task.c ****     } else {
  69:os/source/os_task.c ****         OSTCBPrioTbl[newprio] = (OS_TCB *)1;                    /* Reserve the entry to prevent oth
 182               	.LM6:
 183 003a 81E0      		ldi r24,lo8(1)
 184 003c 90E0      		ldi r25,hi8(1)
 185 003e 1196      		adiw r26,1
 186 0040 9C93      		st X,r25
 187 0042 8E93      		st -X,r24
  70:os/source/os_task.c ****         OS_EXIT_CRITICAL();
 189               	.LM7:
 190               	/* #APP */
 191 0044 7894      		sei
  71:os/source/os_task.c ****         y    = newprio >> 3;                                    /* Precompute to reduce INT. latenc
 193               	.LM8:
 194               	/* #NOAPP */
 195 0046 BF2C      		mov r11,r15
 196 0048 B694      		lsr r11
 197 004a B694      		lsr r11
 198 004c B694      		lsr r11
  72:os/source/os_task.c ****         bity = OSMapTbl[y];
 200               	.LM9:
 201 004e 0B2D      		mov r16,r11
 202 0050 1127      		clr r17
 203 0052 F801      		movw r30,r16
 204 0054 E050      		subi r30,lo8(-(OSMapTbl))
 205 0056 F040      		sbci r31,hi8(-(OSMapTbl))
 206 0058 D080      		ld r13,Z
  73:os/source/os_task.c ****         x    = newprio & 0x07;
 208               	.LM10:
 209 005a 87E0      		ldi r24,lo8(7)
 210 005c C82E      		mov r12,r24
 211 005e CF20      		and r12,r15
  74:os/source/os_task.c ****         bitx = OSMapTbl[x];
 213               	.LM11:
 214 0060 EC2D      		mov r30,r12
 215 0062 FF27      		clr r31
 216 0064 E050      		subi r30,lo8(-(OSMapTbl))
 217 0066 F040      		sbci r31,hi8(-(OSMapTbl))
 218 0068 E080      		ld r14,Z
  75:os/source/os_task.c ****         OS_ENTER_CRITICAL();
 220               	.LM12:
 221               	/* #APP */
 222 006a F894      		cli
  76:os/source/os_task.c ****         if (oldprio == OS_PRIO_SELF) {                          /* See if changing self            
 224               	.LM13:
 225               	/* #NOAPP */
 226 006c 4F3F      		cpi r20,lo8(-1)
 227 006e 29F4      		brne .L4
  77:os/source/os_task.c ****             oldprio = OSTCBCur->OSTCBPrio;                      /* Yes, get priority               
 229               	.LM14:
 230 0070 E091 0000 		lds r30,OSTCBCur
 231 0074 F091 0000 		lds r31,(OSTCBCur)+1
 232 0078 418D      		ldd r20,Z+25
 233               	.L4:
  78:os/source/os_task.c ****         }
  79:os/source/os_task.c ****         if ((ptcb = OSTCBPrioTbl[oldprio]) != (OS_TCB *)0) {    /* Task to change must exist       
 235               	.LM15:
 236 007a E42F      		mov r30,r20
 237 007c FF27      		clr r31
 238 007e EE0F      		add r30,r30
 239 0080 FF1F      		adc r31,r31
 240 0082 E050      		subi r30,lo8(-(OSTCBPrioTbl))
 241 0084 F040      		sbci r31,hi8(-(OSTCBPrioTbl))
 242 0086 C081      		ld r28,Z
 243 0088 D181      		ldd r29,Z+1
 244 008a 2097      		sbiw r28,0
 245 008c 09F4      		brne .+2
 246 008e 54C0      		rjmp .L5
  80:os/source/os_task.c ****             OSTCBPrioTbl[oldprio] = (OS_TCB *)0;                /* Remove TCB from old priority    
 248               	.LM16:
 249 0090 7183      		std Z+1,r23
 250 0092 6083      		st Z,r22
  81:os/source/os_task.c ****             if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00) {  /* If task is ready make it 
 252               	.LM17:
 253 0094 8B8D      		ldd r24,Y+27
 254 0096 482F      		mov r20,r24
 255 0098 5527      		clr r21
 256 009a FA01      		movw r30,r20
 257 009c E050      		subi r30,lo8(-(OSRdyTbl))
 258 009e F040      		sbci r31,hi8(-(OSRdyTbl))
 259 00a0 7081      		ld r23,Z
 260 00a2 9C8D      		ldd r25,Y+28
 261 00a4 872F      		mov r24,r23
 262 00a6 8923      		and r24,r25
 263 00a8 C9F0      		breq .L6
  82:os/source/os_task.c ****                 if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {
 265               	.LM18:
 266 00aa 892F      		mov r24,r25
 267 00ac 8095      		com r24
 268 00ae 8723      		and r24,r23
 269 00b0 8083      		st Z,r24
 270 00b2 8823      		tst r24
 271 00b4 39F4      		brne .L7
  83:os/source/os_task.c ****                     OSRdyGrp &= ~ptcb->OSTCBBitY;
 273               	.LM19:
 274 00b6 9D8D      		ldd r25,Y+29
 275 00b8 9095      		com r25
 276 00ba 8091 0000 		lds r24,OSRdyGrp
 277 00be 8923      		and r24,r25
 278 00c0 8093 0000 		sts OSRdyGrp,r24
 279               	.L7:
  84:os/source/os_task.c ****                 }
  85:os/source/os_task.c ****                 OSRdyGrp    |= bity;                            /* Make new priority ready to run  
 281               	.LM20:
 282 00c4 8091 0000 		lds r24,OSRdyGrp
 283 00c8 8D29      		or r24,r13
 284 00ca 8093 0000 		sts OSRdyGrp,r24
  86:os/source/os_task.c ****                 OSRdyTbl[y] |= bitx;
 286               	.LM21:
 287 00ce F801      		movw r30,r16

⌨️ 快捷键说明

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