📄 os_mutex.lst
字号:
\ 03D4 5E4E1E00 MOV.B 30(R14),R14
\ 03D8 1F420000 MOV &OSTCBCur,R15
\ 03DC DF4E0000 MOV.B OSMapTbl(R14),32(R15)
\ 03E0 2000
438 OSRdyGrp |= OSTCBCur->OSTCBBitY;
\ 03E2 1E420000 MOV &OSTCBCur,R14
\ 03E6 D2DE2100 BIS.B 33(R14),&OSRdyGrp
\ 03EA 0000
439 OSRdyTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;
\ 03EC 1E420000 MOV &OSTCBCur,R14
\ 03F0 5E4E1F00 MOV.B 31(R14),R14
\ 03F4 1F420000 MOV &OSTCBCur,R15
\ 03F8 DEDF2000 BIS.B 32(R15),OSRdyTbl(R14)
\ 03FC 0000
440 OSTCBPrioTbl[prio] = (OS_TCB *)OSTCBCur;
\ 03FE 0C5C ADD R12,R12
\ 0400 9C420000 MOV &OSTCBCur,OSTCBPrioTbl(R12)
\ 0404 0000
\ 0406 ?0128:
441 }
442 OSTCBPrioTbl[pip] = (OS_TCB *)1; /* Reserve table entry */
\ 0406 0D5D ADD R13,R13
\ 0408 9D430000 MOV #1,OSTCBPrioTbl(R13)
443 if (pevent->OSEventGrp != 0x00) { /* Any task waiting for the mutex? */
\ 040C CA930100 CMP.B #0,1(R10)
\ 0410 1724 JEQ (?0132)
444 /* Yes, Make HPT waiting for mutex ready */
445 prio = OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MUTEX);
\ 0412 70121000 PUSH.B #16
\ 0416 0E43 MOV #0,R14
\ 0418 0C4A MOV R10,R12
\ 041A B0120000 CALL #OS_EventTaskRdy
\ 041E 2153 ADD #2,SP
446 pevent->OSEventCnt &= OS_MUTEX_KEEP_UPPER_8; /* Save priority of mutex's new owner */
\ 0420 BAF000FF AND #65280,2(R10)
\ 0424 0200
447 pevent->OSEventCnt |= prio;
\ 0426 4D4C MOV.B R12,R13
\ 0428 8ADD0200 BIS R13,2(R10)
448 pevent->OSEventPtr = OSTCBPrioTbl[prio]; /* Link to mutex owner's OS_TCB */
\ 042C 7CF3 AND.B #-1,R12
\ 042E 0C5C ADD R12,R12
\ 0430 9A4C0000 MOV OSTCBPrioTbl(R12),4(R10)
\ 0434 0400
449 OS_EXIT_CRITICAL();
\ 0436 32D2 EINT
450 OS_Sched(); /* Find highest priority task ready to run */
\ 0438 B0120000 CALL #OS_Sched
451 return (OS_NO_ERR);
\ 043C 4C43 MOV.B #0,R12
452 }
\ 043E 073C JMP (?0133)
\ 0440 ?0132:
453 pevent->OSEventCnt |= OS_MUTEX_AVAILABLE; /* No, Mutex is now available */
\ 0440 BAD0FF00 BIS #255,2(R10)
\ 0444 0200
454 pevent->OSEventPtr = (void *)0;
\ 0446 8A430400 MOV #0,4(R10)
455 OS_EXIT_CRITICAL();
\ 044A 32D2 EINT
456 return (OS_NO_ERR);
\ 044C 4C43 MOV.B #0,R12
457 }
\ 044E ?0133:
\ 044E 3A41 POP R10
\ 0450 3041 RET
\ 0452 OSMutexQuery:
458 /*$PAGE*/
459 /*
460 *********************************************************************************************************
461 * QUERY A MUTUAL EXCLUSION SEMAPHORE
462 *
463 * Description: This function obtains information about a mutex
464 *
465 * Arguments : pevent is a pointer to the event control block associated with the desired mutex
466 *
467 * pdata is a pointer to a structure that will contain information about the mutex
468 *
469 * Returns : OS_NO_ERR The call was successful and the message was sent
470 * OS_ERR_QUERY_ISR If you called this function from an ISR
471 * OS_ERR_PEVENT_NULL 'pevent' is a NULL pointer
472 * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non mutex.
473 *********************************************************************************************************
474 */
475
476 #if OS_MUTEX_QUERY_EN > 0
477 INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *pdata)
478 {
479 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
480 OS_CPU_SR cpu_sr;
481 #endif
482 INT8U *psrc;
483 INT8U *pdest;
484
485
486 if (OSIntNesting > 0) { /* See if called from ISR ... */
\ 0452 C2930000 CMP.B #0,&OSIntNesting
\ 0456 0324 JEQ (?0135)
487 return (OS_ERR_QUERY_ISR); /* ... can't QUERY mutex from an ISR */
\ 0458 7C400600 MOV.B #6,R12
488 }
\ 045C 3041 RET
\ 045E ?0135:
489 #if OS_ARG_CHK_EN > 0
490 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
\ 045E 0C93 CMP #0,R12
\ 0460 0220 JNE (?0137)
491 return (OS_ERR_PEVENT_NULL);
\ 0462 6C42 MOV.B #4,R12
492 }
\ 0464 3041 RET
\ 0466 ?0137:
493 if (pevent->OSEventType != OS_EVENT_TYPE_MUTEX) { /* Validate event block type */
\ 0466 6D42 MOV.B #4,R13
\ 0468 6D9C CMP.B @R12,R13
\ 046A 0224 JEQ (?0139)
494 return (OS_ERR_EVENT_TYPE);
\ 046C 5C43 MOV.B #1,R12
495 }
\ 046E 3041 RET
\ 0470 ?0139:
496 #endif
497 OS_ENTER_CRITICAL();
\ 0470 32C2 DINT
498 pdata->OSMutexPIP = (INT8U)(pevent->OSEventCnt >> 8);
\ 0472 1D4C0200 MOV 2(R12),R13
\ 0476 8D10 SWPB R13
\ 0478 7DF3 AND.B #-1,R13
\ 047A CE4D0500 MOV.B R13,5(R14)
499 pdata->OSOwnerPrio = (INT8U)(pevent->OSEventCnt & OS_MUTEX_KEEP_LOWER_8);
\ 047E 1D4C0200 MOV 2(R12),R13
\ 0482 7DF3 AND.B #255,R13
\ 0484 CE4D0400 MOV.B R13,4(R14)
500 if (pdata->OSOwnerPrio == 0xFF) {
\ 0488 FE930400 CMP.B #255,4(R14)
\ 048C 0320 JNE (?0141)
501 pdata->OSValue = 1;
\ 048E DE430300 MOV.B #1,3(R14)
502 } else {
\ 0492 023C JMP (?0142)
\ 0494 ?0141:
503 pdata->OSValue = 0;
\ 0494 CE430300 MOV.B #0,3(R14)
\ 0498 ?0142:
504 }
505 pdata->OSEventGrp = pevent->OSEventGrp; /* Copy wait list */
\ 0498 DE4C0100 MOV.B 1(R12),2(R14)
\ 049C 0200
506 psrc = &pevent->OSEventTbl[0];
\ 049E 3C500600 ADD #6,R12
507 pdest = &pdata->OSEventTbl[0];
\ 04A2 0D4E MOV R14,R13
508 #if OS_EVENT_TBL_SIZE > 0
509 *pdest++ = *psrc++;
\ 04A4 FD4C0000 MOV.B @R12+,0(R13)
\ 04A8 1D53 ADD #1,R13
510 #endif
511
512 #if OS_EVENT_TBL_SIZE > 1
513 *pdest++ = *psrc++;
\ 04AA FD4C0000 MOV.B @R12+,0(R13)
514 #endif
515
516 #if OS_EVENT_TBL_SIZE > 2
517 *pdest++ = *psrc++;
518 #endif
519
520 #if OS_EVENT_TBL_SIZE > 3
521 *pdest++ = *psrc++;
522 #endif
523
524 #if OS_EVENT_TBL_SIZE > 4
525 *pdest++ = *psrc++;
526 #endif
527
528 #if OS_EVENT_TBL_SIZE > 5
529 *pdest++ = *psrc++;
530 #endif
531
532 #if OS_EVENT_TBL_SIZE > 6
533 *pdest++ = *psrc++;
534 #endif
535
536 #if OS_EVENT_TBL_SIZE > 7
537 *pdest = *psrc;
538 #endif
539 OS_EXIT_CRITICAL();
\ 04AE 32D2 EINT
540 return (OS_NO_ERR);
\ 04B0 4C43 MOV.B #0,R12
541 }
\ 04B2 3041 RET
542 #endif /* OS_MUTEX_QUERY_EN */
543 #endif /* OS_MUTEX_EN */
\ 04B4 END
S Y M B O L - T A B L E
=======================
#include file(s):
[ 1] j:\software\ucos-ii\ti-msp430\iar\source\debug\obj\os_mutex.r43
Symbol Type Class Defline Refline(s)
------ ---- ----- ------- ----------
ADC12CTL0 sfrw --- 757:9
ADC12CTL1 sfrw --- 759:9
ADC12IE sfrw --- 763:9
ADC12IFG sfrw --- 761:9
ADC12IV sfrw --- 765:9
ADC12MCTL0 sfrb --- 813:9
ADC12MCTL1 sfrb --- 815:9
ADC12MCTL10 sfrb --- 833:9
ADC12MCTL11 sfrb --- 835:9
ADC12MCTL12 sfrb --- 837
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -