📄 os_flag.lst
字号:
\ 00000068 2081 STRH R0,[R4, #+8]
350 OSFlagFreeList = pgrp;
\ 0000006A ........ LDR.W R0,??DataTable9_2
\ 0000006E 0460 STR R4,[R0, #+0]
351 OS_EXIT_CRITICAL();
\ 00000070 5046 MOV R0,R10
\ 00000072 ........ BL OS_CPU_SR_Restore
352 *perr = OS_ERR_NONE;
\ 00000076 0020 MOVS R0,#+0
\ 00000078 3070 STRB R0,[R6, #+0]
353 pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
\ 0000007A 0020 MOVS R0,#+0
\ 0000007C 8146 MOV R9,R0
\ 0000007E 05E0 B.N ??OSFlagDel_9
354 } else {
355 OS_EXIT_CRITICAL();
\ ??OSFlagDel_8:
\ 00000080 5046 MOV R0,R10
\ 00000082 ........ BL OS_CPU_SR_Restore
356 *perr = OS_ERR_TASK_WAITING;
\ 00000086 4920 MOVS R0,#+73
\ 00000088 3070 STRB R0,[R6, #+0]
357 pgrp_return = pgrp;
\ 0000008A A146 MOV R9,R4
358 }
359 break;
\ ??OSFlagDel_9:
\ 0000008C 2BE0 B.N ??OSFlagDel_10
360
361 case OS_DEL_ALWAYS: /* Always delete the event flag group */
362 pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
\ ??OSFlagDel_6:
\ 0000008E 6068 LDR R0,[R4, #+4]
\ 00000090 8046 MOV R8,R0
363 while (pnode != (OS_FLAG_NODE *)0) { /* Ready ALL tasks waiting for flags */
\ ??OSFlagDel_11:
\ 00000092 B8F1000F CMP R8,#+0
\ 00000096 06D0 BEQ.N ??OSFlagDel_12
364 (void)OS_FlagTaskRdy(pnode, (OS_FLAGS)0);
\ 00000098 0021 MOVS R1,#+0
\ 0000009A 4046 MOV R0,R8
\ 0000009C ........ BL OS_FlagTaskRdy
365 pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
\ 000000A0 D8F80080 LDR R8,[R8, #+0]
\ 000000A4 F5E7 B.N ??OSFlagDel_11
366 }
367 #if OS_FLAG_NAME_EN > 0u
368 pgrp->OSFlagName = (INT8U *)(void *)"?";
\ ??OSFlagDel_12:
\ 000000A6 .... ADR.N R0,??DataTable4 ;; "\?"
\ 000000A8 E060 STR R0,[R4, #+12]
369 #endif
370 pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
\ 000000AA 0020 MOVS R0,#+0
\ 000000AC 2070 STRB R0,[R4, #+0]
371 pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list */
\ 000000AE ........ LDR.W R0,??DataTable9_2
\ 000000B2 0068 LDR R0,[R0, #+0]
\ 000000B4 6060 STR R0,[R4, #+4]
372 pgrp->OSFlagFlags = (OS_FLAGS)0;
\ 000000B6 0020 MOVS R0,#+0
\ 000000B8 2081 STRH R0,[R4, #+8]
373 OSFlagFreeList = pgrp;
\ 000000BA ........ LDR.W R0,??DataTable9_2
\ 000000BE 0460 STR R4,[R0, #+0]
374 OS_EXIT_CRITICAL();
\ 000000C0 5046 MOV R0,R10
\ 000000C2 ........ BL OS_CPU_SR_Restore
375 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
\ 000000C6 FFB2 UXTB R7,R7 ;; ZeroExt R7,R7,#+24,#+24
\ 000000C8 012F CMP R7,#+1
\ 000000CA 01D1 BNE.N ??OSFlagDel_13
376 OS_Sched(); /* Find highest priority task ready to run */
\ 000000CC ........ BL OS_Sched
377 }
378 *perr = OS_ERR_NONE;
\ ??OSFlagDel_13:
\ 000000D0 0020 MOVS R0,#+0
\ 000000D2 3070 STRB R0,[R6, #+0]
379 pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
\ 000000D4 0020 MOVS R0,#+0
\ 000000D6 8146 MOV R9,R0
380 break;
\ 000000D8 05E0 B.N ??OSFlagDel_10
381
382 default:
383 OS_EXIT_CRITICAL();
\ ??OSFlagDel_7:
\ 000000DA 5046 MOV R0,R10
\ 000000DC ........ BL OS_CPU_SR_Restore
384 *perr = OS_ERR_INVALID_OPT;
\ 000000E0 0720 MOVS R0,#+7
\ 000000E2 3070 STRB R0,[R6, #+0]
385 pgrp_return = pgrp;
\ 000000E4 A146 MOV R9,R4
386 break;
387 }
388 return (pgrp_return);
\ ??OSFlagDel_10:
\ 000000E6 4846 MOV R0,R9
\ ??OSFlagDel_1:
\ 000000E8 BDE8F087 POP {R4-R10,PC} ;; return
389 }
390 #endif
391 /*$PAGE*/
392 /*
393 *********************************************************************************************************
394 * GET THE NAME OF AN EVENT FLAG GROUP
395 *
396 * Description: This function is used to obtain the name assigned to an event flag group
397 *
398 * Arguments : pgrp is a pointer to the event flag group.
399 *
400 * pname is pointer to a pointer to an ASCII string that will receive the name of the event flag
401 * group.
402 *
403 * perr is a pointer to an error code that can contain one of the following values:
404 *
405 * OS_ERR_NONE if the requested task is resumed
406 * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group
407 * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
408 * OS_ERR_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp'
409 * OS_ERR_NAME_GET_ISR if you called this function from an ISR
410 *
411 * Returns : The length of the string or 0 if the 'pgrp' is a NULL pointer.
412 *********************************************************************************************************
413 */
414
415 #if OS_FLAG_NAME_EN > 0u
\ In section .text, align 2, keep-with-next
416 INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp,
417 INT8U **pname,
418 INT8U *perr)
419 {
\ OSFlagNameGet:
\ 00000000 2DE9F041 PUSH {R4-R8,LR}
\ 00000004 0400 MOVS R4,R0
\ 00000006 0D00 MOVS R5,R1
\ 00000008 1600 MOVS R6,R2
420 INT8U len;
421 #if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
422 OS_CPU_SR cpu_sr = 0u;
\ 0000000A 5FF00008 MOVS R8,#+0
423 #endif
424
425
426
427 #ifdef OS_SAFETY_CRITICAL
428 if (perr == (INT8U *)0) {
429 OS_SAFETY_CRITICAL_EXCEPTION();
430 return (0u);
431 }
432 #endif
433
434 #if OS_ARG_CHK_EN > 0u
435 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
436 *perr = OS_ERR_FLAG_INVALID_PGRP;
437 return (0u);
438 }
439 if (pname == (INT8U **)0) { /* Is 'pname' a NULL pointer? */
440 *perr = OS_ERR_PNAME_NULL;
441 return (0u);
442 }
443 #endif
444 if (OSIntNesting > 0u) { /* See if trying to call from an ISR */
\ 0000000E ........ LDR.W R0,??DataTable9_1
\ 00000012 0078 LDRB R0,[R0, #+0]
\ 00000014 0028 CMP R0,#+0
\ 00000016 03D0 BEQ.N ??OSFlagNameGet_0
445 *perr = OS_ERR_NAME_GET_ISR;
\ 00000018 1120 MOVS R0,#+17
\ 0000001A 3070 STRB R0,[R6, #+0]
446 return (0u);
\ 0000001C 0020 MOVS R0,#+0
\ 0000001E 19E0 B.N ??OSFlagNameGet_1
447 }
448 OS_ENTER_CRITICAL();
\ ??OSFlagNameGet_0:
\ 00000020 ........ BL OS_CPU_SR_Save
\ 00000024 8046 MOV R8,R0
449 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
\ 00000026 2078 LDRB R0,[R4, #+0]
\ 00000028 0528 CMP R0,#+5
\ 0000002A 06D0 BEQ.N ??OSFlagNameGet_2
450 OS_EXIT_CRITICAL();
\ 0000002C 4046 MOV R0,R8
\ 0000002E ........ BL OS_CPU_SR_Restore
451 *perr = OS_ERR_EVENT_TYPE;
\ 00000032 0120 MOVS R0,#+1
\ 00000034 3070 STRB R0,[R6, #+0]
452 return (0u);
\ 00000036 0020 MOVS R0,#+0
\ 00000038 0CE0 B.N ??OSFlagNameGet_1
453 }
454 *pname = pgrp->OSFlagName;
\ ??OSFlagNameGet_2:
\ 0000003A E068 LDR R0,[R4, #+12]
\ 0000003C 2860 STR R0,[R5, #+0]
455 len = OS_StrLen(*pname);
\ 0000003E 2868 LDR R0,[R5, #+0]
\ 00000040 ........ BL OS_StrLen
\ 00000044 0700 MOVS R7,R0
456 OS_EXIT_CRITICAL();
\ 00000046 4046 MOV R0,R8
\ 00000048 ........ BL OS_CPU_SR_Restore
457 *perr = OS_ERR_NONE;
\ 0000004C 0020 MOVS R0,#+0
\ 0000004E 3070 STRB R0,[R6, #+0]
458 return (len);
\ 00000050 3800 MOVS R0,R7
\ 00000052 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ ??OSFlagNameGet_1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -