/********************************************************************************************************* ** 函数名称: _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); }
/********************************************************************************************************* ** 函数名称: _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); }