uCosii的OSInit();函数分析 转自匿名http://m.blog.csdn.net/blog/songhengli/19939469
2015-08-31 20:44
281 查看
void OSInit (void)
{
OSInitHookBegin(); /* Call port specific initialization code */ 钩子函数,实现了自定义函数的添加
OS_InitMisc(); /* Initialize miscellaneous variables */初始化各种变量,包括系统时钟计数器、中断嵌套计数器、上锁嵌套计数器、任务计数器、多任务运行标志、上下文切换计数器、空闲计数器、一秒内任务切换数、一秒内最大任务切换数、统计任务就绪标志、
OS_InitRdyList(); /* Initialize the Ready List */就绪列表初始化,清空就绪任务列表,清空当前任务优先级、清空最高优先级任务的优先级、清空当前任务控制块、清空最高优先级任务的控制块;这里的最高优先级任务的优先级和控制块是等待任务切换时,要赋值给当前任务,进而完成最高优先级任务的切换,具体在OSStart函数中可以看出来
OS_InitTCBList(); /* Initialize the free list of OS_TCBs */ 控制块列表初始化,清空任务控制块表及任务控制块优先级表,遍历整个控制块,将下一个控制块地址赋值给上一个控制块中的OSTCBNext变量,到最后一个控制块的OSTCBNext变量赋值0,同时将每个控制块中的任务名称赋值?/0,做字符串处理,任务控制块链表指针清0,空闲任务控制块链表指针清0;一开始空闲任务控制块指向第一个任务控制块,任务控制块链表指针是0;当创建任务后,会从空闲任务控制块链表指针中申请一个任务控制块给任务控制块,任务控制块链表指针添加一个节点;空闲任务控制块链表指针后移;当删除任务时,做相反操作
OS_InitEventList(); /* Initialize the free list of OS_EVENTs */事件列表初始化,遍历整个事件控制块,赋值事件类型、事件名称及事件控制块指针;赋值空闲事件控制块链表指针
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
OS_FlagInit(); /* Initialize the event flag structures */;当最大事件标志数为1时,仅仅使用标志表数组元素0,等待标志的第一个任务节点指针,事件标志的标志清空,标志name赋?/0;最大事件标志大于等于2时,遍历整个表示表格,做以上内容,空闲标志链表赋值
#endif
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
OS_MemInit(); /* Initialize the memory manager */
#endif
#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
OS_QInit(); /* Initialize the message queue structures */
#endif
OS_InitTaskIdle(); /* Create the Idle Task */
#if OS_TASK_STAT_EN > 0
OS_InitTaskStat(); /* Create the Statistic Task */
#endif
#if OS_TMR_EN > 0
OSTmr_Init(); /* Initialize the Timer Manager */
#endif
OSInitHookEnd(); /* Call port specific init. code */
#if OS_DEBUG_EN > 0
OSDebugInit();
#endif
}
整个OSInit的流程是:
1、用户钩子函数begin
2、初始化各种变量,主要是各种计数器
3、初始化就绪列表
4、初始化任务控制块列表
5、初始化时间控制块列表
6、初始化时间标志组
7、初始化内存管理
8、初始化消息队列
9、建立空闲任务,空闲任务计数器加1
10、建立统计任务
11、初始化定时器管理任务
12、钩子函数end
13、防止debug中warn消息
{
OSInitHookBegin(); /* Call port specific initialization code */ 钩子函数,实现了自定义函数的添加
OS_InitMisc(); /* Initialize miscellaneous variables */初始化各种变量,包括系统时钟计数器、中断嵌套计数器、上锁嵌套计数器、任务计数器、多任务运行标志、上下文切换计数器、空闲计数器、一秒内任务切换数、一秒内最大任务切换数、统计任务就绪标志、
OS_InitRdyList(); /* Initialize the Ready List */就绪列表初始化,清空就绪任务列表,清空当前任务优先级、清空最高优先级任务的优先级、清空当前任务控制块、清空最高优先级任务的控制块;这里的最高优先级任务的优先级和控制块是等待任务切换时,要赋值给当前任务,进而完成最高优先级任务的切换,具体在OSStart函数中可以看出来
OS_InitTCBList(); /* Initialize the free list of OS_TCBs */ 控制块列表初始化,清空任务控制块表及任务控制块优先级表,遍历整个控制块,将下一个控制块地址赋值给上一个控制块中的OSTCBNext变量,到最后一个控制块的OSTCBNext变量赋值0,同时将每个控制块中的任务名称赋值?/0,做字符串处理,任务控制块链表指针清0,空闲任务控制块链表指针清0;一开始空闲任务控制块指向第一个任务控制块,任务控制块链表指针是0;当创建任务后,会从空闲任务控制块链表指针中申请一个任务控制块给任务控制块,任务控制块链表指针添加一个节点;空闲任务控制块链表指针后移;当删除任务时,做相反操作
OS_InitEventList(); /* Initialize the free list of OS_EVENTs */事件列表初始化,遍历整个事件控制块,赋值事件类型、事件名称及事件控制块指针;赋值空闲事件控制块链表指针
#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
OS_FlagInit(); /* Initialize the event flag structures */;当最大事件标志数为1时,仅仅使用标志表数组元素0,等待标志的第一个任务节点指针,事件标志的标志清空,标志name赋?/0;最大事件标志大于等于2时,遍历整个表示表格,做以上内容,空闲标志链表赋值
#endif
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
OS_MemInit(); /* Initialize the memory manager */
#endif
#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
OS_QInit(); /* Initialize the message queue structures */
#endif
OS_InitTaskIdle(); /* Create the Idle Task */
#if OS_TASK_STAT_EN > 0
OS_InitTaskStat(); /* Create the Statistic Task */
#endif
#if OS_TMR_EN > 0
OSTmr_Init(); /* Initialize the Timer Manager */
#endif
OSInitHookEnd(); /* Call port specific init. code */
#if OS_DEBUG_EN > 0
OSDebugInit();
#endif
}
整个OSInit的流程是:
1、用户钩子函数begin
2、初始化各种变量,主要是各种计数器
3、初始化就绪列表
4、初始化任务控制块列表
5、初始化时间控制块列表
6、初始化时间标志组
7、初始化内存管理
8、初始化消息队列
9、建立空闲任务,空闲任务计数器加1
10、建立统计任务
11、初始化定时器管理任务
12、钩子函数end
13、防止debug中warn消息
相关文章推荐
- 网络第一天
- 使用HttpWebRequest的POST取得网页内容(异步操作)2篇集合
- TCP/IP三次握手,四次分手
- 网络编程
- ios开发进阶之网络06 网络安全 UIWebView
- Android OkHttp完全解析 是时候来了解OkHttp了
- TCP 的那些事儿(下)
- TCP 的那些事儿(上)
- Linux内核网络协议栈1-socket文件系统注册 http://blog.chinaunix.net/uid-22359610-id-461029.html
- Linux内核网络协议栈3-创建socket http://blog.chinaunix.net/uid-22359610-id-461249.html
- HTTP状态码中301与302的区别
- linux socket编程之socket()函数介绍 http://blog.chinaunix.net/uid-20788470-id-1841640.html
- Linux系统下fd分配的方法 http://os.51cto.com/art/201409/451367.htm
- Java下载网络上的图片
- 一次完整的HTTP请求所经历的7个步骤
- C++ 用libcurl库进行http 网络通讯编程
- C语言 HTTP上传文件-利用libcurl库上传文件
- 通过HTTP协议上传文件
- 理解 VMWare的3种网络模型 z
- http状态码