📄 os_sem.s79
字号:
// 335 return (OS_ERR_EVENT_TYPE);
MOVS R0,#+1
B ??OSSemPost_1
// 336 }
// 337 OS_ENTER_CRITICAL();
??OSSemPost_2:
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
MOVS R5,R0
// 338 if (pevent->OSEventGrp != 0x00) { /* See if any task waiting for semaphore */
LDRB R0,[R4, #+1]
CMP R0,#+0
BEQ ??OSSemPost_3
// 339 OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM); /* Ready highest prio task waiting on event */
MOVS R2,#+1
MOVS R1,#+0
MOVS R0,R4
_BLF OS_EventTaskRdy,??OS_EventTaskRdy??rT
// 340 OS_EXIT_CRITICAL();
MOVS R0,R5
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 341 OS_Sched(); /* Find highest priority task ready to run */
_BLF OS_Sched,??OS_Sched??rT
// 342 return (OS_NO_ERR);
??OSSemPost_4:
MOVS R0,#+0
B ??OSSemPost_1
// 343 }
// 344 if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow */
??OSSemPost_3:
LDRH R0,[R4, #+2]
LDR R1,??OSSemPost_5 ;; 0xffff
CMP R0,R1
BEQ ??OSSemPost_6
// 345 pevent->OSEventCnt++; /* Increment semaphore count to register event */
ADDS R0,R0,#+1
STRH R0,[R4, #+2]
// 346 OS_EXIT_CRITICAL();
MOVS R0,R5
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 347 return (OS_NO_ERR);
B.N ??OSSemPost_4
// 348 }
// 349 OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum */
??OSSemPost_6:
MOVS R0,R5
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 350 return (OS_SEM_OVF);
MOVS R0,#+50
??OSSemPost_1:
POP {R4,R5}
POP {R1}
BX R1 ;; return
Nop
DATA
??OSSemPost_5:
DC32 0xffff
CFI EndBlock cfiBlock9
// 351 }
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock10 Using cfiCommon0
CFI NoFunction
ARM
??OSSemQuery??rA:
ADD R12,PC,#+1
BX R12
CFI EndBlock cfiBlock10
REQUIRE OSSemQuery
// 352 /*$PAGE*/
// 353 /*
// 354 *********************************************************************************************************
// 355 * QUERY A SEMAPHORE
// 356 *
// 357 * Description: This function obtains information about a semaphore
// 358 *
// 359 * Arguments : pevent is a pointer to the event control block associated with the desired
// 360 * semaphore
// 361 *
// 362 * p_sem_data is a pointer to a structure that will contain information about the
// 363 * semaphore.
// 364 *
// 365 * Returns : OS_NO_ERR The call was successful and the message was sent
// 366 * OS_ERR_EVENT_TYPE If you are attempting to obtain data from a non semaphore.
// 367 * OS_ERR_PEVENT_NULL If 'pevent' is a NULL pointer.
// 368 *********************************************************************************************************
// 369 */
// 370
// 371 #if OS_SEM_QUERY_EN > 0
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock11 Using cfiCommon1
CFI Function OSSemQuery
THUMB
// 372 INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
// 373 {
OSSemQuery:
PUSH {R4,R5,LR}
CFI ?RET Frame(CFA, -4)
CFI R5 Frame(CFA, -8)
CFI R4 Frame(CFA, -12)
CFI CFA R13+12
MOVS R4,R0
MOVS R5,R1
// 374 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
// 375 OS_CPU_SR cpu_sr;
// 376 #endif
// 377 INT8U *psrc;
// 378 INT8U *pdest;
// 379
// 380
// 381 #if OS_ARG_CHK_EN > 0
// 382 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
CMP R4,#+0
BNE ??OSSemQuery_0
// 383 return (OS_ERR_PEVENT_NULL);
MOVS R0,#+4
B ??OSSemQuery_1
// 384 }
// 385 #endif
// 386 if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
??OSSemQuery_0:
LDRB R0,[R4, #+0]
CMP R0,#+3
BEQ ??OSSemQuery_2
// 387 return (OS_ERR_EVENT_TYPE);
MOVS R0,#+1
B ??OSSemQuery_1
// 388 }
// 389 OS_ENTER_CRITICAL();
??OSSemQuery_2:
_BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
// 390 p_sem_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
LDRB R1,[R4, #+1]
STRB R1,[R5, #+10]
// 391 psrc = &pevent->OSEventTbl[0];
MOVS R1,R4
// 392 pdest = &p_sem_data->OSEventTbl[0];
ADDS R2,R5,#+2
// 393 #if OS_EVENT_TBL_SIZE > 0
// 394 *pdest++ = *psrc++;
LDRB R3,[R1, #+8]
STRB R3,[R2, #+0]
// 395 #endif
// 396
// 397 #if OS_EVENT_TBL_SIZE > 1
// 398 *pdest++ = *psrc++;
LDRB R3,[R1, #+9]
STRB R3,[R2, #+1]
// 399 #endif
// 400
// 401 #if OS_EVENT_TBL_SIZE > 2
// 402 *pdest++ = *psrc++;
LDRB R3,[R1, #+10]
STRB R3,[R2, #+2]
// 403 #endif
// 404
// 405 #if OS_EVENT_TBL_SIZE > 3
// 406 *pdest++ = *psrc++;
LDRB R3,[R1, #+11]
STRB R3,[R2, #+3]
// 407 #endif
// 408
// 409 #if OS_EVENT_TBL_SIZE > 4
// 410 *pdest++ = *psrc++;
LDRB R3,[R1, #+12]
STRB R3,[R2, #+4]
// 411 #endif
// 412
// 413 #if OS_EVENT_TBL_SIZE > 5
// 414 *pdest++ = *psrc++;
LDRB R3,[R1, #+13]
STRB R3,[R2, #+5]
ADDS R1,R1,#+14
ADDS R2,R2,#+6
// 415 #endif
// 416
// 417 #if OS_EVENT_TBL_SIZE > 6
// 418 *pdest++ = *psrc++;
LDRB R3,[R1, #+0]
STRB R3,[R2, #+0]
// 419 #endif
// 420
// 421 #if OS_EVENT_TBL_SIZE > 7
// 422 *pdest = *psrc;
LDRB R1,[R1, #+1]
STRB R1,[R2, #+1]
// 423 #endif
// 424 p_sem_data->OSCnt = pevent->OSEventCnt; /* Get semaphore count */
LDRH R1,[R4, #+2]
STRH R1,[R5, #+0]
// 425 OS_EXIT_CRITICAL();
_BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
// 426 return (OS_NO_ERR);
MOVS R0,#+0
??OSSemQuery_1:
POP {R4,R5}
POP {R1}
BX R1 ;; return
CFI EndBlock cfiBlock11
// 427 }
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock12 Using cfiCommon1
CFI NoFunction
THUMB
??OS_CPU_SR_Save??rT:
LDR R3,??Subroutine6_0 ;; OS_CPU_SR_Save
BX R3
DATA
??Subroutine6_0:
DC32 OS_CPU_SR_Save
CFI EndBlock cfiBlock12
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock13 Using cfiCommon1
CFI NoFunction
THUMB
??OS_CPU_SR_Restore??rT:
LDR R3,??Subroutine7_0 ;; OS_CPU_SR_Restore
BX R3
DATA
??Subroutine7_0:
DC32 OS_CPU_SR_Restore
CFI EndBlock cfiBlock13
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock14 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventWaitListInit??rT:
LDR R3,??Subroutine8_0 ;; OS_EventWaitListInit
BX R3
DATA
??Subroutine8_0:
DC32 OS_EventWaitListInit
CFI EndBlock cfiBlock14
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock15 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventTaskRdy??rT:
LDR R3,??Subroutine9_0 ;; OS_EventTaskRdy
BX R3
DATA
??Subroutine9_0:
DC32 OS_EventTaskRdy
CFI EndBlock cfiBlock15
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock16 Using cfiCommon1
CFI NoFunction
THUMB
??OS_Sched??rT:
LDR R3,??Subroutine10_0 ;; OS_Sched
BX R3
DATA
??Subroutine10_0:
DC32 OS_Sched
CFI EndBlock cfiBlock16
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock17 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventTaskWait??rT:
LDR R3,??Subroutine11_0 ;; OS_EventTaskWait
BX R3
DATA
??Subroutine11_0:
DC32 OS_EventTaskWait
CFI EndBlock cfiBlock17
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock18 Using cfiCommon1
CFI NoFunction
THUMB
??OS_EventTO??rT:
LDR R3,??Subroutine12_0 ;; OS_EventTO
BX R3
DATA
??Subroutine12_0:
DC32 OS_EventTO
CFI EndBlock cfiBlock18
END
// 428 #endif /* OS_SEM_QUERY_EN */
// 429 #endif /* OS_SEM_EN */
//
// 776 bytes in segment CODE
//
// 672 bytes of CODE memory (+ 104 bytes shared)
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -