📄 os_sem.lst
字号:
\ 00000026 2000 MOVS R0,R4
\ 00000028 ........ _BLF OS_EventTaskRdy,??OS_EventTaskRdy??rT
340 OS_EXIT_CRITICAL();
\ 0000002C 2800 MOVS R0,R5
\ 0000002E ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
341 OS_Sched(); /* Find highest priority task ready to run */
\ 00000032 ........ _BLF OS_Sched,??OS_Sched??rT
342 return (OS_NO_ERR);
\ 00000036 0020 MOVS R0,#+0
\ 00000038 0FE0 B ??OSSemPost_1
343 }
344 if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow */
\ ??OSSemPost_3:
\ 0000003A 6088 LDRH R0,[R4, #+2]
\ 0000003C 0849 LDR R1,??OSSemPost_4 ;; 0xffff
\ 0000003E 8842 CMP R0,R1
\ 00000040 07D0 BEQ ??OSSemPost_5
345 pevent->OSEventCnt++; /* Increment semaphore count to register event */
\ 00000042 6088 LDRH R0,[R4, #+2]
\ 00000044 401C ADDS R0,R0,#+1
\ 00000046 6080 STRH R0,[R4, #+2]
346 OS_EXIT_CRITICAL();
\ 00000048 2800 MOVS R0,R5
\ 0000004A ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
347 return (OS_NO_ERR);
\ 0000004E 0020 MOVS R0,#+0
\ 00000050 03E0 B ??OSSemPost_1
348 }
349 OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum */
\ ??OSSemPost_5:
\ 00000052 2800 MOVS R0,R5
\ 00000054 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
350 return (OS_SEM_OVF);
\ 00000058 3220 MOVS R0,#+50
\ ??OSSemPost_1:
\ 0000005A 30BC POP {R4,R5}
\ 0000005C 02BC POP {R1}
\ 0000005E 0847 BX R1 ;; return
\ ??OSSemPost_4:
\ 00000060 FFFF0000 DC32 0xffff
351 }
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
\ In segment CODE, align 4, keep-with-next
372 INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data)
373 {
\ OSSemQuery:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 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' */
\ 00000006 002C CMP R4,#+0
\ 00000008 01D1 BNE ??OSSemQuery_0
383 return (OS_ERR_PEVENT_NULL);
\ 0000000A 0420 MOVS R0,#+4
\ 0000000C 2FE0 B ??OSSemQuery_1
384 }
385 #endif
386 if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
\ ??OSSemQuery_0:
\ 0000000E 2078 LDRB R0,[R4, #+0]
\ 00000010 0328 CMP R0,#+3
\ 00000012 01D0 BEQ ??OSSemQuery_2
387 return (OS_ERR_EVENT_TYPE);
\ 00000014 0120 MOVS R0,#+1
\ 00000016 2AE0 B ??OSSemQuery_1
388 }
389 OS_ENTER_CRITICAL();
\ ??OSSemQuery_2:
\ 00000018 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
390 p_sem_data->OSEventGrp = pevent->OSEventGrp; /* Copy message mailbox wait list */
\ 0000001C 6178 LDRB R1,[R4, #+1]
\ 0000001E A972 STRB R1,[R5, #+10]
391 psrc = &pevent->OSEventTbl[0];
\ 00000020 2100 MOVS R1,R4
\ 00000022 0831 ADDS R1,R1,#+8
392 pdest = &p_sem_data->OSEventTbl[0];
\ 00000024 2A00 MOVS R2,R5
\ 00000026 921C ADDS R2,R2,#+2
393 #if OS_EVENT_TBL_SIZE > 0
394 *pdest++ = *psrc++;
\ 00000028 0B78 LDRB R3,[R1, #+0]
\ 0000002A 1370 STRB R3,[R2, #+0]
\ 0000002C 491C ADDS R1,R1,#+1
\ 0000002E 521C ADDS R2,R2,#+1
395 #endif
396
397 #if OS_EVENT_TBL_SIZE > 1
398 *pdest++ = *psrc++;
\ 00000030 0B78 LDRB R3,[R1, #+0]
\ 00000032 1370 STRB R3,[R2, #+0]
\ 00000034 491C ADDS R1,R1,#+1
\ 00000036 521C ADDS R2,R2,#+1
399 #endif
400
401 #if OS_EVENT_TBL_SIZE > 2
402 *pdest++ = *psrc++;
\ 00000038 0B78 LDRB R3,[R1, #+0]
\ 0000003A 1370 STRB R3,[R2, #+0]
\ 0000003C 491C ADDS R1,R1,#+1
\ 0000003E 521C ADDS R2,R2,#+1
403 #endif
404
405 #if OS_EVENT_TBL_SIZE > 3
406 *pdest++ = *psrc++;
\ 00000040 0B78 LDRB R3,[R1, #+0]
\ 00000042 1370 STRB R3,[R2, #+0]
\ 00000044 491C ADDS R1,R1,#+1
\ 00000046 521C ADDS R2,R2,#+1
407 #endif
408
409 #if OS_EVENT_TBL_SIZE > 4
410 *pdest++ = *psrc++;
\ 00000048 0B78 LDRB R3,[R1, #+0]
\ 0000004A 1370 STRB R3,[R2, #+0]
\ 0000004C 491C ADDS R1,R1,#+1
\ 0000004E 521C ADDS R2,R2,#+1
411 #endif
412
413 #if OS_EVENT_TBL_SIZE > 5
414 *pdest++ = *psrc++;
\ 00000050 0B78 LDRB R3,[R1, #+0]
\ 00000052 1370 STRB R3,[R2, #+0]
\ 00000054 491C ADDS R1,R1,#+1
\ 00000056 521C ADDS R2,R2,#+1
415 #endif
416
417 #if OS_EVENT_TBL_SIZE > 6
418 *pdest++ = *psrc++;
\ 00000058 0B78 LDRB R3,[R1, #+0]
\ 0000005A 1370 STRB R3,[R2, #+0]
\ 0000005C 491C ADDS R1,R1,#+1
\ 0000005E 521C ADDS R2,R2,#+1
419 #endif
420
421 #if OS_EVENT_TBL_SIZE > 7
422 *pdest = *psrc;
\ 00000060 0978 LDRB R1,[R1, #+0]
\ 00000062 1170 STRB R1,[R2, #+0]
423 #endif
424 p_sem_data->OSCnt = pevent->OSEventCnt; /* Get semaphore count */
\ 00000064 6188 LDRH R1,[R4, #+2]
\ 00000066 2980 STRH R1,[R5, #+0]
425 OS_EXIT_CRITICAL();
\ 00000068 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
426 return (OS_NO_ERR);
\ 0000006C 0020 MOVS R0,#+0
\ ??OSSemQuery_1:
\ 0000006E 30BC POP {R4,R5}
\ 00000070 02BC POP {R1}
\ 00000072 0847 BX R1 ;; return
427 }
\ In segment CODE, align 4, keep-with-next
\ ??DataTable9:
\ 00000000 ........ DC32 OSEventFreeList
\ In segment CODE, align 4, keep-with-next
\ ??DataTable10:
\ 00000000 ........ DC32 OSIntNesting
428 #endif /* OS_SEM_QUERY_EN */
429 #endif /* OS_SEM_EN */
Maximum stack usage in bytes:
Function CSTACK
-------- ------
OSSemAccept 12
OSSemCreate 12
OSSemDel 24
OSSemPend 20
OSSemPost 12
OSSemQuery 12
Segment part sizes:
Function/Label Bytes
-------------- -----
OSSemAccept 50
OSSemCreate 82
OSSemDel 222
OSSemPend 180
OSSemPost 100
OSSemQuery 116
??DataTable9 4
??DataTable10 4
Others 104
862 bytes in segment CODE
758 bytes of CODE memory (+ 104 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -