📄 os_flag.lst
字号:
\ 0000008E 0090 STR R0,[SP, #+0]
\ 00000090 06E0 B ??OSFlagDel_10
315 while (pnode != (OS_FLAG_NODE *)0) { /* Ready ALL tasks waiting for flags */
316 OS_FlagTaskRdy(pnode, (OS_FLAGS)0);
\ ??OSFlagDel_11:
\ 00000092 0021 MOVS R1,#+0
\ 00000094 0098 LDR R0,[SP, #+0]
\ 00000096 ........ BL OS_FlagTaskRdy
317 pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
\ 0000009A 0098 LDR R0,[SP, #+0]
\ 0000009C 0068 LDR R0,[R0, #+0]
\ 0000009E 0090 STR R0,[SP, #+0]
318 }
\ ??OSFlagDel_10:
\ 000000A0 0098 LDR R0,[SP, #+0]
\ 000000A2 0028 CMP R0,#+0
\ 000000A4 F5D1 BNE ??OSFlagDel_11
319 #if OS_EVENT_NAME_SIZE > 1
320 pgrp->OSFlagName[0] = '?'; /* Unknown name */
\ 000000A6 3F20 MOVS R0,#+63
\ 000000A8 A072 STRB R0,[R4, #+10]
321 pgrp->OSFlagName[1] = OS_ASCII_NUL;
\ 000000AA 0020 MOVS R0,#+0
\ 000000AC E072 STRB R0,[R4, #+11]
322 #endif
323 pgrp->OSFlagType = OS_EVENT_TYPE_UNUSED;
\ 000000AE 0020 MOVS R0,#+0
\ 000000B0 2070 STRB R0,[R4, #+0]
324 pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list */
\ 000000B2 .... LDR R0,??DataTable8 ;; OSFlagFreeList
\ 000000B4 0068 LDR R0,[R0, #+0]
\ 000000B6 6060 STR R0,[R4, #+4]
325 pgrp->OSFlagFlags = (OS_FLAGS)0;
\ 000000B8 0020 MOVS R0,#+0
\ 000000BA 2081 STRH R0,[R4, #+8]
326 OSFlagFreeList = pgrp;
\ 000000BC .... LDR R0,??DataTable8 ;; OSFlagFreeList
\ 000000BE 0460 STR R4,[R0, #+0]
327 OS_EXIT_CRITICAL();
\ 000000C0 3000 MOVS R0,R6
\ 000000C2 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
328 if (tasks_waiting == TRUE) { /* Reschedule only if task(s) were waiting */
\ 000000C6 012F CMP R7,#+1
\ 000000C8 01D1 BNE ??OSFlagDel_12
329 OS_Sched(); /* Find highest priority task ready to run */
\ 000000CA ........ _BLF OS_Sched,??OS_Sched??rT
330 }
331 *err = OS_NO_ERR;
\ ??OSFlagDel_12:
\ 000000CE 0020 MOVS R0,#+0
\ 000000D0 2870 STRB R0,[R5, #+0]
332 return ((OS_FLAG_GRP *)0); /* Event Flag Group has been deleted */
\ 000000D2 0020 MOVS R0,#+0
\ 000000D4 05E0 B ??OSFlagDel_1
333
334 default:
335 OS_EXIT_CRITICAL();
\ ??OSFlagDel_8:
\ 000000D6 3000 MOVS R0,R6
\ 000000D8 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
336 *err = OS_ERR_INVALID_OPT;
\ 000000DC 0720 MOVS R0,#+7
\ 000000DE 2870 STRB R0,[R5, #+0]
337 return (pgrp);
\ 000000E0 2000 MOVS R0,R4
\ ??OSFlagDel_1:
\ 000000E2 02B0 ADD SP,SP,#+8
\ 000000E4 F0BC POP {R4-R7}
\ 000000E6 02BC POP {R1}
\ 000000E8 0847 BX R1 ;; return
338 }
339 }
340 #endif
341 /*$PAGE*/
342 /*
343 *********************************************************************************************************
344 * GET THE NAME OF AN EVENT FLAG GROUP
345 *
346 * Description: This function is used to obtain the name assigned to an event flag group
347 *
348 * Arguments : pgrp is a pointer to the event flag group.
349 *
350 * pname is a pointer to an ASCII string that will receive the name of the event flag
351 * group. The string must be able to hold at least OS_FLAG_NAME_SIZE characters.
352 *
353 * err is a pointer to an error code that can contain one of the following values:
354 *
355 * OS_NO_ERR if the requested task is resumed
356 * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group
357 * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
358 * OS_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp'
359 *
360 * Returns : The length of the string or 0 if the 'pgrp' is a NULL pointer.
361 *********************************************************************************************************
362 */
363
364 #if OS_FLAG_NAME_SIZE > 1
\ In segment CODE, align 4, keep-with-next
365 INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp, char *pname, INT8U *err)
366 {
\ OSFlagNameGet:
\ 00000000 F0B5 PUSH {R4-R7,LR}
\ 00000002 0600 MOVS R6,R0
\ 00000004 0F00 MOVS R7,R1
\ 00000006 1400 MOVS R4,R2
367 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
368 OS_CPU_SR cpu_sr;
369 #endif
370 INT8U len;
371
372
373 OS_ENTER_CRITICAL();
\ 00000008 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 0000000C 0500 MOVS R5,R0
374 #if OS_ARG_CHK_EN > 0
375 if (pgrp == (OS_FLAG_GRP *)0) { /* Is 'pgrp' a NULL pointer? */
\ 0000000E 002E CMP R6,#+0
\ 00000010 06D1 BNE ??OSFlagNameGet_0
376 OS_EXIT_CRITICAL(); /* Yes */
\ 00000012 2800 MOVS R0,R5
\ 00000014 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
377 *err = OS_FLAG_INVALID_PGRP;
\ 00000018 9620 MOVS R0,#+150
\ 0000001A 2070 STRB R0,[R4, #+0]
378 return (0);
\ 0000001C 0020 MOVS R0,#+0
\ 0000001E 1EE0 B ??OSFlagNameGet_1
379 }
380 if (pname == (char *)0) { /* Is 'pname' a NULL pointer? */
\ ??OSFlagNameGet_0:
\ 00000020 002F CMP R7,#+0
\ 00000022 06D1 BNE ??OSFlagNameGet_2
381 OS_EXIT_CRITICAL(); /* Yes */
\ 00000024 2800 MOVS R0,R5
\ 00000026 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
382 *err = OS_ERR_PNAME_NULL;
\ 0000002A 0F20 MOVS R0,#+15
\ 0000002C 2070 STRB R0,[R4, #+0]
383 return (0);
\ 0000002E 0020 MOVS R0,#+0
\ 00000030 15E0 B ??OSFlagNameGet_1
384 }
385 #endif
386 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
\ ??OSFlagNameGet_2:
\ 00000032 3078 LDRB R0,[R6, #+0]
\ 00000034 0528 CMP R0,#+5
\ 00000036 06D0 BEQ ??OSFlagNameGet_3
387 OS_EXIT_CRITICAL();
\ 00000038 2800 MOVS R0,R5
\ 0000003A ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
388 *err = OS_ERR_EVENT_TYPE;
\ 0000003E 0120 MOVS R0,#+1
\ 00000040 2070 STRB R0,[R4, #+0]
389 return (0);
\ 00000042 0020 MOVS R0,#+0
\ 00000044 0BE0 B ??OSFlagNameGet_1
390 }
391 len = OS_StrCopy(pname, pgrp->OSFlagName); /* Copy name from OS_FLAG_GRP */
\ ??OSFlagNameGet_3:
\ 00000046 0A36 ADDS R6,R6,#+10
\ 00000048 3100 MOVS R1,R6
\ 0000004A 3800 MOVS R0,R7
\ 0000004C ........ _BLF OS_StrCopy,??OS_StrCopy??rT
\ 00000050 0600 MOVS R6,R0
392 OS_EXIT_CRITICAL();
\ 00000052 2800 MOVS R0,R5
\ 00000054 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
393 *err = OS_NO_ERR;
\ 00000058 0020 MOVS R0,#+0
\ 0000005A 2070 STRB R0,[R4, #+0]
394 return (len);
\ 0000005C 3000 MOVS R0,R6
\ ??OSFlagNameGet_1:
\ 0000005E F0BC POP {R4-R7}
\ 00000060 02BC POP {R1}
\ 00000062 0847 BX R1 ;; return
395 }
396 #endif
397
398 /*$PAGE*/
399 /*
400 *********************************************************************************************************
401 * ASSIGN A NAME TO AN EVENT FLAG GROUP
402 *
403 * Description: This function assigns a name to an event flag group.
404 *
405 * Arguments : pgrp is a pointer to the event flag group.
406 *
407 * pname is a pointer to an ASCII string that will be used as the name of the event flag
408 * group. The string must be able to hold at least OS_FLAG_NAME_SIZE characters.
409 *
410 * err is a pointer to an error code that can contain one of the following values:
411 *
412 * OS_NO_ERR if the requested task is resumed
413 * OS_ERR_EVENT_TYPE if 'pevent' is not pointing to an event flag group
414 * OS_ERR_PNAME_NULL You passed a NULL pointer for 'pname'
415 * OS_FLAG_INVALID_PGRP if you passed a NULL pointer for 'pgrp'
416 *
417 * Returns : None
418 *********************************************************************************************************
419 */
420
421 #if OS_FLAG_NAME_SIZE > 1
\ In segment CODE, align 4, keep-with-next
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -