📄 os_flag.lst
字号:
\ 000000C4 3F00A0E3 MOV R0,#+63
\ 000000C8 0A00CAE5 STRB R0,[R10, #+10]
324 pgrp->OSFlagName[1] = OS_ASCII_NUL;
\ 000000CC 0000A0E3 MOV R0,#+0
\ 000000D0 0B00CAE5 STRB R0,[R10, #+11]
325 #endif
326 pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
\ 000000D4 0000A0E3 MOV R0,#+0
\ 000000D8 0000CAE5 STRB R0,[R10, #+0]
327 pgrp->OSFlagWaitList = (void *)OSFlagFreeList; /* Return group to free list */
\ 000000DC ........ LDR R0,??DataTable34 ;; OSFlagFreeList
\ 000000E0 000090E5 LDR R0,[R0, #+0]
\ 000000E4 04008AE5 STR R0,[R10, #+4]
328 pgrp->OSFlagFlags = (OS_FLAGS)0;
\ 000000E8 0000A0E3 MOV R0,#+0
\ 000000EC B800CAE1 STRH R0,[R10, #+8]
329 OSFlagFreeList = pgrp;
\ 000000F0 ........ LDR R0,??DataTable34 ;; OSFlagFreeList
\ 000000F4 00A080E5 STR R10,[R0, #+0]
330 OS_EXIT_CRITICAL();
\ 000000F8 0900B0E1 MOVS R0,R9
\ 000000FC ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
331 *err = OS_ERR_NONE;
\ 00000100 0000A0E3 MOV R0,#+0
\ 00000104 0000C5E5 STRB R0,[R5, #+0]
332 pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
\ 00000108 0000A0E3 MOV R0,#+0
\ 0000010C 0080B0E1 MOVS R8,R0
\ 00000110 2A0000EA B ??OSFlagDel_11
333 } else {
334 OS_EXIT_CRITICAL();
\ ??OSFlagDel_10:
\ 00000114 0900B0E1 MOVS R0,R9
\ 00000118 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
335 *err = OS_ERR_TASK_WAITING;
\ 0000011C 4900A0E3 MOV R0,#+73
\ 00000120 0000C5E5 STRB R0,[R5, #+0]
336 pgrp_return = pgrp;
\ 00000124 0A80B0E1 MOVS R8,R10
\ 00000128 240000EA B ??OSFlagDel_11
337 }
338 break;
339
340 case OS_DEL_ALWAYS: /* Always delete the event flag group */
341 pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
\ ??OSFlagDel_8:
\ 0000012C 04009AE5 LDR R0,[R10, #+4]
\ 00000130 0070B0E1 MOVS R7,R0
342 while (pnode != (OS_FLAG_NODE *)0) { /* Ready ALL tasks waiting for flags */
\ ??OSFlagDel_12:
\ 00000134 000057E3 CMP R7,#+0
\ 00000138 0400000A BEQ ??OSFlagDel_13
343 (void)OS_FlagTaskRdy(pnode, (OS_FLAGS)0);
\ 0000013C 0010A0E3 MOV R1,#+0
\ 00000140 0700B0E1 MOVS R0,R7
\ 00000144 ........ BL OS_FlagTaskRdy
344 pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
\ 00000148 007097E5 LDR R7,[R7, #+0]
\ 0000014C F8FFFFEA B ??OSFlagDel_12
345 }
346 #if OS_FLAG_NAME_SIZE > 1
347 pgrp->OSFlagName[0] = '?'; /* Unknown name */
\ ??OSFlagDel_13:
\ 00000150 3F00A0E3 MOV R0,#+63
\ 00000154 0A00CAE5 STRB R0,[R10, #+10]
348 pgrp->OSFlagName[1] = OS_ASCII_NUL;
\ 00000158 0000A0E3 MOV R0,#+0
\ 0000015C 0B00CAE5 STRB R0,[R10, #+11]
349 #endif
350 pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
\ 00000160 0000A0E3 MOV R0,#+0
\ 00000164 0000CAE5 STRB R0,[R10, #+0]
351 pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list */
\ 00000168 ........ LDR R0,??DataTable34 ;; OSFlagFreeList
\ 0000016C 000090E5 LDR R0,[R0, #+0]
\ 00000170 04008AE5 STR R0,[R10, #+4]
352 pgrp->OSFlagFlags = (OS_FLAGS)0;
\ 00000174 0000A0E3 MOV R0,#+0
\ 00000178 B800CAE1 STRH R0,[R10, #+8]
353 OSFlagFreeList = pgrp;
\ 0000017C ........ LDR R0,??DataTable34 ;; OSFlagFreeList
\ 00000180 00A080E5 STR R10,[R0, #+0]
354 OS_EXIT_CRITICAL();
\ 00000184 0900B0E1 MOVS R0,R9
\ 00000188 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
355 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
\ 0000018C 010056E3 CMP R6,#+1
\ 00000190 0000001A BNE ??OSFlagDel_14
356 OS_Sched(); /* Find highest priority task ready to run */
\ 00000194 ........ _BLF OS_Sched,??OS_Sched??rA
357 }
358 *err = OS_ERR_NONE;
\ ??OSFlagDel_14:
\ 00000198 0000A0E3 MOV R0,#+0
\ 0000019C 0000C5E5 STRB R0,[R5, #+0]
359 pgrp_return = (OS_FLAG_GRP *)0; /* Event Flag Group has been deleted */
\ 000001A0 0000A0E3 MOV R0,#+0
\ 000001A4 0080B0E1 MOVS R8,R0
\ 000001A8 040000EA B ??OSFlagDel_11
360 break;
361
362 default:
363 OS_EXIT_CRITICAL();
\ ??OSFlagDel_9:
\ 000001AC 0900B0E1 MOVS R0,R9
\ 000001B0 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
364 *err = OS_ERR_INVALID_OPT;
\ 000001B4 0700A0E3 MOV R0,#+7
\ 000001B8 0000C5E5 STRB R0,[R5, #+0]
365 pgrp_return = pgrp;
\ 000001BC 0A80B0E1 MOVS R8,R10
366 break;
367 }
368 return (pgrp_return);
\ ??OSFlagDel_11:
\ 000001C0 0800B0E1 MOVS R0,R8
\ ??OSFlagDel_1:
\ 000001C4 F087BDE8 POP {R4-R10,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 * err 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 *
390 * Returns : The length of the string or 0 if the 'pgrp' is a NULL pointer.
391 *********************************************************************************************************
392 */
393
394 #if OS_FLAG_NAME_SIZE > 1
\ In segment CODE, align 4, keep-with-next
395 INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, INT8U *pname, INT8U *err)
396 {
\ OSFlagNameGet:
\ 00000000 F0412DE9 PUSH {R4-R8,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
\ 0000000C 0260B0E1 MOVS R6,R2
397 INT8U len;
398 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
399 OS_CPU_SR cpu_sr = 0;
\ 00000010 0000A0E3 MOV R0,#+0
\ 00000014 0080B0E1 MOVS R8,R0
400 #endif
401
402
403
404 OS_ENTER_CRITICAL();
\ 00000018 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 0000001C 0080B0E1 MOVS R8,R0
405 #if OS_ARG_CHK_EN > 0
406 if (err == (INT8U *)0) { /* Validate 'err' */
\ 00000020 000056E3 CMP R6,#+0
\ 00000024 0300001A BNE ??OSFlagNameGet_0
407 OS_EXIT_CRITICAL();
\ 00000028 0800B0E1 MOVS R0,R8
\ 0000002C ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
408 return (0);
\ 00000030 0000A0E3 MOV R0,#+0
\ 00000034 210000EA B ??OSFlagNameGet_1
409 }
410 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
\ ??OSFlagNameGet_0:
\ 00000038 000054E3 CMP R4,#+0
\ 0000003C 0500001A BNE ??OSFlagNameGet_2
411 OS_EXIT_CRITICAL(); /* Yes */
\ 00000040 0800B0E1 MOVS R0,R8
\ 00000044 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
412 *err = OS_ERR_FLAG_INVALID_PGRP;
\ 00000048 6E00A0E3 MOV R0,#+110
\ 0000004C 0000C6E5 STRB R0,[R6, #+0]
413 return (0);
\ 00000050 0000A0E3 MOV R0,#+0
\ 00000054 190000EA B ??OSFlagNameGet_1
414 }
415 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
\ ??OSFlagNameGet_2:
\ 00000058 000055E3 CMP R5,#+0
\ 0000005C 0500001A BNE ??OSFlagNameGet_3
416 OS_EXIT_CRITICAL(); /* Yes */
\ 00000060 0800B0E1 MOVS R0,R8
\ 00000064 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
417 *err = OS_ERR_PNAME_NULL;
\ 00000068 0C00A0E3 MOV R0,#+12
\ 0000006C 0000C6E5 STRB R0,[R6, #+0]
418 return (0);
\ 00000070 0000A0E3 MOV R0,#+0
\ 00000074 110000EA B ??OSFlagNameGet_1
419 }
420 #endif
421 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
\ ??OSFlagNameGet_3:
\ 00000078 0000D4E5 LDRB R0,[R4, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -