Exemple #1
0
/*********************************************************************************************************
** 函数名称: _excInit
** 功能描述: 初始化 异常处理 机制
** 输 入  : NONE
** 输 出  : 是否初始化成功
** 全局变量: 
** 调用模块: 
*********************************************************************************************************/
INT  _excInit (VOID)
{
    LW_CLASS_THREADATTR threadattr;

    if (_jobQueueInit(&_G_jobqExc, &_G_jobmsgExc[0], MAX_EXC_MSG_NUM, LW_FALSE)) {
        return  (PX_ERROR);
    }
    
    API_ThreadAttrBuild(&threadattr, 
                        LW_CFG_THREAD_SIG_STK_SIZE, 
                        LW_PRIO_T_EXCPT,                                /*  最高优先级                  */
                        (LW_OPTION_THREAD_STK_CHK | LW_OPTION_THREAD_SAFE | LW_OPTION_OBJECT_GLOBAL), 
                        LW_NULL);
                        
    _S_ulThreadExceId = API_ThreadCreate("t_except",
                                     (PTHREAD_START_ROUTINE)_ExcThread,
                                     &threadattr,
                                     LW_NULL);                          /*  建立异常处理线程            */
    if (!_S_ulThreadExceId) {
        _jobQueueFinit(&_G_jobqExc);
        return  (PX_ERROR);
    }
    
    return  (ERROR_NONE);
}
/*********************************************************************************************************
** 函数名称: _netJobqueueInit
** 功能描述: 初始化 Net jobqueue 处理 机制
** 输 入  : NONE
** 输 出  : 是否初始化成功
** 全局变量: 
** 调用模块: 
*********************************************************************************************************/
INT  _netJobqueueInit (VOID)
{
    LW_OBJECT_HANDLE    hNetJobThread;
    LW_CLASS_THREADATTR threadattr;
    
    if (_jobQueueInit(&_G_jobqNet, &_G_jobmsgNet[0], LW_CFG_LWIP_JOBQUEUE_SIZE, LW_FALSE)) {
        return  (PX_ERROR);
    }
    
    API_ThreadAttrBuild(&threadattr, LW_CFG_LWIP_STK_SIZE, 
                        LW_PRIO_T_NETJOB, 
                        (LW_OPTION_THREAD_STK_CHK | LW_OPTION_THREAD_SAFE | LW_OPTION_OBJECT_GLOBAL),
                        LW_NULL);
                        
    hNetJobThread = API_ThreadCreate("t_netjob",
                                     (PTHREAD_START_ROUTINE)_NetJobThread,
                                     (PLW_CLASS_THREADATTR)&threadattr,
                                     LW_NULL);                          /*  建立 job 处理线程           */
    if (!hNetJobThread) {
        _jobQueueFinit(&_G_jobqNet);
        return  (PX_ERROR);
    }
    
    return  (ERROR_NONE);
}
Exemple #3
0
/*********************************************************************************************************
** 函数名称: _hotplugInit
** 功能描述: 初始化 hotplug 库
** 输 入  : NONE
** 输 出  : 是否初始化成功
** 全局变量: 
** 调用模块: 
*********************************************************************************************************/
INT  _hotplugInit (VOID)
{
    LW_OBJECT_HANDLE    hHotplugThread;
    LW_CLASS_THREADATTR threadattr;
    
    if (_jobQueueInit(&_G_jobqHotplug, &_G_jobmsgHotplug[0], 
                      LW_CFG_HOTPLUG_MAX_MSGS, LW_FALSE)) {
        return  (PX_ERROR);
    }

    _G_hHotplugLock = API_SemaphoreMCreate("hotplug_lock", LW_PRIO_DEF_CEILING, 
                                           LW_OPTION_INHERIT_PRIORITY | 
                                           LW_OPTION_DELETE_SAFE |
                                           LW_OPTION_WAIT_FIFO | LW_OPTION_OBJECT_GLOBAL,
                                           LW_NULL);                    /*  建立 poll 链操作锁          */
    if (!_G_hHotplugLock) {
        _jobQueueFinit(&_G_jobqHotplug);
        return  (PX_ERROR);
    }
    
    API_ThreadAttrBuild(&threadattr, LW_CFG_THREAD_HOTPLUG_STK_SIZE, 
                        LW_PRIO_T_SYSMSG, 
                        (LW_CFG_HOTPLUG_OPTION | LW_OPTION_THREAD_SAFE | LW_OPTION_OBJECT_GLOBAL),
                        LW_NULL);
                        
    hHotplugThread = API_ThreadCreate("t_hotplug",
                                      (PTHREAD_START_ROUTINE)_hotplugThread,
                                      (PLW_CLASS_THREADATTR)&threadattr,
                                      LW_NULL);                         /*  建立 job 处理线程           */
    if (!hHotplugThread) {
        API_SemaphoreMDelete(&_G_hHotplugLock);
        _jobQueueFinit(&_G_jobqHotplug);
        return  (PX_ERROR);
    }
    
    _G_hHotplug = hHotplugThread;
    
#if LW_CFG_DEVICE_EN > 0
    _hotplugDrvInstall();                                               /*  初始化热插拔消息设备        */
    _hotplugDevCreate();
#endif                                                                  /*  LW_CFG_DEVICE_EN > 0        */
    
    return  (ERROR_NONE);
}