📄 os_flag.lst
字号:
348 pgrp->OSFlagName[1] = OS_ASCII_NUL;
\ 00000092 E872 STRB R0,[R5, #+11]
349 #endif
350 pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
\ 00000094 2870 STRB R0,[R5, #+0]
351 pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list */
\ 00000096 3868 LDR R0,[R7, #+0]
\ 00000098 6860 STR R0,[R5, #+4]
352 pgrp->OSFlagFlags = (OS_FLAGS)0;
\ 0000009A 4846 MOV R0,R9
\ 0000009C 2881 STRH R0,[R5, #+8]
353 OSFlagFreeList = pgrp;
\ 0000009E 3D60 STR R5,[R7, #+0]
354 OS_EXIT_CRITICAL();
\ 000000A0 4046 MOV R0,R8
\ 000000A2 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
355 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
\ 000000A6 012E CMP R6,#+1
\ 000000A8 01D1 BNE.N ??OSFlagDel_8
356 OS_Sched(); /* Find highest priority task ready to run */
\ 000000AA ........ _BLF OS_Sched,??OS_Sched??rT
357 }
358 *perr = OS_ERR_NONE;
\ ??OSFlagDel_8:
\ 000000AE 4846 MOV R0,R9
\ 000000B0 2070 STRB R0,[R4, #+0]
359 pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
\ 000000B2 4D46 MOV R5,R9
\ 000000B4 04E0 B.N ??OSFlagDel_9
360 break;
361
362 default:
363 OS_EXIT_CRITICAL();
\ ??OSFlagDel_6:
\ 000000B6 4046 MOV R0,R8
\ 000000B8 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
364 *perr = OS_ERR_INVALID_OPT;
\ 000000BC 0720 MOVS R0,#+7
\ 000000BE 2070 STRB R0,[R4, #+0]
365 pgrp_return = pgrp;
366 break;
367 }
368 return (pgrp_return);
\ ??OSFlagDel_9:
\ 000000C0 2800 MOVS R0,R5
\ ??OSFlagDel_1:
\ 000000C2 BDE8F08F POP {R4-R11,PC} ;; return
369 }
370 #endif
371 /*$PAGE*/
372 /*
373 *********************************************************************************************************
374 * GET THE NAME OF AN EVENT FLAG GROUP
375 *
376 * Description: This function is used to obtain the name assigned to an event flag group
377 *
378 * Arguments : pgrp is a pointer to the event flag group.
379 *
380 * pname is a pointer to an ASCII string that will receive the name of the event flag
381 * group. The string must be able to hold at least OS_FLAG_NAME_SIZE characters.
382 *
383 * perr is a pointer to an error code that can contain one of the following values:
384 *
385 * OS_ERR_NONE if the requested task is resumed
386 * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group
387 * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
388 * OS_ERR_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp'
389 * OS_ERR_NAME_GET_ISR if you called this function from an ISR
390 *
391 * Returns : The length of the string or 0 if the 'pgrp' is a NULL pointer.
392 *********************************************************************************************************
393 */
394
395 #if OS_FLAG_NAME_SIZE > 1
\ In segment CODE, align 4, keep-with-next
396 INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr)
397 {
\ OSFlagNameGet:
\ 00000000 F0B5 PUSH {R4-R7,LR}
\ 00000002 0600 MOVS R6,R0
\ 00000004 0F00 MOVS R7,R1
\ 00000006 1400 MOVS R4,R2
398 INT8U len;
399 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
400 OS_CPU_SR cpu_sr = 0;
401 #endif
402
403
404
405 #if OS_ARG_CHK_EN > 0
406 if (perr == (INT8U *)0) { /* Validate 'perr' */
407 return (0);
408 }
409 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
410 *perr = OS_ERR_FLAG_INVALID_PGRP;
411 return (0);
412 }
413 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
414 *perr = OS_ERR_PNAME_NULL;
415 return (0);
416 }
417 #endif
418 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ 00000008 .... LDR.N R0,??DataTable6 ;; OSIntNesting
\ 0000000A 0078 LDRB R0,[R0, #+0]
\ 0000000C 0028 CMP R0,#+0
\ 0000000E 03D0 BEQ.N ??OSFlagNameGet_0
419 *perr = OS_ERR_NAME_GET_ISR;
\ 00000010 1120 MOVS R0,#+17
\ 00000012 2070 STRB R0,[R4, #+0]
420 return (0);
\ 00000014 0020 MOVS R0,#+0
\ 00000016 F0BD POP {R4-R7,PC}
421 }
422 OS_ENTER_CRITICAL();
\ ??OSFlagNameGet_0:
\ 00000018 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 0000001C 0500 MOVS R5,R0
423 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
\ 0000001E 3078 LDRB R0,[R6, #+0]
\ 00000020 0528 CMP R0,#+5
\ 00000022 06D0 BEQ.N ??OSFlagNameGet_1
424 OS_EXIT_CRITICAL();
\ 00000024 2800 MOVS R0,R5
\ 00000026 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
425 *perr = OS_ERR_EVENT_TYPE;
\ 0000002A 0120 MOVS R0,#+1
\ 0000002C 2070 STRB R0,[R4, #+0]
426 return (0);
\ 0000002E 0020 MOVS R0,#+0
\ 00000030 F0BD POP {R4-R7,PC}
427 }
428 len = OS_StrCopy(pname, pgrp->OSFlagName); /* Copy name from OS_FLAG_GRP */
\ ??OSFlagNameGet_1:
\ 00000032 0A36 ADDS R6,R6,#+10
\ 00000034 3100 MOVS R1,R6
\ 00000036 3800 MOVS R0,R7
\ 00000038 ........ _BLF OS_StrCopy,??OS_StrCopy??rT
\ 0000003C 0600 MOVS R6,R0
429 OS_EXIT_CRITICAL();
\ 0000003E 2800 MOVS R0,R5
\ 00000040 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
430 *perr = OS_ERR_NONE;
\ 00000044 0020 MOVS R0,#+0
\ 00000046 2070 STRB R0,[R4, #+0]
431 return (len);
\ 00000048 3000 MOVS R0,R6
\ 0000004A F0BD POP {R4-R7,PC} ;; return
432 }
433 #endif
434
435 /*$PAGE*/
436 /*
437 *********************************************************************************************************
438 * ASSIGN A NAME TO AN EVENT FLAG GROUP
439 *
440 * Description: This function assigns a name to an event flag group.
441 *
442 * Arguments : pgrp is a pointer to the event flag group.
443 *
444 * pname is a pointer to an ASCII string that will be used as the name of the event flag
445 * group. The string must be able to hold at least OS_FLAG_NAME_SIZE characters.
446 *
447 * perr is a pointer to an error code that can contain one of the following values:
448 *
449 * OS_ERR_NONE if the requested task is resumed
450 * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group
451 * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
452 * OS_ERR_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp'
453 * OS_ERR_NAME_SET_ISR if you called this function from an ISR
454 *
455 * Returns : None
456 *********************************************************************************************************
457 */
458
459 #if OS_FLAG_NAME_SIZE > 1
\ In segment CODE, align 4, keep-with-next
460 void OSFlagNameSet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *perr)
461 {
\ OSFlagNameSet:
\ 00000000 F0B5 PUSH {R4-R7,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
\ 00000006 1600 MOVS R6,R2
462 INT8U len;
463 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
464 OS_CPU_SR cpu_sr = 0;
465 #endif
466
467
468
469 #if OS_ARG_CHK_EN > 0
470 if (perr == (INT8U *)0) { /* Validate 'perr' */
471 return;
472 }
473 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
474 *perr = OS_ERR_FLAG_INVALID_PGRP;
475 return;
476 }
477 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
478 *perr = OS_ERR_PNAME_NULL;
479 return;
480 }
481 #endif
482 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -