470 likes | 579 Views
内容提要. 概述 Nucleus PLUS 介绍 Nucleus 开发环境. Nucleus — 嵌入式实时多任务操作系统. 产品概况 美国 ATI(Accelerated Technology Inc.) 公司出品 提供完全源代码,无产品版税( Royalties Free) 模块化结构,可随意裁剪 支持几乎所有的嵌入式微处理器 开发应用非常方便 : 无 BSP 开发 可移植性强 目前在源码 RTOS 市场占据第一位. ATI 公司简介. Accelerated Technology, Inc. 成立于 1990 年 平均增长率 : 70%
E N D
内容提要 • 概述 • Nucleus PLUS介绍 • Nucleus开发环境
Nucleus—嵌入式实时多任务操作系统 产品概况 • 美国ATI(Accelerated Technology Inc.)公司出品 • 提供完全源代码,无产品版税(Royalties Free) • 模块化结构,可随意裁剪 • 支持几乎所有的嵌入式微处理器 • 开发应用非常方便: 无BSP开发 可移植性强 • 目前在源码RTOS市场占据第一位
ATI公司简介 • Accelerated Technology, Inc. • 成立于 1990年 • 平均增长率: 70% • 加入著名的Mentor Graphics公司 • 成长历程 • 1990 – 发布Nucleus RTX for AMD29k • 1993 – 第一家商用 RTOS for ARM6 • 1997 -第一家商用 RTOS for PPC601 • 1998 – 位列全球增长最快的500家企业之中 • 1999 - 2000 • Motorola 黄金搭档 1999, 2000 • 《软件》, 位列500 强1999, 2000 • 《财富》,位列最快500强 1999, 2000 • Nucleus EDE, 嵌入式产品10佳, 电子工业年报, 1999
ATI公司简介 • ATI的使命 Provide embedded software developers the widest choice of affordable products with source code. + 强而大的公司 + 全方位的产品线 + 低价格 + 源代码 + 无产品版税 + 强大的技术支持
开发工具 (Develop tools) Nucleus 产品线一览 图形软件包 (Grafix) TCP/IP协议包 (Nucleus NET) 系统内核 (Kernel) 文件系统
Kernel Object Access (Nucleus Debug+) RAM Driver Floppy SCSI 1394/ 系统内核 (Plus,C++,OSEK) FIREWIRE** FMM Drivers USB**l File Drivers System IDE Serial Re_entrant Memory C Library PCMCIA PCI# Mgt.Unit# PCMCIA Plug&play** (Nucleus CLIB) ATA Dynamic Download# Nucleus 产品线一览——Kernels
Email Client# GUI Basic Services VGA LCD 图形软件包 Keyboard (Nucleus GRAFIX) Touch Screen Drivers Mouse Nucleus 产品线一览——Grafix
SNMPv3 TFTP Client FTP Client Telnet TFTP Server FTP server SNMPv2 RMONv2 Web Server (Nucleus Webservl) RMONv1 SNMPv1 RMONv1 Lite# TCP/IP软件包 HTTP Client# Email (Nucleus NET) SMTP(cli/serv) POP3 Client MIME# Spanning Tree Java Net Drivers (Nucleus span) (Nucleus JVi**) PCMICA RIP2 SLIP PPP OSPF# Ethernet Nucleus 产品线一览——Nucleus Net
Nucleus Lauterbach IAR Paradigm Green Hills CAD-UL Diab-SDS EPI UDB MNT EDE ARM DBG+ Tasking Microsoft Others Nucleus开发工具
Nucleus支持的部分CPU • Intel: x86, StrongARM, i960… • Motorola: 680x0, 683xx, 68HCxx, PowerPC, ColdFire,M-core… • Hitachi: H8/300H, H8S, SH1/2/3/4 • NEC: V8xx • NS: CR16A/B, CR32A • Other: C167, TriCore, CPP48k, M16C/80… • ARM:ARM6/7/9, Atmel, Cirrus logic, Hyundai, Samsung, TI • MIPS: Atlas, IDT, Lexra, LSI, NEC, NKK, QED, Toshiba • DSP: AD, TI • … Any CPU!
导航 路由 GPS PDA 手机 医疗 Nucleus 控制 机顶盒 网络 通信设备 智能卡 汽车电子 Nucleus的应用 …
Nucleus主要嵌入式市场 • 工业自动化 81 • 电讯 234 • 军事/航空 13 • 医疗 42 • 消费电子 92 • 计算机/外设 57 • 汽车 23 • 互联网设备 57 • 网络/数据通信 96 • 实验室设备 42 • 办公设备/自动零售业 7 • 其他 308 • 总数 1052 Design Wins January 1998 – March 2000
任务间通信 任务间同步 任务控制 存储器管理 Nucleus Plus I/O设备驱动 定时器/ 系统时钟 中断控制 Nucleus PLUS提供的服务
Application RTOS Nucleus BSP Board Hardware 操作系统在产品开发中的位置
操作系统的基本功能 • 任务调度 • 任务通信 • 内存管理 • 中断处理 • 其他功能 • 设备驱动 • 图形 • 协议 • 其他...
- crt0.s Start - int.s 板级初始化 操作系统初始化 - inc.c .vectors 应用程序初始化 .code .data(initialized ) 循环调度 .bss(uninitialized) 系统启动和存储空间分配 Development Basics • custom- 如中断向量表(.vectors) • .code -代码段 • .data - 初始化数据段 • .bss - 未初始化数据段
RTOS的基本概念 什么是任务 什么是任务(Task)? A task is a semi-independent program segment with a dedicated purpose 任务是具有特定目的的半独立的程序段 任务是Nucleus中最常用的应用程序处理线程 任务的属性 状态、优先级、时间片、堆栈、程序指针、寄存器……
任务的属性 状态 • Ready - 就绪,等待执行. • Running - 正在执行. • Suspended - 挂起,等待特定的事件触发. • Finished - 已完成处理. • 优先级 • 当前的状态 • 堆栈指针 • ... Priority 任务的属性、信息都存放在任务控制块中(TCB) Stack * State . . .
A single task stack /* Main control of program */ main() { ….. do_something(); ….. } /* A function to do something */ void do_something() { ….. } 任务调度执行 传统单任务执行 传统单任务的特点: • 一个任务完成系统全部操作 • 单个执行线索(execute thread) • 单个堆栈空间
/* Main control of program */ main() { do_something(); } /* A function to do something */ void do_something() { } Task 1 Stack 1 /* Main control of program */ main() { do_something(); } /* A function to do something */ void do_something() { } Task 2 Stack 2 /* Main control of program */ main() { do_something(); } /* A function to do something */ void do_something() { } Task 3 Stack 3 任务调度执行 多任务模式 • 多个任务竞争、并发执行 • 多个执行线索 • 多个相互独立的堆栈空间
任务调度执行 调度控制程序 • 优先级(priority) - 反应任务的重要性 • 时间片 (time_slice) - 任务一次所占用CPU 的最长时间. • 抢占性(preemptive)- 除了被中断抢占外,任务可以无限期的占用CPU。
最高优先级 (0) Task List (0) . . . . Task-10 Task-20 Task-30 . . . . 最低优先级 (255) Task List (255) Task-1255 Task-2255 Task-3255 任务调度执行 调度控制程序 基于优先级排列的已创建任务链表
任务调度执行 上下文切换 任务之间切换需要保存上下文 • 机器状态 -CPU当前状态(由CPU内部寄存器的值表征) • 通用寄存器 • 程序计数器 • 状态寄存器 • 其他 Register 6 Register 5 Register 4 CPU Register 1 Register 1 Register 1 Register 4 Register 4 Register 4 Register 3 Register 2 Register 2 Register 2 Register 5 Register 5 Register 5 Register 2 Register 3 Register 3 Register 3 Register 6 Register 6 Register 6 Register 1 stack
任务调度执行 任务的挂起 • 无条件挂起 • 中断产生时挂起. • 保存所有的内部寄存器. • 条件挂起 • 由内核调用产生挂起. • 只保存相关寄存器
任务间通信 通信方式 • 任务间通信 - 在两个或多个任务间传递数据 • Mailboxes -邮箱 • Queues -队列 • Pipes -管道
任务间通信 Mailboxes • 定长(4个长字) • 系统开销小 • 在两个或多个任务间一次传递一条消息 Task X 1 Message Task Y
任务间通信 Queues/Pipes • 容纳多条消息 • 定长或变长 • 用来传送多条消息 • Queue消息长度以长字为单位,Pipe以字节为单位。 Task X Task Y
任务间同步 同步方式 • 任务间同步 - 任务间同步控制 • Semaphores-信号量(旗语) • Events -事件 • Signals -信号(软中断)
获取信号量 Program Execution 共享 资源 释放信号量 任务间同步 二元信号量(0,1) 控制对共享资源的访问
Event 2 Event 1 Event 0 当一个任务试图得到事件标志位未置位的事件时,任务将挂起;置位后,任务恢复 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 事件处理 1 0 1 1 1 任务间同步 Events Task 1
signal_handler { … } EP Task 1 Task P EP Task 2 任务间同步 Signals • 由任务触发. • 当Task1、Task2发出一个信号,Task P中信号处理程序将立即执行. • 信号处理程序相当于一个超级任务.
100bytes 100bytes 100bytes T2 100bytes T2 100bytes 100bytes 100bytes 100bytes 50bytes 50bytes 200bytes 200bytes 100bytes 100bytes 100bytes 100bytes T3 T1 100bytes 100bytes T3 T1 存储器管理 分区与动态 • 分区- 提供定长的内存分配和释放 • 动态 - 提供变长的内存分配和释放
一个外部中断打断 一个任务,使自己得到响应 中断服务程序开始启动 IX Device 1 ISRX interrupt_service_routine() { handle_the_interrupt() } 中断处理 中断的基本概念 • 中断是来自设备的一个服务请求(异步). • 中断应该在尽可能短的时间内响应. • 中断处理须有一些必要的上下文保护
Nucleus软件方案 • 原型工具(Prototyping Tools) • 嵌入式产品(Embedded Products) • 开发工具(Development Tools) • Nucleus MNT • Nucleus EDE • Nucleus UDB
Nucleus MNT 完全的原型环境 • 利用Microsoft Developer Studio • 在 Windows 95 / NT下 • 适用于所有产品的原型环境
PLUS for MNT NET for MNT GRAFIX for MNT Application PLUS for Target NET for Target GRAFIX for Target Nucleus MNT
Nucleus 库 Application MNT Target Nucleus MNT 目的 • 开发者可以使用Windows开发环境设计嵌入式应用程序 • 使用两个不同的Nucleus库 • 其一是针对Windows的(MNT) • 其二是针对Target的 • 但应用程序是相同的
Nucleus EDE 完全的开发环境 • Nucleus嵌入式开发环境 • 集成已有的工具. 提高效率. • 所有产品都可集成在 Nucleus EDE 工程中
MIPS Processor Support Motorola ARM SH X86 GNU/Hitachi UDB Development Tool Support ARM/UDB GNU/UDB Diab/SDS CAD-UL Nucleus EDE 特点 • 与现有工具一起工作. • 将工程由原型转换成嵌入式应用. • 生成目标环境可执行代码. • 主要功能: • 工程管理 • 浏览 • 现有工具的管理和调用
Nucleus UDB 完全的调试环境 • 同一调试环境用于不同的目标平台. • 基于Kernel的调试器 • 内核目标资源显示 • 任务相关断点 • 多任务调试 • 混合C/汇编窗口 • 自动追踪 • …
Nucleus UDB MNT, EDE和UDB • 与 Nucleus MNT相同的Windows风格 • 原型用 Nucleus MNT • 生成目标代码用 Nucleus EDE • 调试目标代码用 Nucleus UDB
第三方工具 • 支持ARM的Nucleus编译工具 • ADS1.2(IDE) • ARM公司推出的编译调试环境 • 支持C、C++、汇编语言 • 包括调试器AXD和ARMulator • 号称在以下方面比其他编译器好30%以上: • 代码尺寸 • 性能 • 可靠性
第三方工具 • 支持ARM的Nucleus仿真调试工具 • Trace32系列:最优秀的仿真调试工具 • 强大、灵活的调试手段 • 丰富的断点类型 • 强大的运行控制 • 统一的命令集,支持批处理 • 高效灵活的脚本语言Practice • 支持RTOS调试 • 支持FLASH在线编程 • 支持嵌入式软件测试 • 支持多CPU调试和多内核调试 • 个性化界面,用户可自行设计菜单、按键等
Trace32-ICD TRACE32支持的RTOS超过20种,主要有 NucleusOSERubusCMXRTXCpSOS VxWORKS... • Trace32对RTOS主要调试手段: • RTOS专用菜单 • Kernel资源显示 • Task状态显示、统计评估 • 任务级调试... • 实现方法(以Nucleus为例): • Task.Config Nuc ;配置多任务调试器 • Menu.Reprogram Nuc ;启动Nucleus菜单 • 相关命令: • Task.TaskStat • Task.MbxStat • Task.QueueStat • Task.EventStat • ...
最佳方案 • 基于ARM的嵌入式开发最佳方案 • RTOS:Nucleus • 编译器:ADS1.2 • 仿真器/调试器:Trace32-ICD