下载地址:http://www.micrium.com/
它的特点:
1)开源,
2)可移植性,绝大部分代码用C写,硬件相关部分用汇编写,
3可固化,
4)可剪裁,这通过条件编译实现,使用#define语句定义所需要的功能。
5)可剥夺性(总是运行就绪条件下优先级最高的任务),
6)多任务(可以管理64个任务,其中保留8个给uC/OS-II,因此用户最多可有56个任务,每个任务优先级不同,也就意味着不支持时间片轮转调度法,因为这种方法适合于优先级平等的任务)。
7)可确定性。函数调度和服务执行时间具有确定性,除了OSTimeTick()和某些事件标志服务,系统服务执行时间不依赖用户应用程序任务数目的多少。
8)任务栈。允许每个任务自己单独的栈空间不同,可以使用栈空间检验函数确定所需要的栈空间大小。
9)系统服务。提供信号量,互斥型信号量,事件标志,消息邮箱,消息队列,块大小固定的内存申请与释放,时间管理函数等服务。
10)中断管理。中断嵌套层数最多可达到255层。
11)稳定性和可靠性。
OSInit()函数用来初始化内核,必须首先调用。建立两个任务:空闲任务(其他任务都未就绪时运行),统计任务(计算CPU的利用率).
*****************************************************************
* Description: This function is used to initialize the
internals of uC/OS-II and MUST be called prior to creating any uC/OS-II object
and, prior to calling OSStart().
*****************************************************************
OSInit
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->voidOSInit(void)
{
OSInitHookBegin();/*调用用户特定的初始化代码(通过一个接口函数实现用户要求的插件式进入系统中)*/
OS_InitMisc();/*初始化变量*/
OS_InitRdyList();/*初始化就绪列表*/
OS_InitTCBList();/*初始化OS_TCB空闲列表*/
OS_InitEventList();/*初始化OS_EVENT空闲列表*/
#if(OS_FLAG_EN>0)&&(OS_MAX_FLAGS>0)//允许事件标志
OS_FlagInit();/*初始化事件标志结构*/
#endif
#if(OS_MEM_EN>0)&&(OS_MAX_MEM_PART>0)//允许内存管理
OS_MemInit();/*初始化内存管理器*/
#endif
#if(OS_Q_EN>0)&&(OS_MAX_QS>0)//允许消息队列
OS_QInit();/*初始化消息队列结构*/
#endif
OS_InitTaskIdle();/*创建空闲任务*/
#ifOS_TASK_STAT_EN>0
OS_InitTaskStat();/*创建统计任务*/
#endif
#ifOS_TMR_EN>0//允许时间管理
OSTmr_Init();/*初始化时间管理器*/
#endif
OSInitHookEnd();/*调用用户特定的初始化代码(参考OSInitHookBegin())*/
#ifOS_DEBUG_EN>0//允许Debug
OSDebugInit();//初始化调试器
#endif
}
********************************************************************************************
* Description: This function is called by OSInit() to
initialize miscellaneous variables.
********************************************************************************************
OS_InitMisc
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->staticvoidOS_InitMisc(void)
{
#ifOS_TIME_GET_SET_EN>0
OSTime=0L;/*32位的系统时钟清零*/
#endif
OSIntNesting=0;/*中断嵌套层数计数器清零*/
OSLockNesting=0;/*调度器锁的嵌套层数计数器清零*/
OSTaskCtr=0;/*任务数清零*/
OSRunning=OS_FALSE;/*指明多任务未开始*/
OSCtxSwCtr=0;/*任务切换次数计数器清零*/
OSIdleCtr=0L;/*32位空闲计数器清零*/
#ifOS_TASK_STAT_EN>0/*运行统计任务*/
OSIdleCtrRun=0L;
OSIdleCtrMax=0L;
OSStatRdy=OS_FALSE;/*统计任务未就绪*/
#endif
}
空闲任务和统计任务建立的代码基本一样,只是统计任务的优先级比空闲任务大1,
********************************************************************************************
* Description: This function creates the Idle Task.
********************************************************************************************
CodeOS_InitTaskIdle
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->staticvoidOS_InitTaskIdle(void)
{
#ifOS_TASK_NAME_SIZE>7//
INT8Uerr;
#endif
#ifOS_TASK_CREATE_EXT_EN>0//使用扩展的OSTaskCreateExt来创建
#ifOS_STK_GROWTH==1//任务堆栈从底部向顶部增长的方向有两种:表示从大到小,表示从小到大
(void)OSTaskCreateExt(OS_TaskIdle,
(void*)0,/*没有参数传给OS_TaskIdle()*/
&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE-1],/*设置堆栈顶*/
OS_TASK_IDLE_PRIO,/*优先级设置为最低*/
OS_TASK_IDLE_ID,//设置ID
&OSTaskIdleStk[0],/*设置栈底*/
OS_TASK_IDLE_STK_SIZE,//设置栈大小
(void*)0,/*没有TCB扩展数据结构
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);/*允许堆栈检测和清空堆栈*/
#else
(void)OSTaskCreateExt(OS_TaskIdle,
(void*)0,/*NoargumentspassedtoOS_TaskIdle()*/
&OSTaskIdleStk[0],/*SetTop-Of-Stack
OS_TASK_IDLE_PRIO,/*Lowestprioritylevel
OS_TASK_IDLE_ID,
&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE-1],/*SetBottom-Of-Stack*/
OS_TASK_IDLE_STK_SIZE,
(void*)0,/*NoTCBextension
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);/*Enablestackchecking+clearstack*/
#endif
#else//使用不带扩展性的OSTaskCreate创建
#ifOS_STK_GROWTH==1
(void)OSTaskCreate(OS_TaskIdle,
(void*)0,
&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE-1],
OS_TASK_IDLE_PRIO);
#else
(void)OSTaskCreate(OS_TaskIdle,
(void*)0,
&OSTaskIdleStk[0],
OS_TASK_IDLE_PRIO);
#endif
#endif
//设置任务名称
#ifOS_TASK_NAME_SIZE>14
OSTaskNameSet(OS_TASK_IDLE_PRIO,(INT8U*)"uC/OS-IIIdle",&err);
#else
#ifOS_TASK_NAME_SIZE>7
OSTaskNameSet(OS_TASK_IDLE_PRIO,(INT8U*)"OS-Idle",&err);
#endif
#endif
}
其他初始化代码放到后面具体的每一个子模块中再分析。
分享到:
相关推荐
首先从main函数开始,下面是uC/OS-II main函数的大致流程: main() { OSInit(); TaskCreate(...); OSStart(); } 首先是调用OSInit进行初始化,然后使用TaskCreate创建几个进程/Task,最后调用OSStart,操作系统就...
通过分析uC/OS-II的源码,详细阐述了开发板上电后uC/OS-II启动运行的整个过程,每个源码后面都有详细的注释,以及在任务运行过程中所起的作用,是新手学习uC/OS-II系统的好资料。
μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位单片机或DSP。从μC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用.本书是MicroC/OSII The Real Time ...
本文从uC/OS-II main函数的大致流程,开始分析uC/OS-II的工作原理,讲解的很透彻,很明了,是学习uC/OS-II不可不看的一篇文章
Ⅱ是一个源码公开的实时嵌入式操作系统,它的特点在于公开的源代码,很强的移植性,占先式多任务,每个任务有单独的栈,中断管理及很强的稳定性与可靠性等,目前越来越受到实时嵌入式系统设计者的关注,本文详细讲述...
Ⅱ是一个源码公开的实时嵌入式操作系统,它的特点在于公开的源代码,很强的移植性,占先式多任务,每个任务有单独的栈,中断管理及很强的稳定性与可靠性等,目前越来越受到实时嵌入式系统设计者的关注,本文详细讲述...
uC/OS-II是著名的、源码公开的实时内核,是专为嵌人式应用设计的,可用于各类8位,16位和32位单片机或D5P。从uC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。 本书是MicrouC/OS一II The Real Time ...
uC/OS-II是著名的、源码公开的实时内核,是专为嵌人式应用设计的,可用于各类8位,16位和32位单片机或D5P。从uC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。 本书是MicrouC/OS一II The Real Time ...
uC/OS-II是著名的、源码公开的实时内核,是专为嵌人式应用设计的,可用于各类8位,16位和32位单片机或D5P。从uC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。 本书是MicrouC/OS一II The Real Time ...
uC/OS-II是著名的、源码公开的实时内核,是专为嵌人式应用设计的,可用于各类8位,16位和32位单片机或D5P。从uC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。 本书是MicrouC/OS一II The Real Time ...
本书是MicroC/OSII The Real Time Kernel一书的第2版本,在第1版本(V2.0)基础上做了重大改进与升级。通过对μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、任务间同步与通信、存储与...
μC/OS-II是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性,除此以外,μC/OS-II的鲜明特点就是源码公开,便于移植和维护。 在μC/OS-II官方的主页上可以查找到一个比较全面的移植范例...
本书是MicroC/OSII The Real Time Kernel一书的第2版本,在第1版本(V2.0)基础上做了重大改进与升级。通过对μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、任务间同步与通信、存储与...
本书是MicroC/OSII The Real Time Kernel一书的第2版本,在第1版本(V2.0)基础上做了重大改进与升级。通过对μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、任务间同步与通信、存储与...
运用uC/OS-II实现任务的管理,简化程序结构。在此基础之上,你可以实现你想要的功能。像MP3播放器,图片浏览器,示波器,频谱分析仪WP界面等。只有你想不到的没有做不到的,并且你的设备将具备惊艳的UI界面(当然是...
本书是MicroC/OSII The Real Time Kernel一书的第2版本,在第1版本(V2.0)基础上做了重大改进与升级。通过对μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、任务间同步与通信、存储与...
│ 2-10源码改进&现象分析.txt │ TEST.C │ TEST.EXE │ ├─2-11 │ 2-11截图.bmp │ Test.c │ TEST.EXE │ ├─3-1 │ 3-1完整文件包.rar │ 3-1截图.bmp │ 3-1最小文件集.rar │ 3-1现象完整分析.txt │ EXP...
Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。 18. MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,无法滤除...