下载地址: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
}
其他初始化代码放到后面具体的每一个子模块中再分析。
分享到:
相关推荐
《深入解析UC/OS-II:基于时间片轮转调度的源码分析》 UC/OS-II,全称为“microC/OS-II”,是一款广泛应用的实时操作系统(RTOS),它以其高效、小巧、稳定的特点深受嵌入式开发者的喜爱。在UC/OS-II中,时间片轮转...
对UC/OS-II源码的深入研究可以帮助开发者理解其内部机制,例如任务调度的实现、内存分配的逻辑以及中断处理过程。通过对关键函数如OSTaskSwHook()、OSIntEnter()和OSIntExit()的分析,可以了解系统如何在不同上下文...
UC/OS-II是一个著名的实时操作系统(RTOS)内核,由Jean J. Labrosse开发,专为嵌入式系统设计。2.84版本是该内核的一个更新版本,提供了更稳定、高效和功能丰富的特性。在深入理解UC/OS-II 2.84内核源码之前,我们...
UC/OS-II,全称 μC/OS-II,是一款广泛应用的、开源的嵌入式实时操作系统(RTOS)。它以其高效、小巧、稳定和可移植性著称,为各种微控制器和嵌入式设备提供了核心的调度和服务功能。作为学习嵌入式操作系统的理想...
UC/OS-II是一款著名的嵌入式实时操作系统(RTOS),由Jean J. Labrosse开发,以其高效、可裁剪和源码公开的特点广受嵌入式系统开发者欢迎。本篇文章将详细探讨UC/OS-II在不同硬件平台上的移植过程,以及如何使用提供...
《uC/OS-II原理与ARM应用程序设计》是一本深入探讨嵌入式系统实时操作系统和ARM处理器应用的经典著作。书中的实例源码是学习和理解uC/OS-II操作系统核心概念及其实现的重要参考资料。通过分析这些源码,我们可以深入...
2. **源码获取与修改**:下载uC/OS-II的源代码,根据你的目标硬件平台和编译器进行必要的修改,比如修改配置文件,调整内存分配策略,以及适应特定处理器的中断处理和定时器服务例程。 3. **构建系统适配**:将uC/...
《深入解析UC/OS-II操作系统源码在ARM嵌入式...总之,UC/OS-II源码的学习和研究是嵌入式开发者提升技术水平,尤其是ARM平台开发技能的重要途径。深入理解和实践,将有助于开发者更好地应对各种嵌入式系统的设计挑战。
- "Source"目录通常包含了所有源代码文件,包括系统内核、任务调度、内存管理、中断处理、同步通信等模块的源码,是学习和分析uC/OS-II的重要入口。 通过深入学习和分析这些源代码,开发者不仅可以掌握RTOS的设计...
uc/OS-II的源码分析对于开发者来说至关重要,它可以帮助理解操作系统的内部工作原理,进行针对性的优化和定制。例如,通过分析调度算法,可以改进任务切换的效率;通过查看内存管理代码,可以优化内存分配策略,减少...
开发者需要将uC/OS-II源码导入到Borland集成开发环境中,配置好编译选项和链接设置,以便进行代码编写、编译、调试等工作。 【资源管理】 在嵌入式系统中,资源管理是关键。uC/OS-II提供了一套完整的资源管理机制...
总的来说,学习和分析这个源码可以帮助开发者深入了解嵌入式TCP/IP协议栈的工作原理,掌握如何在uC/OS-II环境中集成和优化网络功能,这对于从事嵌入式系统开发的工程师来说,是一项非常有价值的知识和技能。...
嵌入式操作系统UC/OS-II是专为微处理器和微控制器设计的一款实时操作系统(RTOS),由Jean J....任哲教授的例题源码是一个宝贵的资源,可以帮助你在理论与实践中找到平衡,加深对UC/OS-II操作系统的理解和掌握。
**五、UCOSII2.51源码分析** UCOSII2.51是uC/OS-II的一个特定版本,包含了完整的源代码。开发者可以通过阅读源码来理解其工作原理,进行定制和优化。主要文件包括: - **os_core.c**:包含内核核心功能,如任务...
uC/OS-II是一款嵌入式实时操作系统(RTOS),它的源码分析主要涉及系统启动和核心组件的初始化。本文将深入探讨在main函数中调用的关键步骤,以及它们如何协同工作来构建一个运行中的RTOS。 首先,main函数是uC/OS-...
uC/OS-II操作系统的最大优点之一是它的源码完全开放,这不仅让开发者能够深入了解系统实现的细节,而且便于针对不同需求进行定制和移植。它采用微内核设计,支持灵活的配置和扩展,优先级抢占式调度是其核心特性之一...
在本文中,我们将深入探讨如何将UC/OS-II移植到ARM7处理器上,基于提供的源码进行详尽的分析。 首先,我们要理解UC/OS-II的基本架构。UC/OS-II是一个抢占式RTOS,它提供了任务管理、内存管理、时间管理、信号量、...
本文将深入探讨uC/OS-II的核心原理,通过分析源码来揭示其内部机制。 1. **任务管理**:uC/OS-II的核心是任务管理,它支持多任务并行执行。每个任务都有自己的堆栈空间和优先级,任务间的切换由内核根据优先级进行...
2. uC/OS-II源码:可以从官方网站获取最新版本。 3. 开发环境:如Keil μVision或IAR Embedded Workbench,提供集成开发环境和调试工具。 二、移植步骤 1. **配置RTOS内核**:首先,根据ARM7处理器的特点,调整uC/...