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

📄 os_task.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
 288 00d0 E050      		subi r30,lo8(-(OSRdyTbl))
 289 00d2 F040      		sbci r31,hi8(-(OSRdyTbl))
 290 00d4 8081      		ld r24,Z
 291 00d6 8E29      		or r24,r14
 292 00d8 8083      		st Z,r24
 293 00da 1CC0      		rjmp .L8
 294               	.L6:
  87:os/source/os_task.c **** #if OS_EVENT_EN > 0
  88:os/source/os_task.c ****             } else {
  89:os/source/os_task.c ****                 if ((pevent = ptcb->OSTCBEventPtr) != (OS_EVENT *)0) { /* Remove from event wait li
 296               	.LM22:
 297 00dc AA89      		ldd r26,Y+18
 298 00de BB89      		ldd r27,Y+19
 299 00e0 1097      		sbiw r26,0
 300 00e2 C1F0      		breq .L8
  90:os/source/os_task.c ****                     if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
 302               	.LM23:
 303 00e4 FD01      		movw r30,r26
 304 00e6 E40F      		add r30,r20
 305 00e8 F51F      		adc r31,r21
 306 00ea 9095      		com r25
 307 00ec 8681      		ldd r24,Z+6
 308 00ee 8923      		and r24,r25
 309 00f0 8683      		std Z+6,r24
 310 00f2 8823      		tst r24
 311 00f4 31F4      		brne .L10
  91:os/source/os_task.c ****                         pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
 313               	.LM24:
 314 00f6 9D8D      		ldd r25,Y+29
 315 00f8 9095      		com r25
 316 00fa FD01      		movw r30,r26
 317 00fc 8181      		ldd r24,Z+1
 318 00fe 8923      		and r24,r25
 319 0100 8183      		std Z+1,r24
 320               	.L10:
  92:os/source/os_task.c ****                     }
  93:os/source/os_task.c ****                     pevent->OSEventGrp    |= bity;              /* Add new priority to wait list   
 322               	.LM25:
 323 0102 FD01      		movw r30,r26
 324 0104 8181      		ldd r24,Z+1
 325 0106 8D29      		or r24,r13
 326 0108 8183      		std Z+1,r24
  94:os/source/os_task.c ****                     pevent->OSEventTbl[y] |= bitx;
 328               	.LM26:
 329 010a E00F      		add r30,r16
 330 010c F11F      		adc r31,r17
 331 010e 8681      		ldd r24,Z+6
 332 0110 8E29      		or r24,r14
 333 0112 8683      		std Z+6,r24
 334               	.L8:
  95:os/source/os_task.c ****                 }
  96:os/source/os_task.c **** #endif
  97:os/source/os_task.c ****             }
  98:os/source/os_task.c ****             OSTCBPrioTbl[newprio] = ptcb;                       /* Place pointer to TCB @ new prior
 336               	.LM27:
 337 0114 220F      		add r18,r18
 338 0116 331F      		adc r19,r19
 339 0118 2050      		subi r18,lo8(-(OSTCBPrioTbl))
 340 011a 3040      		sbci r19,hi8(-(OSTCBPrioTbl))
 341 011c F901      		movw r30,r18
 342 011e D183      		std Z+1,r29
 343 0120 C083      		st Z,r28
  99:os/source/os_task.c ****             ptcb->OSTCBPrio       = newprio;                    /* Set new task priority           
 345               	.LM28:
 346 0122 F98E      		std Y+25,r15
 100:os/source/os_task.c ****             ptcb->OSTCBY          = y;
 348               	.LM29:
 349 0124 BB8E      		std Y+27,r11
 101:os/source/os_task.c ****             ptcb->OSTCBX          = x;
 351               	.LM30:
 352 0126 CA8E      		std Y+26,r12
 102:os/source/os_task.c ****             ptcb->OSTCBBitY       = bity;
 354               	.LM31:
 355 0128 DD8E      		std Y+29,r13
 103:os/source/os_task.c ****             ptcb->OSTCBBitX       = bitx;
 357               	.LM32:
 358 012a EC8E      		std Y+28,r14
 104:os/source/os_task.c ****             OS_EXIT_CRITICAL();
 360               	.LM33:
 361               	/* #APP */
 362 012c 7894      		sei
 105:os/source/os_task.c ****             OS_Sched();                                         /* Run highest priority task ready 
 364               	.LM34:
 365               	/* #NOAPP */
 366 012e 0E94 0000 		call OS_Sched
 106:os/source/os_task.c ****             return (OS_NO_ERR);
 368               	.LM35:
 369 0132 80E0      		ldi r24,lo8(0)
 370 0134 90E0      		ldi r25,hi8(0)
 371 0136 05C0      		rjmp .L1
 372               	.L5:
 107:os/source/os_task.c ****         } else {
 108:os/source/os_task.c ****             OSTCBPrioTbl[newprio] = (OS_TCB *)0;                /* Release the reserved prio.      
 374               	.LM36:
 375 0138 CD93      		st X+,r28
 376 013a DC93      		st X,r29
 109:os/source/os_task.c ****             OS_EXIT_CRITICAL();
 378               	.LM37:
 379               	/* #APP */
 380 013c 7894      		sei
 110:os/source/os_task.c ****             return (OS_PRIO_ERR);                               /* Task to change didn't exist     
 382               	.LM38:
 383               	/* #NOAPP */
 384 013e 89E2      		ldi r24,lo8(41)
 385 0140 90E0      		ldi r25,hi8(41)
 386               	.L1:
 387               	/* epilogue: frame size=0 */
 388 0142 DF91      		pop r29
 389 0144 CF91      		pop r28
 390 0146 1F91      		pop r17
 391 0148 0F91      		pop r16
 392 014a FF90      		pop r15
 393 014c EF90      		pop r14
 394 014e DF90      		pop r13
 395 0150 CF90      		pop r12
 396 0152 BF90      		pop r11
 397 0154 0895      		ret
 398               	/* epilogue end (size=10) */
 399               	/* function OSTaskChangePrio size 178 (159) */
 409               	.Lscope0:
 415               	.global	OSTaskCreate
 417               	OSTaskCreate:
 111:os/source/os_task.c ****         }
 112:os/source/os_task.c ****     }
 113:os/source/os_task.c **** }
 114:os/source/os_task.c **** #endif
 115:os/source/os_task.c **** /*$PAGE*/
 116:os/source/os_task.c **** /*
 117:os/source/os_task.c **** ***************************************************************************************************
 118:os/source/os_task.c **** *                                            CREATE A TASK
 119:os/source/os_task.c **** *
 120:os/source/os_task.c **** * Description: This function is used to have uC/OS-II manage the execution of a task.  Tasks can ei
 121:os/source/os_task.c **** *              be created prior to the start of multitasking or by a running task.  A task cannot b
 122:os/source/os_task.c **** *              created by an ISR.
 123:os/source/os_task.c **** *
 124:os/source/os_task.c **** * Arguments  : task     is a pointer to the task's code
 125:os/source/os_task.c **** *
 126:os/source/os_task.c **** *              pdata    is a pointer to an optional data area which can be used to pass parameters 
 127:os/source/os_task.c **** *                       the task when the task first executes.  Where the task is concerned it thin
 128:os/source/os_task.c **** *                       it was invoked and passed the argument 'pdata' as follows:
 129:os/source/os_task.c **** *
 130:os/source/os_task.c **** *                           void Task (void *pdata)
 131:os/source/os_task.c **** *                           {
 132:os/source/os_task.c **** *                               for (;;) {
 133:os/source/os_task.c **** *                                   Task code;
 134:os/source/os_task.c **** *                               }
 135:os/source/os_task.c **** *                           }
 136:os/source/os_task.c **** *
 137:os/source/os_task.c **** *              ptos     is a pointer to the task's top of stack.  If the configuration constant
 138:os/source/os_task.c **** *                       OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from
 139:os/source/os_task.c **** *                       memory to low memory).  'pstk' will thus point to the highest (valid) memor
 140:os/source/os_task.c **** *                       location of the stack.  If OS_STK_GROWTH is set to 0, 'pstk' will point to 
 141:os/source/os_task.c **** *                       lowest memory location of the stack and the stack will grow with increasing
 142:os/source/os_task.c **** *                       memory locations.
 143:os/source/os_task.c **** *
 144:os/source/os_task.c **** *              prio     is the task's priority.  A unique priority MUST be assigned to each task an
 145:os/source/os_task.c **** *                       lower the number, the higher the priority.
 146:os/source/os_task.c **** *
 147:os/source/os_task.c **** * Returns    : OS_NO_ERR        if the function was successful.
 148:os/source/os_task.c **** *              OS_PRIO_EXIT     if the task priority already exist
 149:os/source/os_task.c **** *                               (each task MUST have a unique priority).
 150:os/source/os_task.c **** *              OS_PRIO_INVALID  if the priority you specify is higher that the maximum allowed
 151:os/source/os_task.c **** *                               (i.e. >= OS_LOWEST_PRIO)
 152:os/source/os_task.c **** ***************************************************************************************************
 153:os/source/os_task.c **** */
 154:os/source/os_task.c **** 
 155:os/source/os_task.c **** #if OS_TASK_CREATE_EN > 0
 156:os/source/os_task.c **** INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
 157:os/source/os_task.c **** {
 419               	.LM39:
 420               	/* prologue: frame size=0 */
 421 0156 7F92      		push r7
 422 0158 8F92      		push r8
 423 015a 9F92      		push r9
 424 015c AF92      		push r10
 425 015e BF92      		push r11
 426 0160 CF92      		push r12
 427 0162 DF92      		push r13
 428 0164 EF92      		push r14
 429 0166 FF92      		push r15
 430 0168 0F93      		push r16
 431 016a 1F93      		push r17
 432 016c CF93      		push r28
 433 016e DF93      		push r29
 434               	/* prologue end (size=13) */
 435 0170 FC01      		movw r30,r24
 436 0172 722E      		mov r7,r18
 158:os/source/os_task.c **** #if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register           
 159:os/source/os_task.c ****     OS_CPU_SR  cpu_sr;
 160:os/source/os_task.c **** #endif
 161:os/source/os_task.c ****     OS_STK    *psp;
 162:os/source/os_task.c ****     INT8U      err;
 163:os/source/os_task.c **** 
 164:os/source/os_task.c **** 
 165:os/source/os_task.c **** #if OS_ARG_CHK_EN > 0
 166:os/source/os_task.c ****     if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range       
 167:os/source/os_task.c ****         return (OS_PRIO_INVALID);
 168:os/source/os_task.c ****     }
 169:os/source/os_task.c **** #endif
 170:os/source/os_task.c ****     OS_ENTER_CRITICAL();
 438               	.LM40:
 439               	/* #APP */
 440 0174 F894      		cli
 171:os/source/os_task.c ****     if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priori
 442               	.LM41:
 443               	/* #NOAPP */
 444 0176 822E      		mov r8,r18
 445 0178 9924      		clr r9
 446 017a 880C      		add r8,r8
 447 017c 991C      		adc r9,r9
 448 017e 80E0      		ldi r24,lo8(OSTCBPrioTbl)
 449 0180 90E0      		ldi r25,hi8(OSTCBPrioTbl)
 450 0182 880E      		add r8,r24
 451 0184 991E      		adc r9,r25
 452 0186 D401      		movw r26,r8
 453 0188 CD91      		ld r28,X+
 454 018a DC91      		ld r29,X
 455 018c 1197      		sbiw r26,1
 456 018e 2097      		sbiw r28,0
 457 0190 69F5      		brne .L13
 172:os/source/os_task.c ****         OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing .
 459               	.LM42:
 460 0192 81E0      		ldi r24,lo8(1)
 461 0194 90E0      		ldi r25,hi8(1)
 462 0196 8D93      		st X+,r24
 463 0198 9C93      		st X,r25
 173:os/source/os_task.c ****                                              /* ... the same thing until task is created.          
 174:os/source/os_task.c ****         OS_EXIT_CRITICAL();
 465               	.LM43:
 466               	/* #APP */
 467 019a 7894      		sei

⌨️ 快捷键说明

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