⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_flag.s79

📁 ARM仿真案例
💻 S79
📖 第 1 页 / 共 5 页
字号:
        STR      R0,[R4, #+4]
//  325              pgrp->OSFlagFlags    = (OS_FLAGS)0;
        MOVS     R0,#+0
        STRH     R0,[R4, #+8]
//  326              OSFlagFreeList       = pgrp;
        LDR      R0,??DataTable8  ;; OSFlagFreeList
        STR      R4,[R0, #+0]
//  327              OS_EXIT_CRITICAL();
        MOVS     R0,R6
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  328              if (tasks_waiting == TRUE) {                  /* Reschedule only if task(s) were waiting  */
        CMP      R7,#+1
        BNE      ??OSFlagDel_12
//  329                  OS_Sched();                               /* Find highest priority task ready to run  */
        _BLF     OS_Sched,??OS_Sched??rT
//  330              }
//  331              *err = OS_NO_ERR;
??OSFlagDel_12:
        MOVS     R0,#+0
        STRB     R0,[R5, #+0]
//  332              return ((OS_FLAG_GRP *)0);                    /* Event Flag Group has been deleted        */
        MOVS     R0,#+0
        B        ??OSFlagDel_1
//  333 
//  334         default:
//  335              OS_EXIT_CRITICAL();
??OSFlagDel_8:
        MOVS     R0,R6
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  336              *err = OS_ERR_INVALID_OPT;
        MOVS     R0,#+7
        STRB     R0,[R5, #+0]
//  337              return (pgrp);
        MOVS     R0,R4
??OSFlagDel_1:
        ADD      SP,SP,#+8
        CFI CFA R13+20
        POP      {R4-R7}
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock5
//  338     }
//  339 }

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable4:
        DC32     OSIntNesting

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable8:
        DC32     OSFlagFreeList

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI NoFunction
        ARM
??OSFlagNameGet??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock6
        REQUIRE OSFlagNameGet
//  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

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon1
        CFI Function OSFlagNameGet
        THUMB
//  365 INT8U  OSFlagNameGet (OS_FLAG_GRP *pgrp, char *pname, INT8U *err)
//  366 {
OSFlagNameGet:
        PUSH     {R4-R7,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA R13+20
        MOVS     R6,R0
        MOVS     R7,R1
        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();
        _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
        MOVS     R5,R0
//  374 #if OS_ARG_CHK_EN > 0
//  375     if (pgrp == (OS_FLAG_GRP *)0) {              /* Is 'pgrp' a NULL pointer?                          */
        CMP      R6,#+0
        BNE      ??OSFlagNameGet_0
//  376         OS_EXIT_CRITICAL();                      /* Yes                                                */
        MOVS     R0,R5
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  377         *err = OS_FLAG_INVALID_PGRP;
        MOVS     R0,#+150
        STRB     R0,[R4, #+0]
//  378         return (0);
        MOVS     R0,#+0
        B        ??OSFlagNameGet_1
//  379     }
//  380     if (pname == (char *)0) {                    /* Is 'pname' a NULL pointer?                         */
??OSFlagNameGet_0:
        CMP      R7,#+0
        BNE      ??OSFlagNameGet_2
//  381         OS_EXIT_CRITICAL();                      /* Yes                                                */
        MOVS     R0,R5
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  382         *err = OS_ERR_PNAME_NULL;
        MOVS     R0,#+15
        STRB     R0,[R4, #+0]
//  383         return (0);
        MOVS     R0,#+0
        B        ??OSFlagNameGet_1
//  384     }
//  385 #endif
//  386     if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
??OSFlagNameGet_2:
        LDRB     R0,[R6, #+0]
        CMP      R0,#+5
        BEQ      ??OSFlagNameGet_3
//  387         OS_EXIT_CRITICAL();
        MOVS     R0,R5
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  388         *err = OS_ERR_EVENT_TYPE;
        MOVS     R0,#+1
        STRB     R0,[R4, #+0]
//  389         return (0);
        MOVS     R0,#+0
        B        ??OSFlagNameGet_1
//  390     }
//  391     len  = OS_StrCopy(pname, pgrp->OSFlagName);  /* Copy name from OS_FLAG_GRP                         */
??OSFlagNameGet_3:
        ADDS     R6,R6,#+10
        MOVS     R1,R6
        MOVS     R0,R7
        _BLF     OS_StrCopy,??OS_StrCopy??rT
        MOVS     R6,R0
//  392     OS_EXIT_CRITICAL();
        MOVS     R0,R5
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  393     *err = OS_NO_ERR;
        MOVS     R0,#+0
        STRB     R0,[R4, #+0]
//  394     return (len);
        MOVS     R0,R6
??OSFlagNameGet_1:
        POP      {R4-R7}
        POP      {R1}
        BX       R1               ;; return
        CFI EndBlock cfiBlock7
//  395 }

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock8 Using cfiCommon0
        CFI NoFunction
        ARM
??OSFlagNameSet??rA:
        ADD      R12,PC,#+1
        BX       R12
        CFI EndBlock cfiBlock8
        REQUIRE OSFlagNameSet
//  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

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock9 Using cfiCommon1
        CFI Function OSFlagNameSet
        THUMB
//  422 void  OSFlagNameSet (OS_FLAG_GRP *pgrp, char *pname, INT8U *err)
//  423 {
OSFlagNameSet:
        PUSH     {R4-R7,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA R13+20
        MOVS     R5,R0
        MOVS     R6,R1
        MOVS     R4,R2
//  424 #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
//  425     OS_CPU_SR  cpu_sr;
//  426 #endif
//  427     INT8U      len;
//  428 
//  429 
//  430     OS_ENTER_CRITICAL();
        _BLF     OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
        MOVS     R7,R0
//  431 #if OS_ARG_CHK_EN > 0
//  432     if (pgrp == (OS_FLAG_GRP *)0) {              /* Is 'pgrp' a NULL pointer?                          */
        CMP      R5,#+0
        BNE      ??OSFlagNameSet_0
//  433         OS_EXIT_CRITICAL();                      /* Yes                                                */
        MOVS     R0,R7
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  434         *err = OS_FLAG_INVALID_PGRP;
        MOVS     R0,#+150
        STRB     R0,[R4, #+0]
//  435         return;
        B        ??OSFlagNameSet_1
//  436     }
//  437     if (pname == (char *)0) {                    /* Is 'pname' a NULL pointer?                         */
??OSFlagNameSet_0:
        CMP      R6,#+0
        BNE      ??OSFlagNameSet_2
//  438         OS_EXIT_CRITICAL();                      /* Yes                                                */
        MOVS     R0,R7
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  439         *err = OS_ERR_PNAME_NULL;
        MOVS     R0,#+15
        STRB     R0,[R4, #+0]
//  440         return;
        B        ??OSFlagNameSet_1
//  441     }
//  442 #endif
//  443     if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {
??OSFlagNameSet_2:
        LDRB     R0,[R5, #+0]
        CMP      R0,#+5
        BEQ      ??OSFlagNameSet_3
//  444         OS_EXIT_CRITICAL();
        MOVS     R0,R7
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  445         *err = OS_ERR_EVENT_TYPE;
        MOVS     R0,#+1
        STRB     R0,[R4, #+0]
//  446         return;
        B        ??OSFlagNameSet_1
//  447     }
//  448     len = OS_StrLen(pname);                      /* Can we fit the string in the storage area?         */
??OSFlagNameSet_3:
        MOVS     R0,R6
        _BLF     OS_StrLen,??OS_StrLen??rT
//  449     if (len > (OS_FLAG_NAME_SIZE - 1)) {         /* No                                                 */
        CMP      R0,#+32
        BCC      ??OSFlagNameSet_4
//  450         OS_EXIT_CRITICAL();
        MOVS     R0,R7
        _BLF     OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
//  451         *err = OS_ERR_FLAG_NAME_TOO_LONG;
        MOVS     R0,#+13
        STRB     R0,[R4, #+0]
//  452         return;
        B        ??OSFlagNameSet_1
//  453     } 
//  454     (void)OS_StrCopy(pgrp->OSFlagName, pname);   /* Yes, copy name from OS_FLAG_GRP                    */
??OSFlagNameSet_4:
        MOVS     R1,R6
        ADDS     R5,R5,#+10
        MOVS     R0,R5
        _BLF     OS_StrCopy,??OS_StrCopy??rT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -