BST_VOID BST_SRV_CHNL_ThreadEntry( BST_VOID *pvArg )
{
    BST_OS_MBX_T      **pstMailBox;
    BST_OS_LOCKCNT_T    tThreadLockCnt;
    BST_EVT_HEAD_STRU  *pstEvent;
    BST_UINT32          ulRtnVal;

    if ( BST_NULL_PTR == pvArg )
    {
        return;
    }
    /*
     * 线程参数初始化,包括邮箱,运行标识
     */
    tThreadLockCnt      = BST_OS_ThreadLock ();
    pstMailBox          = (BST_OS_MBX_T **)pvArg;
   *pstMailBox          = BST_OS_CreateMbx
                        ( BST_OS_GetCurrentThreadId(), BST_L_MBOX_SIZE );
    if ( BST_NULL_PTR == *pstMailBox )
    {
        BST_OS_ThreadUnLock ( tThreadLockCnt );
        return;
    }

    BST_SetThreadInitFlag( BST_CHNL_CTRL_THREAD_FLAG );
    g_lstChnlMng        = BST_NULL_PTR;
    BST_OS_InitSpinLock( &g_HighPriCntSpinLock );
    BST_OS_ThreadUnLock ( tThreadLockCnt );

    /*
     * 进入线程主循环,等待邮件,邮件内容为即将执行的任务
     */
    for(;;)
    {
        ulRtnVal        = BST_OS_RecvMail
                       ( *pstMailBox, (BST_VOID **)&pstEvent, BST_OS_SYS_FOREVER );
        BST_ASSERT_NORM( BST_OS_SYS_TIMEOUT == ulRtnVal );
        BST_SRV_ProcChnlCtrEvent( pstEvent );
        /*这里判断指针不为空再次释放,因此需要传递指针的指针*/
        if( BST_NULL_PTR != pstEvent->pucData )
        {
            BST_DBG_LOG1( "tiger BST_OS_FREE 8,", pstEvent->pucData );
            BST_OS_FREE( pstEvent->pucData );
        }
        BST_OS_FREE( pstEvent );
#if ( BST_VER_TYPE == BST_UT_VER )
        break;
#endif
     }
}
BST_VOID BST_SYS_InitPlatform( BST_VOID )
{
    if(BST_FALSE == BST_SYS_ApiGetSupported())
    {
        BST_DBG_LOG("BST_SYS_InitPlatform: bastet nv disabled");
        return;
    }

    BST_OS_InitLock();
    BST_OS_InitSpinLock( &g_MboxLock );
    BST_OS_MemInit();
    BST_OS_TimerSysInit();
    BST_DBG_INITIAL();
    if( BST_TRUE == BST_SYS_InitThread() )
    {
        BST_SYS_InitDriver();
    }
}
BST_UINT32 BST_OS_StaticMemInit( BST_VOID )
{
    BST_INT32                           i;
    BST_UINT32                          lTotalSize = 0;
    BST_UINT32                          lTotalCtrlSize = 0;
    BST_VOID                           *pCtrlStart;
    BST_UINT_PTR                        ulSpaceStart;
    BST_UINT_PTR                        ulSpaceEnd;
    BST_UINT_PTR                        ulCtrlStart;
    BST_INT32                           ulIndex;
    /* calculate mem's size */
    for ( i=0; i<BST_MEM_CTRL_BLOCK_NUMBER; i++ )
    {
        if ( 0x00000003 & g_BstMemBlockInfo[i].ulSize )/* 4 byte Aligned */
        {
            BST_DBG_LOG2("BST_OS_StaticMemInit MemBlockInfo[%d].size(%d) not aligned.\r\n",
                i, g_BstMemBlockInfo[i].ulSize );

            return BST_MEM_ERROR;
        }

        lTotalSize += ( g_BstMemBlockInfo[i].ulSize + BST_MEMORY_RESERVED_BYTES
            + BST_MEM_HEAD_BLOCK_SIZE )
            * g_BstMemBlockInfo[i].ulNumber;
        lTotalCtrlSize += BST_MEM_HEAD_BLOCK_SIZE * g_BstMemBlockInfo[i].ulNumber;
    }
    
    /* calculate buf's size */
    for ( i=0; i<BST_BUF_CTRL_BLOCK_NUMBER; i++ )
    {
        if ( 0x00000003 & g_BstBufBlockInfo[i].ulSize )/* 4 byte Aligned */
        {
            BST_DBG_LOG2("BST_OS_StaticMemInit bufMemBlockInfo[%d].size(%d) not aligned.\r\n",
                    i, g_BstBufBlockInfo[i].ulSize );

            return BST_MEM_ERROR;
        }

        lTotalSize += ( g_BstBufBlockInfo[i].ulSize + BST_MEMORY_RESERVED_BYTES
            + BST_MEM_HEAD_BLOCK_SIZE )
            * g_BstBufBlockInfo[i].ulNumber;
        lTotalCtrlSize += BST_MEM_HEAD_BLOCK_SIZE * g_BstBufBlockInfo[i].ulNumber;
    }

    /* add protected space */
    lTotalSize += 2 * BST_MEMORY_PROTECT_SIZE;
    lTotalCtrlSize += BST_MEMORY_PROTECT_SIZE;

    if ( lTotalSize > sizeof(g_acBstMemBuf) )
    {
        BST_DBG_LOG2("mem init failed, lTotalSize:%d > available:%d",lTotalSize,sizeof(g_acBstMemBuf));
        return BST_MEM_ERROR;
    }

    pCtrlStart = (BST_VOID *)g_acBstMemBuf;

    ulCtrlStart = (BST_UINT_PTR)pCtrlStart;

    ulSpaceStart = ulCtrlStart + lTotalCtrlSize;
    g_ulBstSpaceStart = ulSpaceStart;

    ulSpaceEnd = ulCtrlStart + lTotalSize - BST_MEMORY_PROTECT_SIZE ;
    g_ulBstSpaceEnd = ulSpaceEnd;

    g_ulBstSpaceAndProtectionStart = g_ulBstSpaceStart - BST_MEMORY_PROTECT_SIZE;

    g_ulBstSpaceAndProtectionEnd = g_ulBstSpaceEnd + BST_MEMORY_PROTECT_SIZE;

    /* the start address of msg pool */
    g_ulBstMemPoolIntervalAddress[0] = g_ulBstSpaceStart;

    for ( i=0; i<BST_MEM_CTRL_BLOCK_NUMBER; i++ )
    {
       BST_OS_StaticMemCtrlBlkInit( &g_BstMemCtrlBlk[i],  ( BST_INT32 )g_BstMemBlockInfo[i].ulSize,
            ( BST_INT32 )g_BstMemBlockInfo[i].ulNumber, &ulCtrlStart, &ulSpaceStart);
       g_BstMemCtrlBlk[i].enType        = BST_MEM_TYPE_DYNAMIC;
    }

    /* the start address of mem pool */
    g_ulBstMemPoolIntervalAddress[1] = ulSpaceStart;

    for ( i=0; i<BST_BUF_CTRL_BLOCK_NUMBER; i++ )
    {
        BST_OS_StaticMemCtrlBlkInit( &g_BstBufCtrlBlk[i], (BST_INT32)g_BstBufBlockInfo[i].ulSize,
            (BST_INT32)g_BstBufBlockInfo[i].ulNumber, &ulCtrlStart, &ulSpaceStart);
        g_BstBufCtrlBlk[i].enType        = BST_MEM_TYPE_PBUF;
    }

    /* the start address of app mem pool */
    g_ulBstMemPoolIntervalAddress[2] = ulSpaceStart;

    /* 初始化内存状态状态注册回调函数*/
    for ( i=0; i<BST_MEM_TYPE_BUTT; i++ )
    {
        for(ulIndex=0; ulIndex < BST_MEM_STATUS_CALLBACK_MAX_NUMBER; ulIndex++)
        {
            g_acBstMemCallBackInfo[i][ulIndex].pfCallBack = BST_NULL_PTR;
            g_acBstMemCallBackInfo[i][ulIndex].usLastReportValue = BST_MEM_HIGH_LEVEL;
        }
    }
    BST_OS_InitSpinLock(&g_stBstMemSpinLock);

    return BST_MEM_OK;
}