Nucleus Plus是美国源代码操作系统商ATI公司推出的新一代嵌入式操作系统,属于抢先式实时多任务操作系统内核, 95%的代码使用ANSI C编写,非常便于移植于各种处理器家族。从实现的角度讲,不同于传统嵌入式开发,Nucleus Plus是以函数库的形式链接到目标应用程序中,形成可执行目标代码,下载到目标板上或烧到ROM/FLASH ROM 中去执行。Nucleus Plus内核在典型的CISC体系结构上占据大约20k空间,而在典型的RISC体系结构上占据空间为40k左右,其内核数据结构占据1.5k字节的空间。Nucleus Plus以其实时响应、抢先、多任务以及源代码开放特性获得在通讯、国防、工业控制、航空/航天、铁路、网络、POS、自动化控制、智能家电等领域的广泛应用。
Nucleus Plus内核技术
ATI公司使用一种叫做软件组件的方法。所谓软件组件,就是具有明确目的或用途的由1个或数个C语言/汇编源文件的一段非独立执行应用程序,且每个组件都提供一个定义好的外部接口,必须通过外部接口来使用
Nucleus Plus Kernel: Common Service Component(CS)
Initialization Component(IN)
Tread Control Component(TC)
Timer Component(TI)
Mailbox Component(MB)
Pipe Component(PI)
Semaphore Component(SM)
Event Flag Component(EV)
Partition Component
(PM)Queue Component(QM)
Dynamic Memory Component(DM)
I/O Component(I/O)
 
Error Component(ER)
License Component (LI)
Release Component(RL)
其中:
* IN:负责初始化Nucleus Plus 系统
* TC:负责管理Nucleus Plus的抢占式实时 任务和HISR的运行
* CS:负责提供具有链接列表其它的设备Nucleus Plus 组件
* TM:负责管理所有的Nucleus Plus 定时器设备。Nucleus Plus 的基本定时单元为一个Tick,它相当于一次硬件定时器中断
* MB:负责管理所有的Nucleus Plus 信箱设备
* QM:负责管理所有的Nucleus Plus 队列设备
* PI :负责管理所有的Nucleus Plus 管道设备
* SM:负责管理所有的Nucleus Plus 信号量设备
* EV:负责管理所有的Nucleus Plus 事件组设备
* PM:负责管理所有的Nucleus Plus 分区内存
* DM:负责管理所有的Nucleus Plus 动态内存
* I/O:负责管理所有的Nucleus Plus 输入/输出
* HI:负责Nucleus Plus的历史设备管理
* ER:负责管理所有的Nucleus Plus 系统错误
* LI:负责Nucleus Plus的许可证管理
* RL:负责Nucleus Plus 的版本管理
Nucleus Plus 其它功能模块
Nucleus Plus 除了其功能强大的内核外,还提供了面向INTERNET、TCP/IP、WEB浏览器、图形以及文件系统的软件包。
Nucleus Plus 开发
1, Nucleus Plus 定制
Nucleus Plus 也能根据目标板的需要进行裁剪和定制,生成适合目标系统的操作系统,尽量少占系统内存。OS定制完成后,将其链接到目标应用程序,成为目标应用程序的一部分。在典型的CISC体系结构的目标板上,它占用约20K 左右的空间,而在RISC体系结构的目标板上占用约40K左右的空间。一般地,Nucleus Plus 足以满足绝大多数的嵌入式应用。ATI
公司提供了一个名为BUILD_LI.BAT或PLUS.BAT的批处理文件,用户可以删剪其中的模块,更改相关的选项或开关,执行该文件生成与目标相关的操作系统,也就是根据系统需要生成定制的操作系统。需要注意的是,该批处理文件的内容与开发工具有关。2,开发方案
Nucleus Plus可以结合Paradigm、SDS以及ATI的多任务调试器组成功能强大的集成开发环境,配合相应的编译器(Borland c/c++ 编译器、Turbo c/c++ 编译器或者Microsoft c/c++编译器)和动态链接库以及各类底层驱动软件就可以满足嵌入式应用的开发。
3,开发流程
用Nucleus Plus 开发嵌入式应用程序,一般遵循如下步骤:
* 如果有必要,应对低级系统初始化文件.INT进行修改,使之符合目标板的需要。如中断向量、I/O地址、时钟频率等。
* 定义Application _Initialize()函数。该函数在启动系统之前先执行。注意的是要把NUCLEUS.H头文件包括在目标应用程序中,以便利用Nucleus Plus
* 定义应用程序的任务。如果调用Nucleus Plus 的服务,要把NUCLEUS.H包含进去。
* 编译/汇编所有的应用程序软件,并且包含系统低级初始化文件.INT。
* 链接.INT和所有的应用程序目标文件、Nucleus Plus库文件以及相关的开发工具库。
* 把生成的最终目标代码下载或烧到目标板上执行。
4, Nucleus Plus 初始化
Nucleus Plus 分三个层次的初始化,即:系统低级初始化Int-Initialize()、系统高级初始化Inc-Initialize()和应用程序初始化Application_Initialize(),初始化之后便进入Nucleus Plus 的任务调度循环。
Int_Initialize()
Inc_Initialize()
Application_Initialize()
* 设置必要的处理器/系统控制寄存器
* 初始化中断向量表
* 设置系统堆栈寄存器
* 计算定时器HISR堆栈和优先级
* 计算系统第一个可用内存
* 将控制交给系统高级初始化例程
* 初始化Nucleus Plus 组件
* 将控制交给应用程序初始化例程
* 任务调度
* 执行用户定义的初始化,如创建内存池,创建任务、创建信号量、创建队列等
5, Nucleus MNT
Nucleus MNT是为软件开发者设计的,在WIN95/NT下构筑Nucleus Plus嵌入式应用的原型(Prototyping)环境。它通过两个库来实现,即针对目标环境的库和针对Win95/NT开发环境的库。开发时,应用程序代码可以不变,仅仅替换掉MNT库,使用交叉开发工具包重构目标环境下的可执行目标代码。
PROTOTYPING TARGET
6, 开发注意事项
嵌入式开发在内存需求、任务管理等方面存在着特殊性,因此,开发中对以下方面要额外加以注意,
* 任务饥荒
任务优先级的分配要合理,否则会导致系统中的一些任务一直不断地在运行而另一些任务永远得不到运行,引起饥荒。
* 死锁
系统资源的分配要合理,否则会引起两个或多个任务为竞争某一系统资源而处于无限挂起现象。
* 内存
* 内存泄露
内存分配过程中要尽量避免碎片并且要注意及时回收。
* 内存节约
* 默认情况下,Nucleus Plus, 在高级初始化函数Inc_Initialize()中。调用其它函数初始化它所提供的所有特征的数据结构中,有些特征用户目标应用程序可能
用不到,为此,要去掉不必要的函数调用。* 改变Nucleus.H中NU_MAX_LISRS的大小,它定义的是目标处理器的最大中断向量数。
* 改变TC_DEFS.H中TC_PRIORITIES的大小。它定义了任务的优先级数。Nucleus Plus 能支持256个优先级。
* HISR栈共享。
* TCD.C中禁止查询表TCD_LOWEST_SET_BIT的RAM拷贝。
* 使用一个更小的INT选项。
结束语
由于Nucleus Plus 的模块化、可靠、重用、开放、易用以及安全等特性使得它成为嵌入式应用开发的理想平台,尤其是关系到国计民生的领域,如航空/航天、军队、国防等方面。