Nucleus实时操作系统分析报告
- 格式:doc
- 大小:405.50 KB
- 文档页数:35
目录一、NUCLEUS的内核(KERNEL) (3)1.1 系统启动 (3)1.2 初始化线程 (4)1.3 线程调度 (4)1.3.1 任务的调度 (5)1.3.2 中断的调度 (9)1.3.3 操作系统数据结构的保护 (14)1.4 任务间通信 (16)1.4.1 消息管道(Pipes) (17)1.5 任务的同步 (21)1.6 定时器 (21)1.7 内存管理 (22)1.8 输入/输出设备驱动 (23)N UCLEUS内核总结: (23)二、NUCLEUS的开发工具 (25)2.1 N UCLEUS C++ (25)2.2 N UCLEUS MNT (25)2.3 N UCLEUS VNET (25)2.4 N UCLEUS PC+ (25)2.5 N UCLEUS FILE (25)2.6 N UCLEUS CLIB (26)2.7 N UCLEUS GRAFIX (26)2.8 N UCLEUS EDE (26)2.9 N UCLEUS UDB (27)2.10 N UCLEUS DEBUG+ (27)2.11 第三方产品的支持 (29)2.12 SDS S INGLE S TEP (29)三、NUCLEUS的网络支持 (31)3.1 I NTERNET套件 (31)Nucleus NET (31)Nucleus SNMP (31)Nucleus RMON (32)Nucleus SP AN (32)3.2 N UCLEUS W EB S ERV (32)3.3 N UCLEUS J VI (32)3.4 N UCLEUS EPILOGUE (32)Nucleus实时操作系统是Accelerater Technology公司开发的嵌入式RTOS产品,只需一次性购买Licenses,就可以获得操作系统的源码。
Nucleus购买的灵活性比较大:Kernel,Networking,File System,Web Technology,Target Debugger可以分开购买,如果我们只需要微内核的话只要购买Kernal和Debugger,当前的下位机就是这样配置的。
操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。
三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。
通过编写简单的C++程序,使用Windows API 函数创建多个进程。
在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。
2、进程间通信实现了进程间的管道通信和消息传递。
通过创建管道,让两个进程能够相互交换数据。
同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。
(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。
观察内存使用情况,了解内存碎片的产生和处理。
2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。
(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。
通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。
2、目录操作实现了目录的创建、删除、遍历等功能。
了解了目录结构在文件系统中的组织方式和管理方法。
四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。
2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。
3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。
嵌入式操作系统实验报告系别:班级:学号:姓名:2013.12实验一嵌入式开发环境的建立一、实验目的通过此实验系统,读者可以了解嵌入式实时操作系统uC/OS-II 的内核机制和运行原理。
本实验系统展示了uC/OS-II 各方面的管理功能,包括信号量、队列、内存、时钟等。
在各个实验中具体介绍了uC/OS-II 的相关函数。
读者在做实验的同时能够结合理论知识加以分析,了解各个函数的作用和嵌入式应用程序的设计方法,最终对整个uC/OS-II 和嵌入式操作系统的应用有较为清楚的认识。
二、实验步骤1. 安装集成开发环境LambdaEDU集成开发环境LambdaEDU 的安装文件夹为 LambdaEDU ,其中有一个名为“Setup.exe”的文件,直接双击该文件便可启动安装过程。
具体的安装指导请看“LambdaEDU 安装手册.doc”文件。
当 LambdaEDU 安装完毕之后,我们看到的是一个空的界面,现在就开始一步一步地将我们的实验项目建立并运行起来。
2. 建立项目为了我们的实验运行起来,需要建立1 个项目基于x86 虚拟机的标准应用项目。
通过点击“文件”、“新建”、“项目”开始根据向导创建一个项目。
在随后出现的对话框中选择“Tool/标准应用项目”,点击下一步,开始创建一个标准的可执行的应用程序项目。
在随后出现的对话框中填入项目名称“ucos_x86_demo”。
点击“下一步”。
选择“pc386 uC/OS-II 应用(x86)”作为该项目的应用框架。
点击“下一步”选择“pc386_elf_tra_debug”作为该项目的基本配置。
点击“完成”。
新创建的项目“ucos_x86_demo”将会被添加到项目列表。
src 文件夹下保存了该项目中包含的源文件。
ucos2 文件夹中包含了移植到x86 虚拟机的全部代码。
init.c 文件是基于ucos2和本虚拟机的一个应用程序。
在进行ucos2 内核实验中,只需要替换init.c 文件,即可。
Linux操作系统实验总结分析报告从系统的⾓度分析影响程序执⾏性能的因素1.Linux系统概念模型从全局的⾓度来看,Linux系统分为内核空间和⽤户空间,但毫⽆疑问内核空间是Linux系统的核⼼,因为内核负责管理整个系统的进程、内存、设备驱动程序、⽂件,决定着系统的性能和稳定性。
于是从这个⾓度我构建的Linux系统的概念模型如下图所⽰:此模型将Linux系统主要划分为四个模块:内存管理、进程管理、设备驱动程序、⽂件系统。
这四个部分也是⼀个操作系统最基本也是最重要的功能。
2.概念模型解析2.1 内存管理Linux系统采⽤虚拟内存管理技术,使得每个进程都有各⾃互不⼲涉的进程地址空间。
该空间是块⼤⼩为4G的线性虚拟空间,⽤户所看到和接触到的都是该虚拟地址,⽆法看到实际的物理内存地址。
利⽤这种虚拟地址不但能起到保护操作系统的效果(⽤户不能直接访问物理内存),⽽且更重要的是,⽤户程序可使⽤⽐实际物理内存更⼤的地址空间。
内存管理主要有分为如下⼏个功能:地址映射、虚拟地址管理、物理内存管理、内核空间管理、页⾯换⼊换出策略和⽤户空间内存管理,这些模块的架构图如下所⽰:2.2 进程管理进程管理是Linux系统⾮常重要的⼀部分,进程管理虽然不像内存管理、⽂件系统等模块那样复杂,但是它与其他⼏个模块的联系是⾮常紧密的。
进程管理主要包括进程的创建、切换、撤销和进程调度。
2.2.1 进程的创建、切换、撤销进程的创建:在Linux编程中,⼀般采⽤fork()函数来创建新的进程,当然,那是在⽤户空间的函数,它会调⽤内核中的clone()系统调⽤,由clone()函数继续调⽤do_fork()完成进程的创建。
整个进程创建过程可能涉及到如下函数:fork()/vfork()/_clone----------->clone()--------->do_fork()---------->copy_process()进程的切换:进程切换⼜称为任务切换、上下⽂切换。
关于对μC/OS-Ⅱ嵌入式实时操作系统内核分析一、μC/OS-Ⅱ概述1、μC/OS-Ⅱ的基本概念μC/OS是源码公开的实时嵌入式操作系统,具有源代码开放、内核小、实时性好的突出优点,能够被移植到各种微处理器和微控制器上。
我们今天所分析的μC/OS-Ⅱ实时操作系统内核正是建立在μC/OS的基础之上的。
μC/OS-Ⅱ是典型的微内核实时操作系统。
它提供了任务调度、任务管理、时间管理和任务间的通信等基本功能。
与一般通用的操作系统相比,嵌入式实时操作系统既具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点。
嵌入式实时操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等。
评价嵌入式操作系统的重要指标有实时性、可裁剪性、可扩展性。
2、μC/OS-Ⅱ的基本性能特点公开源代码、可移植性好、可固化、可裁剪、抢占式实时内核、多任务管理、函数调用和系统服务的执行时间是确定的、每个任务有自己单独的栈、提供多系统服务和中断请求可使正执行任务暂时挂起等多个优点。
二、任务管理1、任务的工作状态任务是μC/OS-Ⅱ中最重要的概念之一。
它也被称作为一个线程为一个简单的程序,该程序可以认为CPU完全只属于该程序。
每个任务都被赋予一定的优先级,有着自己的一套CPU寄存器和栈空间。
如下图:一个任务通常是一个无限的循环。
TASK()任务初始化任务代码μC/OS-Ⅱ可以管理多达64个任务,但由于其两个任务被系统占用,并保留了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1以及OS_LOWEST_PRIO这八个任务供将来使用。
因此用户可以使用的有56个应用任务。
每个任务都有不同的优先级,一般来说,任务的优先级号越低,任务的优先级越高。
μC/OS-Ⅱ总是先运行进入就绪态的优先级最高的任务。
目录一、M entor Graphics ESD公司简介二、N ucleus操作系统的特点三、源代码操作系统的优势四、Nucleus操作系统开发环境的配置五、Nucleus的网络浏览器(WebBrowse)介绍六、Nucleus操作系统的应用领域及在国内外的用户七、Nucleus操作系统的成功案例1、Nucleus操作系统在通讯设备上的应用●以Nucleus操作系统为核心的路由器方案2、Nucleus操作系统在消费类电子产品上的应用●Nucleus操作系统和MPC860平台开发机顶盒●N ucleus操作系统与ARM7构成POS系统●N ucleus操作系统与ARM7构成PDA3、Nucleus操作系统在医疗仪器上的应用4、Nucleus操作系统在电力系统上的应用5、Nucleus操作系统在美国军方的应用举例一、Mentor Graphics ESD公司简介●公司全称:Mentor Graphics Embedded Software Division●Mentor Graphics Group成立于1981年,全球雇员超过4000人,为全球领先的EDA工具提供商;ESD是Mentor Graphics公司内专注于嵌入式开发工具的部门,产品包括:Nucleus RTOS, CodeBench IDE, Inflexion UI Design Tools等,全球雇员超过200人;●ESD总部美国Alabama州的Mobile●在美国的加利佛尼亚,德克萨斯,马塞诸塞,佛罗里达以及田纳西等设有分支机构●在英国、法国和德国设有分支机构●在日本、韩国、澳大利亚、台湾、中国、意大利和俄罗斯等国设有代理商●1990年推出Nucleus实时多任务操作系统●1993年成为MOTOROLA推荐的四大RTOS厂商之一●1994年推出全球唯一的MNT虚拟开发平台●1994年推出全球唯一的VNET网络化虚拟平台●1994年成功地推出Java和RTOS产品●1995年成为全球第一大源代码RTOS厂商●1996年选定旋极科技公司为其中国大陆及香港地区独家代理商二、Nucleus PLUS的特点:Nucleus PLUS 是为实时嵌入式应用而设计的一个抢先式多任务操作系统内核,其95%的代码是用ANSIC写成的,因此非常便于移植并能够支持大多数类型的处理器。
Linux实验总结分析报告⼀、Linux系统概念模型从整体来看,Linux可以划分为⽤户空间和内核空间,我们平常编写的⽤户程序以及C库函数都位于⽤户空间,⽽内核空间⾃顶向下可分为系统调⽤、内核(进程管理、内存管理、⽂件管理、中断等)以及平台架构相关代码。
1、Linux启动分析当我们打开PC的电源,BIOS开机⾃检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux,Linux⾸先进⾏内核的引导,接下来执⾏init程序,init程序调⽤了rc.sysinit和rc等程序,rc.sysinit和rc当完成系统初始化和运⾏服务的任务后,返回init;init启动了mingetty后,打开了终端供⽤户登录系统,⽤户登录成功后进⼊了Shell,这样就完成了从开机到登录的整个启动过程。
2、进程管理linux内核通过task_struct(进程描述符)结构体来管理进程,多个任务的task struct组成的链表,被称为task list(任务列表)。
(1)进程创建:在Linux系统中,所有的进程都是PID为1的init进程的后代。
内核在系统启动的最后阶段启动init进程。
该进程读取系统的初始化脚本(initscript)并执⾏其他的相关程序,最终完成系统启动的整个进程。
Linux提供两个函数去处理进程的创建和执⾏:fork()和exec()。
⾸先,fork()通过拷贝当前进程创建⼀个⼦进程。
⼦进程与⽗进程的区别仅仅在于PID(每个进程唯⼀),PPID(⽗进程的PID)和某些资源和统计量(例如挂起的信号)。
exec()函数负责读取可执⾏⽂件并将其载⼊地址空间开始运⾏。
(2)进程终⽌依靠do_exit()(在kernel/exit.c⽂件中)把与进程相关联的所有资源都被释放掉(假设进程是这些资源的唯⼀使⽤者)。
⾄此,与进程相关的所有资源都被释放掉了。
进程不可运⾏(实际上也没有地址空间让它运⾏)并处于TASK_ZOMBIE状态。
基于NucleusPLUS的嵌入式系统的软件设计本文介绍了离子迁移谱仪的工作机理、软件系统设计以及嵌入式实时多任务操作系统(RTOS)Nucleus PLUS,重点介绍后者在离子迁移谱仪中的具体实现。
引言现今社会,毒品走私比较猖獗,对人民的生命财产、社会稳定构成了一定的威胁,同时大气监测以及对有毒气体的监控也是刻不容缓的。
所开发的离子迁移谱仪,是一种利用IMS(离子迁移谱技术)的专用探测仪,它在确定的温度、气压、电场条件下,通过精确测定离子在电场作用下穿过固定距离的迁移时间,来认定被测可疑物质中是否具有某些化学成分的分子,并对某些特殊的化学物质能够发出报警信息,从而可用来检测毒品及有毒气体。
该系统的工作原理如下:通过细节匹配,对离化后物质的等离子图的波峰位置(即物质的迁移时间)的提取来鉴定物质的具体成分。
系统的原理框图如图1所示。
图1系统原理框图离子迁移谱仪需要读取实时数据,并作分析、处理,要求每25ms处理1000个离子信号数据,具有一定的实时性。
同时,它还需对离子管内的温度、气压、电压等参数进行读取、控制。
设备分析时,要求能迅速地判断出物质的成分(不超过20秒),而此过程中,涉及到大量的实时数据处理。
可见离子迁移谱仪嵌入式系统对容量和速度要求较高,不仅要实时数据处理,还要对多个参数进行控制。
为了保证系统的可靠性,提高开发效率,在离子迁移谱仪中必须引入嵌入式实时操作系统。
嵌入式RTOS选择可用于嵌入式系统软件开发的操作系统很多,但关键是要选择一个适合的嵌入式实时操作系统。
在离子迁移谱仪实时系统的设计中,我们对嵌入式RTOS的要求如下:(1)实时性使用时,必须保证进程调用和处理的快速性,因为检测的样品信息需及时分析处理。
(2)稳定性作为系统设计的软件平台,需要具有相当的稳定性。
从而保证离子迁移谱仪检测系统即使在多变的外部环境下如气压、温度等,也能够正确执行预定的动作。
(3)内核规模较小由于整个系统的硬件资源有限(我们配备了2M的FLASH),因此源代码必须足够的小,以便写入存储器,提高运行效率。
济南研博嵌入式操作系统Nucleus触摸屏驱动的开发[摘要] Nucleus 是一款优秀的嵌入式实时操作系统(RTOS),具有抢占式和时间片轮转任务调度方式,主要用在时间苛刻的嵌入式应用当中。
大约95%的Nucleus用ANSI C 写成,作为一个库加载到应用代码当中。
目前手机行业有很多使用Nucleus。
触摸屏控制电路主要有一下四部分组成:进行数据处理、控制功能的MCU,一个四线电阻式触摸屏和控制芯片ADS7846, 以及显示触摸点坐标的显示部分...[关键字] 嵌入式操作系统程序开发Nucleus Nucleus 是一款优秀的嵌入式实时操作系统(RTOS),具有抢占式和时间片轮转任务调度方式,主要用在时间苛刻的嵌入式应用当中。
大约95%的Nucleus用ANSI C 写成,作为一个库加载到应用代码当中。
目前手机行业有很多使用Nucleus。
1.触摸屏控制电路的硬件结构触摸屏控制电路主要有一下四部分组成:进行数据处理、控制功能的MCU,一个四线电阻式触摸屏和控制芯片ADS7846, 以及显示触摸点坐标的显示部分。
在这里主要对触摸屏的硬件电路和驱动设计做一个较详细的介绍ADS7846是美国TI公司推出的一款四线制电阻式触摸屏控制器,通过机械式触摸,可以迅速得到触摸点位置信号。
它是一种典型的带有连续逼近型寄存器的A/D转换器,内部自带2.5V参考电压,一个和微处理器相连的SPI接口,同时具有测量温度、触摸压力和电池电压的功能,有可编程的8位或12位的分辨率。
在2.7V电压和125kHz的转换速率下,功耗仅为750uW,在power down 模式下仅为0.5uW。
由于这些优良的性能,在移动设备中有大量的应用。
下表为控制器的主要引脚工作原理:图2是触摸屏控制器和MCU的连接电路图。
当ADS7846检测到触摸屏被按下时,它就会产生一个中断信号(PENIRQ为低电平)给MCU,MCU选中ADS7846控制器(CS为低),然后通过串行口DIN 向ADS7846发送8位控制字,此后DOUT在DCLK的下降沿得到12位的输出。
Nucleus操作系统-实时内核介绍第二章Nucleus PLUS内核介绍2.1 Nucleus PLUS应用开发综述2.1.1 开发调试环境嵌入式实时应用程序的开发基于宿主机系统。
IBM PC 和UNIX 工作站都是典型的宿主机系统。
一般来说,应用程序都是运行在分离的计算机系统上被目标系统调用。
然而,IBM PC系统并不遵循上述规则,因为它既可以作为Nucleus PLUS 应用程序的主机,也可为目标机为其服务。
运行在IBM PC系统上的应用程序以EXE 文件的形式存在。
针对目标系统的调试软件通常包括ICE 仿真工具和TRM(目标仿真)工具。
ICE仿真工具给工程师提供了完全控制和了解目标系统硬件状况的工具,特别是在校验新硬件时尤为有用。
但是,考虑到开发工具成本问题和ICE时有的使用局限性,许多项目采用TRM调试。
TRM 就是一个运行在目标系统(通常为ROM)上的小型的软件组件。
TR M 提供包括下载、下断点和内存入口服务。
ICE 和TRM 都有宿主系统控制。
这通常由串口来完成。
2.1.2使用Nucleus PLUSNucleus PLUS被设计成C库的形式使用。
使用内部应用程序软件的服务从Nucleu s PLUS 库文件取出并且组合成应用程序目标文件来生成最终的映像文件。
此映像文件可以下载到目标系统或是存放到目标系统ROM 中。
使用Nucleus PLUS 的步骤被描述成下列通用的方式:1) 如果有必要,修改低级系统初始化文件,INT.S。
注:这些文件通常以汇编语言形式交货并且它的的扩展是指定的开发工具。
2) 定义Application_Initialize 函数,Nucleus PLUS 启动系统时它优先运行。
注意NUCLEUS.H 文件必须包含以至于能被Nucleus PLUS 服务调用。
3) 定义应用程序任务。
如果用到Nucleus PLUS 服务,文件NULCUES.H 必须被包含。
四川大学操作系统课程设计报告学院:软件学院专业:软件工程专业年级:08级组编号:组成员:提交时间:2010年6月24日指导教师评阅意见:.. . . .指导教师评阅成绩:::实验项目一项目名称:开发Shell程序试验背景知识Shell此处的shell是指命令行式的shell。
文字操作系统与外部最主要的接口就叫做shell。
shell是操作系统最外面的一层。
shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了你与操作系统之间通讯的方式。
这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。
shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。
本质上,shell script是命令行命令简单的组合到一个文件里面。
Shell基本上是一个命令解释器,类似于DOS下的。
它接收用户命令(如ls等),然后调用相应的应用程序。
较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。
交互式shell和非交互式shell交互式模式就是shell等待你的输入,并且执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。
当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
当它读到文件的结尾,shell也就终止了。
实验目的:Shell是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。
它是一个交互性命令解释器。
shell 独立于操作系统,这种设计让用户可以灵活选择适合自己的shell。
Nucleus操作系统在ARM11上的移植研究与实现摘要:基于对ARM11架构的启动模式与内存分配的技术研究,通过对Nucleus内核的分析,在ARM11架构的芯片上实现Nucleus操作系统的移植。
以S3C6410为例,详细介绍了从板级初始化到任务循环调度过程中的启动模块、中断设计、定时器设计、任务调度流程与触发方式。
目前成功移植于TD-LTE系统中,实现操作系统基本功能的同时满足了实验项目中TD-LTE对系统实时性与任务资源管理的需求。
关键词: Nucleus操作系统;移植;启动加载;中断;任务调度Nucleus操作系统作为一个实时性较强的嵌入式操作系统具有较高可移植性,目前在ARM (Advanced RISC Machines)架构上已经成功实现移植,现有文献中实现多基于较老的ARM7或是ARM9架构,并且介绍笼统,和实际结合不紧密[1-2]。
本文详细介绍Nucleus在ARM11架构上的移植,以S3C6410芯片的实验数据为证,分析在移植过程的内存分配、堆栈配置、时钟、中断设置。
文中详细阐述了具体应用于TD-LTE系统时,移植过程中启动模块设计对系统性能的影响,以及内核移植中的关键接口和系统任务调度方式。
1 基本启动流程与内存分配移植过程中的基本流程。
流程中的各个部分的设置并非是像框图这样独立开来的,在实际的应用设计中各个模块都是互相有联系的,会根据加载方式的不同、内存分配的差异或是具体功能的要求而产生关联性的改变。
在后面几个重要模块的移植过程介绍中也会对此详述。
移植的目的在于应用,本移植应用于TD-LTE无线综合测试仪中(该产品采用ARM11架构的S3C6410芯片),为该产品实现协议层的任务调度。
很多实验项目中采用手动方式加载启动模块,然而在应用中,实现一个产品不可能像普通的调试程序一样手动加载驱动与操作系统,然后进入任务调度,因此需要实现自动加载而利用到Flash。
另外中断向量表设置必须从内存起始地址0x0000-0000加载[3],否则无法实现正常硬件中断,而在中断产生时使得程序异常终止。
目录一、NUCLEUS的内核(KERNEL) (3)1.1 系统启动 (3)1.2 初始化线程 (4)1.3 线程调度 (4)1.3.1 任务的调度 (5)1.3.2 中断的调度 (10)1.3.3 操作系统数据结构的保护 (15)1.4 任务间通信 (17)1.4.1 消息管道(Pipes) (18)1.5 任务的同步 (23)1.6 定时器 (24)1.7 内存管理 (24)1.8 输入/输出设备驱动 (25)N UCLEUS内核总结: (25)二、NUCLEUS的开发工具 (27)2.1 N UCLEUS C++ (27)2.2 N UCLEUS MNT (27)2.3 N UCLEUS VNET (27)2.4 N UCLEUS PC+ (27)2.5 N UCLEUS FILE (27)2.6 N UCLEUS CLIB (28)2.7 N UCLEUS GRAFIX (28)2.8 N UCLEUS EDE (28)2.9 N UCLEUS UDB (29)2.10 N UCLEUS DEBUG+ (29)2.11 第三方产品的支持 (31)2.12 SDS S INGLE S TEP (31)三、NUCLEUS的网络支持 (33)3.1 I NTERNET套件 (33)Nucleus NET (33)Nucleus SNMP (33)Nucleus RMON (34)Nucleus SP AN (34)3.2 N UCLEUS W EB S ERV (34)3.3 N UCLEUS J VI (34)3.4 N UCLEUS EPILOGUE (34)Nucleus实时操作系统是Accelerated Technology公司开发的嵌入式RTOS产品,只需一次性购买Licenses,就可以获得操作系统的源码。
Nucleus购买的灵活性比较大:Kernel,Networking,File System,Web Technology,Target Debugger可以分开购买,如果我们只需要微内核的话只要购买Kernal和Debugger,当前的下位机就是这样配置的。
但是,如果以后我们要开发接入服务器和IP Phone的话就必须购买一堆网络协议;上位机要用的话还要购买文件系统。
Nucleus的另一大好处是程序员不用写板支持软件包(BSP),因为操作系统已经开放给程序员,不同的目标板在操作系统BOOT时可以通过修改源码进行不同的配置。
对于程序员来说,写BSP是一项比较繁琐的任务,有了OS的源码这项工作就简单多了,同时调试时也可以跟踪到中断、寄存器那一级,简化了硬件的调试。
VxWorks和pSOS都必须购买标准的BSP模板工具来写板支持软件包,开发工作量就比较大了。
Nucleus对CPU的支持能力比较强,支持当前流行的大多数RISC、CISC、DSP处理器,比如:80x86(实时、保护模式)、68xxx、PowerPC、i960、MIPS、SH、ARM、ColdFire。
Nucleus 系统对于不同的处理器,操作系统的源码大部分是相同的,只有5%的源码是用汇编写的跟CPU 有关。
如果使用另外的CPU,则只用修改5、6个汇编程序就可以进行移植,但是对于不同系列的处理器,它们的Compiler、Linker、Debugger是不同的(要另外购买),而且编译预处理的过程也是不一样的,这就要投入一部分力量去进行操作系统的移植。
当然,这也是Nucleus的一个优点,VxWorks和pSOS都没有源码,换一个系列的CPU操作系统又要重新购买,实际上他们OS开发的工作量并没有多少,但却造成了用户的重复性投资。
一、Nucleus的内核(Kernel)Nucleus的核心是一个实时的多任务内核——Nucleus PLUS,具有以下特性(Accelerated Technology公司宣称的):可移植性:Nucleus PLUS可用于大多数流行的处理器。
因为Nucleus PLUS主要是用标准C写的,移植到新的处理器系列相对很直接。
这也就意味着用Nucleus PLUS开发的应用程序也具有很高的可移植性。
可用性:不像其他的商业内核,Nucleus PLUS的系统调用名直接表明了它的功能。
比如,你可以通过Nu_Create_Task系统调用来创建一个任务。
Nucleus PLUS的系统调用都设计成具有类似的入口参数和返回值类型。
Nucleus PLUS的对象都不隐式地和别的对象相关。
比如,邮箱和任务之间是不相关的。
因此,用户可以利用多个Nucleus PLUS对象之间的结合形成混合系统调用。
配置:Nucleus PLUS最终是以C库的形式提供给用户,你可以选择所需要的部分链入到你的应用程序中。
特性:①、快速响应时间:对临界资源的检测时间不依赖于占有该临界资源的线程执行时间的长短,一旦低优先级线程释放掉临界资源(不管其是否执行完),高优先级线程就会抢占运行。
②、每个任务的执行时间和其他任务的处理时间无关。
③、较高吞吐量:随着任务数目的增多,任务的调度时间为常数。
④、可扩展性:利用现有系统调用的结合可得到新的系统调用。
Nucleus PLUS提供其他实时内核都具有的系统服务,比如:任务控制、任务通信、任务同步、内存管理、可编程的定时器、标准的输入/输出设备接口等。
对任务的调度依赖优先级、时间片的方法,可以选择挂起一个任务按照先入先出(FIFO)的顺序或按照优先级的顺序。
所有的操作系统对象(任务、邮箱、队列、管道等)都可以动态地创建和删除。
创建一个对象时,要指定指定其控制块的内存区域和其它的数据要求(堆栈空间等)。
Nucleus在任务调度时,首先查看任务是否可以抢占,如果不能抢占,则一直执行到任务完成或任务放弃时间片;否则,依靠优先级进行调度,先调入优先级最高的任务,对于优先级相同的任务则分享时间片、轮流调度。
//ben:请问这里的时间片是系统节拍还是由多个节拍组成的时间片,猜测应该就是时间节拍若每个任务分配一些时间片,怎样保证实时?//错了,1.1系统启动对于68K系列的CPU,如果采用CrossCode C编译器的话,Nucleus使用的是CrossCode C的启动函数,标号START 是系统的入口点。
START 标号在文件start.s 中,用汇编及CrossCode C 的宏指令写的。
主要完成68360中断向量表指针VBR 和寄存器基址MBAR 的初始化,以及外部RAM 各分区的初始化,这些分区包括:ram ,data ,malloc ,init ,sys_memory 等。
系统低级初始化完成后,控制就交给初始化线程INT_Initialize 。
1.2 初始化线程初始化线程是系统开始执行的第一个线程,线程的入口是INT_Initialize ,同时也是系统的主函数,具有另外的标号名main 。
系统初始化首先完成硬件寄存器的配置,包括:存储器片选(CS0~CS7),软件看门狗SWT ,系统周期定时器PIT ,A 口、B 口、C 口引脚功能设定,串行通信控制器的初步配置等。
这些硬件的配置跟目标板有关,需要用户自己用汇编来写。
其次,将系统堆栈指针TCD_System_Stack 初始化为堆栈区stack 的顶部,同时在系统内存区sys_memory 中拿出TMD_HISR_Stack_Size 大小的一片内存用作高级中断服务程序的堆栈HISR_STACK 。
然后,控制交给INC_Initialize 。
INC_Initialize 首先完成操作系统数据结构的初始化,包括:线程控制、邮箱、队列、管道、信号量、事件、分区内存、动态内存、定时器、I/O Driver 等。
其次,调用Application_Initialize ,这一函数由用户编写,完成任务、消息队列等的创建、中断的注册以及应用程序的初始化。
当所有的初始化都完成后,INC_Initialize 调用TCT_Schedule 开始线程的调度。
1.3 线程调度TCT_Schedule 是线程调度的入口,负责将控制权交给具有最高优先级的高级中断服务程序HISR (TCD_Execute_HISR )或处于就绪状态的最高优先级任务(TCD_Execute_Task )。
当没有任务或HISR 执行时,线程调度就在TCT_Schedule 中做死循环,等待TASK 或HISR 就绪。
HISR 的优先权比任务高,一旦有HISR 就绪,则当前调度的任务将会被挂起,优先调度HISR 。
一旦有TASK 或HISR 就绪,控制就会交给TCT_Control_To_Thread ,在这里将TCD_Execute_HISR 或TCD_Execute_Task 设置为当前线程TCD_Current_Thread ,启动任务时间片定时器,根据线程的不同堆栈类型恢复堆栈,然后执行RTS 或RTE 指令,将控制权交给线程。
Nucleus 的线程有两种类型的堆栈帧://ben :有什么区别呢?Interrupt 堆栈类型Solicited 堆栈类型任务创建时,要建立一个初始堆栈帧,线程入口是TCC_Task_Shell,该Shell执行任务的入口程序,通常任务的执行是一个死循环,不停地在等待消息或事件,如果没有消息或事件任务就会挂起,否则往下执行。
如果,任务在Shell调度中返回,则表示该任务已执行完毕,将任务终止,其状态置为NU_FINISHED。
HISR创建时,也要建立一个初始堆栈帧,线程入口是TCC_HISR_Shell。
HISR_Shell调度的是当前具有最高优先级的HISR,直至TCD_Execute_HISR的激活计数器tc_activation_count 为0,才调度同一优先级或低优先级的其它HISR。
HISR_Shell对HISR调度就是执行HISR的入口程序,然后根据激活计数器循环调度,HISR是不能被挂起的。
1.3.1 任务的调度任务的调度需要用到以下比较重要的数据结构:TCD_Created_Tasks_List:已创建任务链表的头指针。
TCD_Priority_List[256]:任务控制块TCB的指针数组,每个元素是优先级0~255就绪任务链表的头指针。
TCD_Priority_Groups:按位来定义的长字,对应32组优先级,每bit是一组,负责8个优先级,如果其中任意一个优先级有任务就绪,则该bit置1。
TCD_Sub_Priority_Groups[32]:子优先级组的位映像图,每一元素对应一组优先级。
比如TCD_Sub_Priority_Groups[0]对应优先级0~7,bit0~bit7分别表示优先级0~7。