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

📄 os_sem.lst

📁 称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可能已有人上传类似的了
💻 LST
📖 第 1 页 / 共 5 页
字号:
 451               	.LM63:
 452 0148 05C0      		rjmp .L9
 453               	.L25:
 237:../OSsrc/os_sem.c **** 
 238:../OSsrc/os_sem.c ****         default:
 239:../OSsrc/os_sem.c ****              OS_EXIT_CRITICAL();
 455               	.LM64:
 456               	/* #APP */
 457 014a 7894      		sei
 240:../OSsrc/os_sem.c ****              *perr                  = OS_ERR_INVALID_OPT;
 459               	.LM65:
 460               	/* #NOAPP */
 461 014c 87E0      		ldi r24,lo8(7)
 462               	.L28:
 463 014e F801      		movw r30,r16
 464 0150 8083      		st Z,r24
 465               	.L29:
 241:../OSsrc/os_sem.c ****              pevent_return          = pevent;
 467               	.LM66:
 468 0152 CE01      		movw r24,r28
 469               	.L9:
 470               	/* epilogue: frame size=0 */
 471 0154 DF91      		pop r29
 472 0156 CF91      		pop r28
 473 0158 1F91      		pop r17
 474 015a 0F91      		pop r16
 475 015c FF90      		pop r15
 476 015e 0895      		ret
 477               	/* epilogue end (size=6) */
 478               	/* function OSSemDel size 118 (107) */
 484               	.Lscope2:
 489               	.global	OSSemPend
 491               	OSSemPend:
 242:../OSsrc/os_sem.c ****              break;
 243:../OSsrc/os_sem.c ****     }
 244:../OSsrc/os_sem.c ****     return (pevent_return);
 245:../OSsrc/os_sem.c **** }
 246:../OSsrc/os_sem.c **** #endif
 247:../OSsrc/os_sem.c **** 
 248:../OSsrc/os_sem.c **** /*$PAGE*/
 249:../OSsrc/os_sem.c **** /*
 250:../OSsrc/os_sem.c **** ***************************************************************************************************
 251:../OSsrc/os_sem.c **** *                                           PEND ON SEMAPHORE
 252:../OSsrc/os_sem.c **** *
 253:../OSsrc/os_sem.c **** * Description: This function waits for a semaphore.
 254:../OSsrc/os_sem.c **** *
 255:../OSsrc/os_sem.c **** * Arguments  : pevent        is a pointer to the event control block associated with the desired
 256:../OSsrc/os_sem.c **** *                            semaphore.
 257:../OSsrc/os_sem.c **** *
 258:../OSsrc/os_sem.c **** *              timeout       is an optional timeout period (in clock ticks).  If non-zero, your tas
 259:../OSsrc/os_sem.c **** *                            wait for the resource up to the amount of time specified by this argum
 260:../OSsrc/os_sem.c **** *                            If you specify 0, however, your task will wait forever at the specifie
 261:../OSsrc/os_sem.c **** *                            semaphore or, until the resource becomes available (or the event occur
 262:../OSsrc/os_sem.c **** *
 263:../OSsrc/os_sem.c **** *              perr          is a pointer to where an error message will be deposited.  Possible er
 264:../OSsrc/os_sem.c **** *                            messages are:
 265:../OSsrc/os_sem.c **** *
 266:../OSsrc/os_sem.c **** *                            OS_ERR_NONE         The call was successful and your task owns the res
 267:../OSsrc/os_sem.c **** *                                                or, the event you are waiting for occurred.
 268:../OSsrc/os_sem.c **** *                            OS_ERR_TIMEOUT      The semaphore was not received within the specifie
 269:../OSsrc/os_sem.c **** *                                                'timeout'.
 270:../OSsrc/os_sem.c **** *                            OS_ERR_PEND_ABORT   The wait on the semaphore was aborted.
 271:../OSsrc/os_sem.c **** *                            OS_ERR_EVENT_TYPE   If you didn't pass a pointer to a semaphore.
 272:../OSsrc/os_sem.c **** *                            OS_ERR_PEND_ISR     If you called this function from an ISR and the re
 273:../OSsrc/os_sem.c **** *                                                would lead to a suspension.
 274:../OSsrc/os_sem.c **** *                            OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer.
 275:../OSsrc/os_sem.c **** *                            OS_ERR_PEND_LOCKED  If you called this function when the scheduler is 
 276:../OSsrc/os_sem.c **** *
 277:../OSsrc/os_sem.c **** * Returns    : none
 278:../OSsrc/os_sem.c **** ***************************************************************************************************
 279:../OSsrc/os_sem.c **** */
 280:../OSsrc/os_sem.c **** 
 281:../OSsrc/os_sem.c **** void  OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)
 282:../OSsrc/os_sem.c **** {
 493               	.LM67:
 494               	/* prologue: frame size=0 */
 495 0160 EF92      		push r14
 496 0162 FF92      		push r15
 497 0164 1F93      		push r17
 498 0166 CF93      		push r28
 499 0168 DF93      		push r29
 500               	/* prologue end (size=5) */
 501 016a 7C01      		movw r14,r24
 502 016c EA01      		movw r28,r20
 283:../OSsrc/os_sem.c ****     INT8U      pend_stat;
 284:../OSsrc/os_sem.c **** #if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register  
 285:../OSsrc/os_sem.c ****     OS_CPU_SR  cpu_sr = 0;
 286:../OSsrc/os_sem.c **** #endif
 287:../OSsrc/os_sem.c **** 
 288:../OSsrc/os_sem.c **** 
 289:../OSsrc/os_sem.c **** 
 290:../OSsrc/os_sem.c **** #if OS_ARG_CHK_EN > 0
 291:../OSsrc/os_sem.c ****     if (perr == (INT8U *)0) {                         /* Validate 'perr'                           
 504               	.LM68:
 505 016e 452B      		or r20,r21
 506 0170 09F4      		brne .+2
 507 0172 50C0      		rjmp .L30
 292:../OSsrc/os_sem.c ****         return;
 293:../OSsrc/os_sem.c ****     }
 294:../OSsrc/os_sem.c ****     if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                         
 509               	.LM69:
 510 0174 0097      		sbiw r24,0
 511 0176 11F4      		brne .L32
 295:../OSsrc/os_sem.c ****         *perr = OS_ERR_PEVENT_NULL;
 513               	.LM70:
 514 0178 84E0      		ldi r24,lo8(4)
 515 017a 46C0      		rjmp .L42
 516               	.L32:
 296:../OSsrc/os_sem.c ****         return;
 297:../OSsrc/os_sem.c ****     }
 298:../OSsrc/os_sem.c **** #endif
 299:../OSsrc/os_sem.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                 
 518               	.LM71:
 519 017c FC01      		movw r30,r24
 520 017e 8081      		ld r24,Z
 521 0180 8330      		cpi r24,lo8(3)
 522 0182 11F0      		breq .L33
 300:../OSsrc/os_sem.c ****         *perr = OS_ERR_EVENT_TYPE;
 524               	.LM72:
 525 0184 81E0      		ldi r24,lo8(1)
 526 0186 40C0      		rjmp .L42
 527               	.L33:
 301:../OSsrc/os_sem.c ****         return;
 302:../OSsrc/os_sem.c ****     }
 303:../OSsrc/os_sem.c ****     if (OSIntNesting > 0) {                           /* See if called from ISR ...                
 529               	.LM73:
 530 0188 8091 0000 		lds r24,OSIntNesting
 531 018c 8823      		tst r24
 532 018e 11F0      		breq .L34
 304:../OSsrc/os_sem.c ****         *perr = OS_ERR_PEND_ISR;                      /* ... can't PEND from an ISR                
 534               	.LM74:
 535 0190 82E0      		ldi r24,lo8(2)
 536 0192 3AC0      		rjmp .L42
 537               	.L34:
 305:../OSsrc/os_sem.c ****         return;
 306:../OSsrc/os_sem.c ****     }
 307:../OSsrc/os_sem.c ****     if (OSLockNesting > 0) {                          /* See if called with scheduler locked ...   
 539               	.LM75:
 540 0194 8091 0000 		lds r24,OSLockNesting
 541 0198 8823      		tst r24
 542 019a 11F0      		breq .L35
 308:../OSsrc/os_sem.c ****         *perr = OS_ERR_PEND_LOCKED;                   /* ... can't PEND when locked                
 544               	.LM76:
 545 019c 8DE0      		ldi r24,lo8(13)
 546 019e 34C0      		rjmp .L42
 547               	.L35:
 309:../OSsrc/os_sem.c ****         return;
 310:../OSsrc/os_sem.c ****     }
 311:../OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 549               	.LM77:
 550               	/* #APP */
 551 01a0 F894      		cli
 312:../OSsrc/os_sem.c ****     if (pevent->OSEventCnt > 0) {                     /* If sem. is positive, resource available ..
 553               	.LM78:
 554               	/* #NOAPP */
 555 01a2 F701      		movw r30,r14
 556 01a4 8381      		ldd r24,Z+3
 557 01a6 9481      		ldd r25,Z+4
 558 01a8 0097      		sbiw r24,0
 559 01aa 29F0      		breq .L36
 313:../OSsrc/os_sem.c ****         pevent->OSEventCnt--;                         /* ... decrement semaphore only if positive. 
 561               	.LM79:
 562 01ac 0197      		sbiw r24,1
 563 01ae 9483      		std Z+4,r25
 564 01b0 8383      		std Z+3,r24
 314:../OSsrc/os_sem.c ****         OS_EXIT_CRITICAL();
 566               	.LM80:
 567               	/* #APP */
 568 01b2 7894      		sei
 569               	/* #NOAPP */
 570 01b4 2EC0      		rjmp .L43
 571               	.L36:
 315:../OSsrc/os_sem.c ****         *perr = OS_ERR_NONE;
 316:../OSsrc/os_sem.c ****         return;
 317:../OSsrc/os_sem.c ****     }
 318:../OSsrc/os_sem.c ****                                                       /* Otherwise, must wait until event occurs   
 319:../OSsrc/os_sem.c ****     OSTCBCur->OSTCBStat     |= OS_STAT_SEM;           /* Resource not available, pend on semaphore 
 573               	.LM81:
 574 01b6 E091 0000 		lds r30,OSTCBCur
 575 01ba F091 0000 		lds r31,(OSTCBCur)+1
 576 01be 818D      		ldd r24,Z+25
 577 01c0 8160      		ori r24,lo8(1)
 578 01c2 818F      		std Z+25,r24
 320:../OSsrc/os_sem.c ****     OSTCBCur->OSTCBStatPend  = OS_STAT_PEND_OK;
 580               	.LM82:
 581 01c4 E091 0000 		lds r30,OSTCBCur
 582 01c8 F091 0000 		lds r31,(OSTCBCur)+1
 583 01cc 128E      		std Z+26,__zero_reg__
 321:../OSsrc/os_sem.c ****     OSTCBCur->OSTCBDly       = timeout;               /* Store pend timeout in TCB                 
 585               	.LM83:
 586 01ce E091 0000 		lds r30,OSTCBCur
 587 01d2 F091 0000 		lds r31,(OSTCBCur)+1
 588 01d6 708F      		std Z+24,r23
 589 01d8 678B      		std Z+23,r22
 322:../OSsrc/os_sem.c ****     OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs
 591               	.LM84:
 592 01da C701      		movw r24,r14
 593 01dc 0E94 0000 		call OS_EventTaskWait
 323:../OSsrc/os_sem.c ****     OS_EXIT_CRITICAL();
 595               	.LM85:
 596               	/* #APP */
 597 01e0 7894      		sei
 324:../OSsrc/os_sem.c ****     OS_Sched();                                       /* Find next highest priority task ready     
 599               	.LM86:
 600               	/* #NOAPP */
 601 01e2 0E94 0000 		call OS_Sched
 325:../OSsrc/os_sem.c ****     OS_ENTER_CRITICAL();
 603               	.LM87:
 604               	/* #APP */
 605 01e6 F894      		cli
 326:../OSsrc/os_sem.c ****     if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) { /* See if we timed-out or aborted            
 607               	.LM88:
 608               	/* #NOAPP */
 609 01e8 E091 0000 		lds r30,OSTCBCur
 610 01ec F091 0000 		lds r31,(OSTCBCur)+1
 611 01f0 128D      		ldd r17,Z+26
 612 01f2 1123      		tst r17
 613 01f4 59F0      		breq .L37
 327:../OSsrc/os_sem.c ****         pend_stat = OSTCBCur->OSTCBStatPend;
 328:../OSsrc/os_sem.c ****         OS_EventTOAbort(pevent);
 615               	.LM89:
 616 01f6 C701      		movw r24,r14
 617 01f8 0E94 0000 		call OS_EventTOAbort
 329:../OSsrc/os_sem.c ****         OS_EXIT_CRITICAL();
 619               	.LM90:
 620               	/* #APP */
 621 01fc 7894      		sei
 330:../OSsrc/os_sem.c ****         switch (pend_stat) {
 623               	.LM91:
 624               	/* #NOAPP */
 625 01fe 1230      		cpi r17,lo8(2)
 626 0200 11F0      		breq .L41
 331:../OSsrc/os_sem.c ****             case OS_STAT_PEND_TO:
 332:../OSsrc/os_sem.c ****             default:
 333:../OSsrc/os_sem.c ****                  *perr = OS_ERR_TIMEOUT;              /* Indicate that didn't get event within TO  
 628               	.LM92:
 629 0202 8AE0      		ldi r24,lo8(10)
 630 0204 01C0      		rjmp .L42
 631               	.L41:
 334:../OSsrc/os_sem.c ****                  break;
 335:../OSsrc/os_sem.c **** 
 336:../OSsrc/os_sem.c ****             case OS_STAT_PEND_ABORT:
 337:../OSsrc/os_sem.c ****                  *perr = OS_ERR_PEND_ABORT;           /* Indicate that we aborted                  
 633               	.LM93:
 634 0206 8EE0      		ldi r24,lo8(14)
 635               	.L42:
 636 0208 8883      		st Y,r24
 338:../OSsrc/os_sem.c ****                  break;
 339:../OSsrc/os_sem.c ****         }
 340:../OSsrc/os_sem.c ****         return;
 638               	.LM94:
 639 020a 04C0      		rjmp .L30
 640               	.L37:
 341:../OSsrc/os_sem.c ****     }
 342:../OSsrc/os_sem.c ****     OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;

⌨️ 快捷键说明

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