嵌入式开发简介
能力的CPU、RAM、ROM、多种I/O口等集成到一块硅片上构 成的一个小而完善的微型计算机系统。
S MCU(Micro Controller Unit) 微控制器 S 在SCM的基础上满足各类应用,目前来讲不加以区分。
S SoC(System on aChip) 系统级芯片 S 实现复杂系统功能的VLSI; S 采用超深亚微米工艺技术; S 使用一个以上嵌入式CPU/数字信号处理器(DSP); S 外部可以对芯片进行编程; S 主要采用第三方IP进行设计。
S 据不完全统计,目前全世界嵌入式微处理器已经超过1000多
种,体系结构有30多个系列,其中主流的体系有ARM、 MIPS、PowerPC、X86等。
S 但与全球PC市场不同的是,没有一种嵌入式微处理器可以
主导市场,仅以32位的产品而言,就有100种以上的嵌入式微 处理器。
1.5 Arm处理器介绍
(5)软硬件测试、调试:通过 JTAG 等方式联 合调试程序; (6)下载固化:程序无误,下载到产品上生产。
4.5 交叉编译和链接
S 嵌入式软件开发编码完成后,要进行编译和链接以生成可
执行代码。但是,在开发过程中设计人员普遍使用Intel的 x86系列CPU的计算机进行开发,而目标环境的处理芯片 却是多种多样的,如ARM,DSP,PowerPC,DragonBall 系列等,这就要求开发机上的编译器能支持交叉编译。
试应用程序代码的环境。与运行应用程序的环境不同,它分 散在有通信连接的宿主机和目标机环境之中。
S 宿主机(Host)
S 是一台通用计算机,一般是PC机。它通过串口或是网络连接
与目标机通信;
S 目标机(Target)
S 可以是嵌入式应用软件的实际运行环境,也可以是能替代实
际环境的仿真环境;
4.2 Linux开发流程
者直接启动;
S 在主机上编译各类应用程序,单板启动内核后通过NFS运行
它们,经过验证后再烧入单板。
4.4 详细开发流程
(1)源代码编写:编写源 C/C++及汇编程序; (2)程序编译:通过专用编译器编译程序; (3)软件仿真调试:在 SDK 中仿真软件运行 情况;
(4)程序下载:通过 JTAG、USB、UART 方 式下载到目标板上;
S 系统软件控制和管理嵌入式系统资源,为嵌入式应用提供支
持的各种软件,如设备驱动程序、嵌入式操作系统、嵌入式 中间件等。系统软件层由实时多任务操作系统(Real-Time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS 是嵌入式应用软件的基础和开发平台。
1.3 IP核
S IP(Intellectual Property) 知识产权核
S IP核是一段具有特定电路功能的硬件描述语言程序,该程序
与集成电路工艺无关,可以移植到不同的半导体工艺中去生 产集成电路芯片。利用IP核设计电子系统,引用方便,修改 基本元件的功能容易。具有复杂功能和商业价值的IP核一般 具有知识产权。
S 嵌入式操作系统可以统称为应用在嵌入式系统中的操作系统,它
S S S S S
具有一般操作系统的功能,同时具有嵌入式软件的特点,主要有:
可固化存储 可配置、可剪裁 独立的板级支持包,可修改 不同的CPU有不同的版本 应用的开发需要有集成的交叉开发工具
S 常见操作系统: S µ C/OS-II S WinCE S Linux S VxWorks S Palm OS S QNX
S IP核分类
S 软核(Soft IP Core) S 固核(Firm IP Core) S 硬核(Hard IP Core)
1.4 嵌入式微处理器
S 嵌入式微处理器大多工作在为特定用户群所专用设计的系
统中,它将通用CPU许多由板卡完成的任务集成在芯片内部, 从而有利于在设计时趋于小型化,同 时还具有很高的效率和 可靠性。
S HAL/BSP具有以下两个特点
S 硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为
上层软件与硬件平台之间的接口,BSP为操作系统提供操作和控制硬 件的方法;
S 操作系统相关性:不同的操作系统具有各自的软件层次结构,并且具有
特定的硬件接口形式。
2.4 嵌入式系统软件层
S 系统软件层
S 国内一个普遍被认同的定义:
S 以应用为中心、以计算机技术为基础、软/硬件可裁剪、适应
应用系统对功能、可靠性、成本、体积、功耗严格要求的专 用计算机系统。
1.2 嵌入式发展历史
S
SCM(Single Chip Microcomputer) 单片机
S 一种集成电路芯片,采用超大规模集成电路技术把具有数据处理
3.3 内核与调度
S 内核(Kernel)
S 多任务系统中,内核负责管理各个任务,或者说为每个任务
分配CPU时间,并且负责任务之间的通信。 S 内核提供的基本服务是任务切换。内核本身也增加了应用程 序的额外负荷,代码空间增加ROM用量,内核本身的数据结 构增加了RAM的用量。内核本身对CPU的占用时间一般在2 到5个百分点之间。
4.3 嵌入式代码编程
S 对于嵌入式开发,最初的嵌入式设备是一个空白的系统,
需要通过主机为它构建基本的软件系统,并烧写到设备中, 另外,嵌入式设备的资源并不足以用来开发软件。所以需 要用到交叉开发模式,在主机上编辑、编译软件,然后在 目标板上运行、验证程序。一般分以下三个步骤:
S 在主机上编译Bootloader,然后通过Jtag烧入单板; S 在主机上编译嵌入式Linux内核,通过Bootloader烧入单板或
2.3 嵌入式系统中间层
S 硬件层与软件层之间为中间层,也称为硬件抽象层
(Hardware Abstract Layer,HAL) 或板级支持包(Board Support Package, BSP)
S 它将系统上层软件与底层硬件分离开来,使系统的底层驱动
程序与硬件无关,上层软件开发人员无须关心底层硬件的具 体情况,根据BSP层提供的接口即可进行开发。该层一般包 含相关底层硬件的初始化、数据的输入/输出操作和硬件设 备的配置功能。
S 调度(Scheduler或dispatcher )
S 内核的主要职责之一,决定哪个任务运行。多数实时内核是
基于优先级调度法的。每个任务根据其重要程度被赋予一定 优先级。CPU总是让处在就绪态的优先级最高的任务先运行。
4.1 嵌入式软件开发
S 嵌入式软件开发的特点:
S 需要交叉开发环境:交叉开发环境是指实现编译、链接和调
公开源代码的 BOOTLOADER,如 U.BOOT、BLOB、 VIVI、LILO、ARM-BOOT、RED-BOOT 等,根据具体芯 片进行移植修改。有些芯片没有内置引导装载程序,比如, 三星的 ARV17、ARM9 系列芯片, 这样就需要编写开发板 上 FLASH 的烧写程序,读者可以在网上下载相应的烧写程 序,也有 Linux 下的公开源代码的 J-FLASH 程序。如果不 能烧写自己的开发板,就需要根据自己的具体电路进行源代 码修改。这是让系统可以正常运行的第一步。如果用户购 买了厂家的仿真器 比较容易烧写 FLASH,虽然无法了解其 中的核心技术,但对于需要迅速开发自己的应用的人来说可 以极大提高开发速度。
PC或工作站上,而被调试程序运行在各式的专用目标机上;
S 调试器通过某种通信方式与目标机建立联系,如串口、并口、
网络、JTAG或者专用的通信方式;
S 在目标机上一般具有某种调试代理,这种代理能与调试器一
起配合完成对目标机上运行程序的调试。这种代理可以是某 种能支持调试的硬件,也可以是某种软件;
S 目标机可以是一种仿真机。通过在宿主机上运行目标机的仿
S 为了保证实时性能,使用效率高和速度快的汇编语言是不
可避免的。
S 尽可能提高嵌入式应用软件的可移植性方法:
S (1)尽量用高级语言开发,少用汇编语言 S (2)局域化不可移植部分 S (3)提高软件的可重用性
4.7 交叉调试
4.8 交叉调试
S 交叉调试,又叫远程调试,具有以下特点:
S 调试器和被调试的程序运行在不同的机器上。调试器运行在
3.2 任务的定义
S 任务是一个具有独立功能的无限循环的程序段的一次运行
活动,是实时内核调度的单位,包含代码、数据、堆栈、 程序执行的上下文环境,具有以下特性:
S 动态性:任务状态是不断变化的。 S 一般分为就绪态、运行态和等待态。 S 在多任务系统中,任务的状态将随着系统的需要不断进行变化。 S 并行性: S 系统中同时存在多个任务,这些任务在宏观上是同时运行的。 S 异步独立性: S 每个任务各自按相互独立的不可预知的速度运行,走走停停。
S
嵌入式集成开发环境都支持交叉编译、链接,如 WindRiver公司的TornadoⅡ以及GNU套件等。交叉编译 链接生成两种类型的可执行文件:调试用的可执行文件和 固化的可执行文件。
4.6 嵌入式软件开发要点
S 嵌入式应用软件高度依赖目标应用的软硬件环境,软件的
部分任务功能函数由汇编语言完成,具有高度的不可移植 性。
2.1 嵌入式系统组成
2.2 嵌入式系统硬件层
S 硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、
Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O 等)。
S 在一嵌入式处理器基础上添加电源电路、时钟电路和存储
器电路,就构成了一个嵌入式核心控制模块。其中操作系 统和应用程序都可以固化在ROM中。
S (2)配置开发主机,配置串口通信软件或者Windows 下的超
级终端。串口通信软件的作用是作为调试嵌入式开发板的 信息输出的监视器和键盘输入的工具。配置网络主要是配 置NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调 试环境设置过程。Biblioteka 5.2 Linux开发过程简介