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

📄 osal_tasks.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \                                 In segment BANKED_CODE, align 1, keep-with-next
     99          void osalTaskAdd( pTaskInitFn pfnInit,
   \                     osalTaskAdd:
    100                            pTaskEventHandlerFn pfnEventProcessor,
    101                            byte taskPriority)
    102          {
   \   000000   74F1         MOV     A,#-0xf
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 15
   \   000005                ; Auto size: 3
   \   000005   74FD         MOV     A,#-0x3
   \   000007   12....       LCALL   ?ALLOC_XSTACK8
   \   00000A   85..82       MOV     DPL,?XSP + 0
   \   00000D   85..83       MOV     DPH,?XSP + 1
   \   000010   E9           MOV     A,R1
   \   000011   F0           MOVX    @DPTR,A
   \   000012   A3           INC     DPTR
   \   000013   EA           MOV     A,R2
   \   000014   F0           MOVX    @DPTR,A
   \   000015   A3           INC     DPTR
   \   000016   EB           MOV     A,R3
   \   000017   F0           MOVX    @DPTR,A
   \   000018   EC           MOV     A,R4
   \   000019   FE           MOV     R6,A
   \   00001A   7412         MOV     A,#0x12
   \   00001C   12....       LCALL   ?XSTACK_DISP0_8
   \   00001F   E0           MOVX    A,@DPTR
   \   000020   F5..         MOV     ?V0 + 0,A
   \   000022   A3           INC     DPTR
   \   000023   E0           MOVX    A,@DPTR
   \   000024   F5..         MOV     ?V0 + 1,A
   \   000026   A3           INC     DPTR
   \   000027   E0           MOVX    A,@DPTR
   \   000028   F5..         MOV     ?V0 + 2,A
    103            osalTaskRec_t *newTask;
    104            osalTaskRec_t *srchTask;
    105            osalTaskRec_t **ptr;
    106          
    107            newTask = osal_mem_alloc( sizeof( osalTaskRec_t ) );
   \   00002A                ; Setup parameters for call to function osal_mem_alloc
   \   00002A   7A0C         MOV     R2,#0xc
   \   00002C   7B00         MOV     R3,#0x0
   \   00002E   90....       MOV     DPTR,#(osal_mem_alloc & 0xffff)
   \   000031   74..         MOV     A,#((osal_mem_alloc >> 16) & 0xff)
   \   000033   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    108            if ( newTask )
   \   000036   EA           MOV     A,R2
   \   000037   7001         JNZ     ??osalTaskAdd_0
   \   000039   EB           MOV     A,R3
   \                     ??osalTaskAdd_0:
   \   00003A   7003         JNZ     $+5
   \   00003C   02....       LJMP    ??osalTaskAdd_1 & 0xFFFF
    109            {
    110                // Fill in new task
    111                newTask->pfnInit           = pfnInit;
   \   00003F   85..82       MOV     DPL,?XSP + 0
   \   000042   85..83       MOV     DPH,?XSP + 1
   \   000045   E0           MOVX    A,@DPTR
   \   000046   F5..         MOV     ?V0 + 4,A
   \   000048   A3           INC     DPTR
   \   000049   E0           MOVX    A,@DPTR
   \   00004A   F5..         MOV     ?V0 + 5,A
   \   00004C   A3           INC     DPTR
   \   00004D   E0           MOVX    A,@DPTR
   \   00004E   F5..         MOV     ?V0 + 6,A
   \   000050   8A82         MOV     DPL,R2
   \   000052   8B83         MOV     DPH,R3
   \   000054   A3           INC     DPTR
   \   000055   A3           INC     DPTR
   \   000056   E5..         MOV     A,?V0 + 4
   \   000058   F0           MOVX    @DPTR,A
   \   000059   A3           INC     DPTR
   \   00005A   E5..         MOV     A,?V0 + 5
   \   00005C   F0           MOVX    @DPTR,A
   \   00005D   A3           INC     DPTR
   \   00005E   E5..         MOV     A,?V0 + 6
   \   000060   12....       LCALL   ?Subroutine0 & 0xFFFF
    112                newTask->pfnEventProcessor = pfnEventProcessor;
   \                     ??CrossCallReturnLabel_2:
   \   000063   E5..         MOV     A,?V0 + 0
   \   000065   F0           MOVX    @DPTR,A
   \   000066   A3           INC     DPTR
   \   000067   E5..         MOV     A,?V0 + 1
   \   000069   F0           MOVX    @DPTR,A
   \   00006A   A3           INC     DPTR
   \   00006B   E5..         MOV     A,?V0 + 2
   \   00006D   F0           MOVX    @DPTR,A
    113                newTask->taskID            = taskIDs++;
   \   00006E   90....       MOV     DPTR,#taskIDs
   \   000071   E0           MOVX    A,@DPTR
   \   000072   8A82         MOV     DPL,R2
   \   000074   8B83         MOV     DPH,R3
   \   000076   A3           INC     DPTR
   \   000077   A3           INC     DPTR
   \   000078   A3           INC     DPTR
   \   000079   A3           INC     DPTR
   \   00007A   A3           INC     DPTR
   \   00007B   A3           INC     DPTR
   \   00007C   A3           INC     DPTR
   \   00007D   A3           INC     DPTR
   \   00007E   F0           MOVX    @DPTR,A
   \   00007F   90....       MOV     DPTR,#taskIDs
   \   000082   E0           MOVX    A,@DPTR
   \   000083   04           INC     A
   \   000084   F0           MOVX    @DPTR,A
    114                newTask->taskPriority      = taskPriority;
   \   000085   EE           MOV     A,R6
   \   000086   8A82         MOV     DPL,R2
   \   000088   8B83         MOV     DPH,R3
   \   00008A   A3           INC     DPTR
   \   00008B   A3           INC     DPTR
   \   00008C   A3           INC     DPTR
   \   00008D   A3           INC     DPTR
   \   00008E   A3           INC     DPTR
   \   00008F   A3           INC     DPTR
   \   000090   A3           INC     DPTR
   \   000091   A3           INC     DPTR
   \   000092   A3           INC     DPTR
   \   000093   12....       LCALL   ?Subroutine0 & 0xFFFF
    115                newTask->events            = 0;
   \                     ??CrossCallReturnLabel_3:
   \   000096   A3           INC     DPTR
   \   000097   A3           INC     DPTR
   \   000098   A3           INC     DPTR
   \   000099   A3           INC     DPTR
   \   00009A   A3           INC     DPTR
   \   00009B   E4           CLR     A
   \   00009C   F0           MOVX    @DPTR,A
   \   00009D   A3           INC     DPTR
   \   00009E   F0           MOVX    @DPTR,A
    116                newTask->next              = (osalTaskRec_t *)NULL;
   \   00009F   8A82         MOV     DPL,R2
   \   0000A1   8B83         MOV     DPH,R3
   \   0000A3   F0           MOVX    @DPTR,A
   \   0000A4   A3           INC     DPTR
   \   0000A5   F0           MOVX    @DPTR,A
    117          
    118                // 'ptr' is the address of the pointer to the new task when the new task is
    119                // inserted. Initially it is set to address of 'tasksHead' in case the new
    120                // task is higher priority than the existing head or the queue is empty.
    121                ptr      = &tasksHead;
   \   0000A6   7C..         MOV     R4,#(tasksHead & 0xff)
   \   0000A8   7D..         MOV     R5,#((tasksHead >> 8) & 0xff)
    122                srchTask = tasksHead;
   \   0000AA   90....       MOV     DPTR,#tasksHead
   \   0000AD   8008         SJMP    ??osalTaskAdd_2
    123                while (srchTask)  {
    124                    if (newTask->taskPriority > srchTask->taskPriority)  {
    125                        // insert here. New task has a higher priority than the task
    126                        // with which is being compared and a lower or equal priority
    127                        // to any task that precedes it.
    128                        newTask->next = srchTask;
    129                        *ptr          = newTask;
    130                        return;
    131                    }
    132                    // set 'ptr' to address of the pointer to 'next' in the current
    133                    // (soon to be previous) task control block
    134                    ptr      = &srchTask->next;
   \                     ??osalTaskAdd_3:
   \   0000AF   E8           MOV     A,R0
   \   0000B0   FC           MOV     R4,A
   \   0000B1   E9           MOV     A,R1
   \   0000B2   FD           MOV     R5,A
    135                    srchTask = srchTask->next;
   \   0000B3   8882         MOV     DPL,R0
   \   0000B5   8983         MOV     DPH,R1
   \                     ??osalTaskAdd_2:
   \   0000B7   E0           MOVX    A,@DPTR
   \   0000B8   F8           MOV     R0,A
   \   0000B9   A3           INC     DPTR
   \   0000BA   E0           MOVX    A,@DPTR
   \   0000BB   F9           MOV     R1,A
   \   0000BC   E8           MOV     A,R0
   \   0000BD   7001         JNZ     ??osalTaskAdd_4
   \   0000BF   E9           MOV     A,R1
   \                     ??osalTaskAdd_4:
   \   0000C0   601B         JZ      ??osalTaskAdd_5
   \   0000C2   8882         MOV     DPL,R0
   \   0000C4   8983         MOV     DPH,R1
   \   0000C6   A3           INC     DPTR
   \   0000C7   A3           INC     DPTR
   \   0000C8   A3           INC     DPTR
   \   0000C9   A3           INC     DPTR
   \   0000CA   A3           INC     DPTR
   \   0000CB   A3           INC     DPTR
   \   0000CC   A3           INC     DPTR
   \   0000CD   A3           INC     DPTR
   \   0000CE   A3           INC     DPTR
   \   0000CF   E0           MOVX    A,@DPTR
   \   0000D0   C3           CLR     C
   \   0000D1   9E           SUBB    A,R6
   \   0000D2   50DB         JNC     ??osalTaskAdd_3
   \   0000D4   8A82         MOV     DPL,R2
   \   0000D6   8B83         MOV     DPH,R3
   \   0000D8   E8           MOV     A,R0
   \   0000D9   F0           MOVX    @DPTR,A
   \   0000DA   A3           INC     DPTR
   \   0000DB   E9           MOV     A,R1
   \   0000DC   F0           MOVX    @DPTR,A
    136                }
    137          
    138          	  // We're at the end of the current queue. New task is not higher
    139          	  // priority than any other already in the list. Make it the tail.
    140                // (It is also the head if the queue was initially empty.)
    141                *ptr = newTask;
   \                     ??osalTaskAdd_5:
   \   0000DD   EA           MOV     A,R2
   \   0000DE   F8           MOV     R0,A
   \   0000DF   EB           MOV     A,R3
   \   0000E0   F9           MOV     R1,A
   \   0000E1   8C82         MOV     DPL,R4
   \   0000E3   8D83         MOV     DPH,R5
   \   0000E5   E8           MOV     A,R0
   \   0000E6   F0           MOVX    @DPTR,A
   \   0000E7   A3           INC     DPTR
   \   0000E8   E9           MOV     A,R1
   \   0000E9   F0           MOVX    @DPTR,A
   \                     ??osalTaskAdd_1:
   \   0000EA   7403         MOV     A,#0x3
   \   0000EC   12....       LCALL   ?DEALLOC_XSTACK8
   \   0000EF   7F07         MOV     R7,#0x7
   \   0000F1   02....       LJMP    ?BANKED_LEAVE_XDATA
    142            }
    143            return;
    144          }

   \                                 In segment BANKED_CODE, align 1, keep-with-next
   \                     ?Subroutine0:
   \   000000   F0           MOVX    @DPTR,A
   \   000001   8A82         MOV     DPL,R2
   \   000003   8B83         MOV     DPH,R3
   \   000005   A3           INC     DPTR
   \   000006                REQUIRE ?Subroutine4
   \   000006                ; // Fall through to label ?Subroutine4

   \                                 In segment BANKED_CODE, align 1, keep-with-next
   \                     ?Subroutine4:
   \   000000   A3           INC     DPTR
   \   000001   A3           INC     DPTR
   \   000002   A3           INC     DPTR
   \   000003   A3           INC     DPTR
   \   000004   22           RET
    145          
    146          /*********************************************************************
    147           * @fn      osalInitTasks
    148           *
    149           * @brief   Call each of the tasks initailization functions.
    150           *
    151           * @param   none
    152           *
    153           * @return  none
    154           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    155          void osalInitTasks( void )
   \                     osalInitTasks:
    156          {
   \   000000   74F7         MOV     A,#-0x9
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 9
   \   000005                ; Auto size: 0
    157            // Start at the beginning
    158            activeTask = tasksHead;
   \   000005   90....       MOV     DPTR,#tasksHead
   \   000008   8029         SJMP    ??CrossCallReturnLabel_1
    159          
    160            // Stop at the end
    161            while ( activeTask )
    162            {
    163              if (  activeTask->pfnInit  )
   \                     ??osalInitTasks_0:
   \   00000A   12....       LCALL   ?Subroutine2 & 0xFFFF
   \                     ??CrossCallReturnLabel_0:

⌨️ 快捷键说明

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