获得更多资料欢迎进入[我的网站](http://rlovep.com/)或者 [csdn](http://blog.csdn.net/peace1213)或者[博客园](http://www.cnblogs.com/onepeace/)
> 对于有热心的小伙伴在[微博](http://weibo.com/u/2026326475/)上私信我,说我的[uC/OS-II 一些函数简介](http://blog.csdn.net/peace1213/article/details/47056651)篇幅有些过于长应该分开介绍。应小伙伴的要求,特此将文章分开进行讲解。本文主要介绍OSInit()初始化函数
## OSInit()主要作用
在uC/OS II的学习中,OSInit(OS_CORE.C )(函数原型位于);是一个重要的函数,它在OS应用中的main()函数中首先被调用,是OS运行的第一个函数,它完成各初始变量的初始化。
## 主要工作:完成下面的初始化;
~~~
OSInitHookBegin(); /* 调用用户特定的初始化代码(通过一个接口函数实现用户要求的插件式进入系统中)*/
OS_InitMisc(); /* 初始化变量*/
OS_InitRdyList(); /* 初始化就绪列表*/
OS_InitTCBList(); /* 初始化OS_TCB空闲列表*/
OS_InitEventList(); /* 初始化OS_EVENT空闲列表*/
OS_InitTaskIdle(); /*创建空闲任务*/
~~~
## 程序注释详解:
~~~
void OSInit (void)
{
#if OS_TASK_CREATE_EXT_EN > 0u
#if defined(OS_TLS_TBL_SIZE) && (OS_TLS_TBL_SIZE > 0u)
INT8U err;
#endif
#endif
OSInitHookBegin(); /* 调用用户特定的初始化代码(通过一个接口函数实现用户要求的插件式进入系统中)*/
OS_InitMisc(); /* 初始化变量*/ /* Initialize miscellaneous variables */
OS_InitRdyList(); /* 初始化就绪列表*/ /* Initialize the Ready List */
OS_InitTCBList(); /* 初始化OS_TCB空闲列表*/ /* Initialize the free list of OS_TCBs */
OS_InitEventList(); /* 初始化OS_EVENT空闲列表*/ /* Initialize the free list of OS_EVENTs */
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
OS_FlagInit(); /* 初始化事件标志结构*/ /* Initialize the event flag structures */
#endif
#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)
OS_MemInit(); /* 初始化内存管理器*/ /* Initialize the memory manager */
#endif
#if (OS_Q_EN > 0u) && (OS_MAX_QS > 0u)
OS_QInit(); /* 初始化消息队列结构*/ /* Initialize the message queue structures */
#endif
#if OS_TASK_CREATE_EXT_EN > 0u
#if defined(OS_TLS_TBL_SIZE) && (OS_TLS_TBL_SIZE > 0u)
OS_TLS_Init(&err); /* 创建任务前初始化TLS*/ /* Initialize TLS, before creating tasks */
if (err != OS_ERR_NONE) {
return;
}
#endif
#endif
OS_InitTaskIdle(); /* 创建空闲任务(无条件)Create the Idle Task */
#if OS_TASK_STAT_EN > 0u
OS_InitTaskStat(); /* 创建统计任务*/ /* Create the Statistic Task */
#endif
#if OS_TMR_EN > 0u
OSTmr_Init(); /* 初始化时间管理器*/ /* Initialize the Timer Manager */
#endif
OSInitHookEnd(); /*调用用户特定的初始化代码*/
#if OS_DEBUG_EN > 0u
OSDebugInit();
#endif
}
~~~