嵌入式系统教案(李震)

时间:2019-05-15 06:13:54下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《嵌入式系统教案(李震)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《嵌入式系统教案(李震)》。

第一篇:嵌入式系统教案(李震)

嵌入式系统教案

教材:《ARM9嵌入式系统设计—基于S3C2410与Linux(第二版)》,徐英慧,马忠梅,王磊,王琳 编著,北京航空航天大学出版社 课时分配:理论课32学时,实验课8学时,共40学时

第1章 嵌入式系统基础

一、教学目的:

介绍嵌入式系统的基本概念,包括嵌入式系统的概念、特点及应用,由本章了解嵌入式系统的基础知识,掌握嵌入式的发展方向。

学时分配:2学时

二、教学重点:

实时操作系统的多任务内核,实时操作系统的任务管理机制

三、教学难点:

理解和掌握嵌入式系统中任务间采用的共享数据结构和消息机制等两种通信方式,嵌入式系统的优先级继承,抢占式调度和非抢占式调度间的区别。

四、教学方法:

课题讲授及嵌入式系统在精细农业中的应用实例演示

五、教学过程设计:(2学时)

一、嵌入式系统概念

(一)嵌入式系统的定义

(二)嵌入式系统的组成

(三)嵌入式系统的特点

(四)嵌入式系统的应用

(五)实时系统

二、嵌入式处理器

(一)嵌入式处理器分类

(二)微控制器的定义及特点

(三)嵌入式微处理器的定义及特点,介绍主流的微处理器,包括ARM、MIPS、MC68K、PowerPC、X86微处理器等。

(四)DSP处理器的定义及特点

(五)片上系统的定义及特点

(六)典型的嵌入式处理器

三、嵌入式操作系统

(一)操作系统的概念和分类

(二)实时操作系统

(三)常见的嵌入式操作系统

四、实时操作系统的内核

(一)任务管理

(二)任务间的通信和同步

(三)存储器管理

(四)定时器和中断管理

五、嵌入式技术发展现状及趋势

六、思考题

1、什么是嵌入式系统? 它由哪几部分组成?(作业)

2、嵌入式系统有何特点?(作业)

3、嵌入式处理器分为哪几类?

4、ARM英文原意是什么? 它是一个怎样的公司? 其处理器有何特点?

5、什么事实时系统?实时系统有何特点?如何划分?

6、实时操作系统常用的任务调度算法有哪几种?

第2章 嵌入式系统开发过程

一、教学目的:

介绍嵌入式软件的开发过程和调试手段,使学生了解嵌入式软件与普通计算机软件在开发和调试上的区别。

学时分配:2学时

二、教学重点:

嵌入式系统与通用计算机在人机交互界面、有限功能及时间关键性和稳定性方面的区别,板级支持包的定义及其作用,嵌入式系统软件的调试方式。

三、教学难点:

嵌入式应用软件开发所使用的交叉开发环境的定义,嵌入式开发时宿主机和目标机间的区别及其协调工作关系。

四、教学方法:

课题讲授及实例演示,采用多媒体教学方法,利用Powerpoint将本节课的关键内容归类,并通过Internet收集相关的资料融入教学内容中。

五、教学过程设计:(2学时)

一、嵌入式软件开发的特点

二、嵌入式软件的开发流程

三、嵌入式系统的调试

四、板级支持包

六、思考题

1、嵌入式系统开发分为哪几个阶段?每个阶段的特点是什么?

2、嵌入式系统有哪几种调试方式?现在最流行的是哪种?使用什么接口?

3、什么是板级支持包?它一般完成什么工作?(作业)

第3章 ARM体系结构

一、教学目的:

介绍ARM的体系结构,主要包括ARM体系结构的特点,ARM处理器的结构和分类,ARM存储器及存储器说明,ARM的编程模型,ARM指令集,主要包括ARM指令集的分类、ARM和Thumb指令集。

学时分配:10学时

二、教学重点:

ARM体系结构的特点,ARM中ALU的基本结构、ALU的时序、桶形移位寄存器的工作过程、高速乘法器的实现原理、ARM的寄存器组织形式,ARM的9种基本寻址方式,ARM指令集的四大类指令及伪指令。

三、教学难点:

理解和掌握7种工作模式下ARM31个通用寄存器的分组和使用方式,理解和熟练使用ARM指令集中四大类指令的符号及调用格式。

四、教学方法:

课题讲授及例程解析,采用多媒体教学方法,利用Powerpoint将本节课的关键内容归类,并通过Internet收集相关的资料融入教学内容中。

五、教学过程设计:

一、arm体系结构概述(2学时)

(一)arm体系结构的特点

(二)arm处理器结构

(三)arm处理器内核

(四)arm处理器核

二、编程模型(2学时)

(一)数据类型

(二)处理器模式

(三)处理器工作状态

(四)寄存器组织

(五)异常

(六)存储器和存储器映射i/o

三、arm基本寻址方式(2学时)

四、arm指令集(4学时)

(一)条件执行

(二)指令分类说明

(三)thumb指令集与arm指令集的区别

(四)thumb指令分类说明

六、思考题

1、ARM7和ARM9在流水线设计方面有何不同? ARM9处理器有和特点?

2、ARM处理器支持的数据类型有哪些?

3、写出ARM使用的各种工作模式和工作状态

4、ARM处理器总共有多少个寄存器?其中哪个用过PC?哪个用过LR?

5、ARM920T处理器加入了哪两个协处理器?各自的主要功能是什么?

6、ARM920T支持哪些时钟模式?

7、简述ARM的CPSR寄存器中各位的作用。(作业)

第4章 ARM系统硬件设计基础

一、教学目的:

介绍ARM系统硬件设计的基础知识,包括ADS集成开发环境,对ARM的汇编程序设计和混合编程以及ARM硬件启动程序设计。

学时分配:8学时,其中6个理论学时,2个实验学时

二、教学重点:

基于ARM的汇编语言程序设计,包括ARM汇编器支持的伪指令、基于ARM的汇编语言语句格式和ARM汇编语言程序的基本结构等。基于ARM的C语言与汇编语言混合编程,包括C语言与汇编语言混合编程应遵守的规则和C语言与汇编语言之间的相互调用与混合使用方法。

三、教学难点:

理解和掌握ARM汇编器支持的伪指令及其使用方式、基于ARM的汇编语言语句格式和ARM汇编语言程序的基本结构等。

四、教学方法:

课题讲授、例程解析与上机实验相结合,采用多媒体教学方法,利用Powerpoint将本节课的关键内容归类,在课堂上对ARM的汇编语言进行讲解的同时布置相关练习,加深学生对ARM汇编语言的理解,利用上机实验的方法使学生加深对ARM开发环境ADS的了解。

五、教学过程设计:

一、ARM开发环境简介(0.5学时)

(一)RealView MDK开发工具简介

(二)IAR EWARM集成开发环境简介

二、基于ARM的汇编语言程序设计(1.5学时)

(一)ARM汇编器支持的伪指令

(二)基于ARM的汇编语言语句格式

(三)ARM汇编语言程序的基本结构

(四)基于ARM的汇编语言程序举例

三、基于ARM的硬件启动程序设计(2学时)

(一)分配中断向量表

(二)初始化存储系统

(三)初始化堆栈

(四)初始化有特殊要求的硬件模块

(五)初始化应用程序执行环境

(六)改变处理器模式

(七)调用主应用程序

四、基于ARM的C语言与汇编语言混合编程(2学时)

(一)C语言与汇编语言混合编程应遵守的规则

(二)汇编程序调用C程序的方法

(三)C程序调用汇编程序的方法

(四)C程序中内嵌汇编语句

(五)基于ARM的C语言与汇编语言混合编程举例

五、上机实验:ADS1.2嵌入式系统开发环境(2学时)

六、思考题

1、基于ARM的硬件启动程序应该包含哪些工作?

2、简述C语言与汇编语言混合编程时应该遵循的参数传递规则。

3、C程序中内嵌ARM汇编语句的格式是怎样的?应该注意哪些内容?

4、C语言中如何内嵌汇编实现对链表的简单操作?

5、ARM启动程序中如何设置中断向量?如何初始化堆栈和寄存器?

6、在对ARM集成开发环境进行设置时如何设置ARM内核和内存地址范围?

第5章 基于S3C2410的系统硬件设计

一、教学目的:

介绍S3C2410系统的硬件设计,分别介绍I/O口、中断、DMA、UART、A/D接口、键盘、LCD、触摸屏、音频及USB设备的硬件设计要点等。

学时分配:10学时,其中6个理论学时,4个实验学时

二、教学重点:

S3c2410A的I/O口工作原理,ARM的中断原理及S3c2410A的中断控制器,UART的工作原理,A/D接口原理以及LCD显示原理等。

三、教学难点:

理解和掌握S3c2410A的I/O口编程、中断控制器的程序设定、通过程序设定UART帧格式、A/D转换的流程及相关的程序编制等。

四、教学方法:

课题讲授、例程解析与上机实验相结合,采用多媒体教学方法,利用Powerpoint将本节课的关键内容归类,在课堂上对S3c2410A的结构进行讲解,课堂上携带开发板,给学生一个感性的认识,进行讲解的同时布置相关练习,加深学生对S3c2410A结构的理解,本章节共安排三次实验,内容分别为:GPIO实验、UART实验和A/D实验。通过实验,是学生更加了解S3c2410A处理器的内部功能。

五、教学过程设计:

一、S3c2410简介(1学时)

(一)S3c2410A的特点

(二)存储器控制

(三)NAND Flash控制器

(四)时钟和电源管理 二I/O口(1学时)

(一)S3c2410A的I/O口工作原理

(二)I/O口编程实例

三、中断(1学时)

(一)ARM的中断原理

(二)S3c2410A的中断控制器

(三)中断编程实例

四、UART(1学时)

(一)UART的工作原理

(二)S3c2410A的UART

(三)UART编程实例

五、A/D接口(1学时)

(一)A/D接口原理

(二)S3c2410A的A/D转换

(三)A/D接口编程实例

六、LCD(1学时)

(一)LCD显示原理

(二)S3c2410A的LCD控制器

(三)LCD显示的编程实例

六、思考题

1、S3c2410A采用的是哪种CPU内核?实现了什么样的体系结构?

2、简述S3c2410ANand Flash启动装载器的特点。

3、S3c2410A的中断控制器有多少个中断源?

4、S3C2410A的存储器控制器的特性是什么?

5、S3c2410A共有多少个功能复用的I/O口?如何分组?

6、S3c2410A的UART数据发送时的帧格式是怎样的?如何进行设定?

7、S3c2410A的A/D转换器的类型是什么?

第6章 Linux操作系统基础

一、教学目的:

介绍Linux的基础知识,包括内核结构、进程调度、内存管理、虚拟文件、进程通信、网络接口、设备管理以及Linux基本命令等。

学时分配:6学时,其中4个理论学时,2个实验学时

二、教学重点: 嵌入式Linux开发概述、开发环境构建、嵌入式编程基础知识;Linux系统与Windows系统在进程调度、内存管理、虚拟文件系统、进程间通信、网络接口以及各子系统之间的依赖关系等方面的区别。

三、教学难点:

makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件;掌握gcc和gdb的基本用法。

四、教学方法:

课题讲授及实例演示,采用多媒体教学方法,利用Powerpoint将本节课的关键内容归类,并通过Internet收集相关的资料融入教学内容中,安排一次Linux系统配置及简单程序运行实验。

五、教学过程设计:

一、Linux操作系统概述(1.5学时)

(一)Linux操作系统的产生及发展

(二)Linux操作系统的特点

二、Linux内核的结构(2.5学时)

(一)进程调度

(二)内存管理

(三)虚拟文件系统

(四)进程间通信

(五)网络接口

(六)各子系统之间的依赖关系

六、思考题

1、Linux操作系统有哪些特点?

2、操作系统有哪些内核的结构模式?

3、单内核操作系统有何特点?微内核操作系统有何特点?

4、什么是进程?Linux的进程有哪些种类?

5、Linux虚拟内存技术提供哪些功能?

6、简述进程调度与内存管理之间的关系。简述内存管理与虚拟文件系统之间的关系。

复习

一、教学目的:

复习所学内容,帮助学生对嵌入式系统课程所设计的知识点进行总结和归纳。学时分配:2学时

二、教学重点:

嵌入式系统的定义、嵌入式系统的组成、嵌入式系统的特点,嵌入式系统的应用,操作系统的概念和分类、实时操作系统、常见的嵌入式操作系统,arm体系结构概述、arm体系结构的特点、arm处理器结构、arm处理器内核、arm处理器核,Linux内核等。

三、教学方法:

课题讲授,采用多媒体教学方法,利用Powerpoint将本节课的关键内容归类。

第二篇:《嵌入式系统设计》教案

嵌入式系统设计教案

课程总学时: 32 讲课学时: 24 实验学时: 8 授 课 人: 杨词慧

南昌航空大学信息工程学院

目录 嵌入式系统概述.......................................................................................................................1 1.1 嵌入式系统的基本概念...............................................................................................1 1.2 嵌入式系统的发展历史...............................................................................................2 1.3 嵌入式系统的体系结构...............................................................................................2 1.4 嵌入式处理器...............................................................................................................3 1.5 嵌入式操作系统...........................................................................................................4 1.6 嵌入式系统的应用及发展趋势...................................................................................7 ARM体系结构.........................................................................................................................8 2.1 ARM设计思想.............................................................................................................8 2.2 ARM体系结构分析.....................................................................................................9 2.3 ARM处理器系列.......................................................................................................11 2.4 ARM处理器模式.......................................................................................................15 2.5 ARM体系的异常处理...............................................................................................16 2.6 ARM内部寄存器.......................................................................................................18 2.7 ARM体系的存储系统...............................................................................................19 ARM指令系统及程序设计基础...........................................................................................21 3.1 ARM寻址方式...........................................................................................................21 3.2 ARM指令集...............................................................................................................24 3.3 Thumb指令集............................................................................................................33 3.4............................................................................................................................................35 3.5............................................................................................................................................35 3.6 嵌入式系统设计与开发过程.....................................................................................36 STM32微控制器...................................................................................................................37 4.1 STM32微控制器的性能指标....................................................................................37 2 3 4

I 嵌入式系统概述

教学目的:使学生对嵌入式系统的基本概念和体系结构、嵌入式处理器、嵌入式操作系统、嵌入式系统的历史、应用及发展趋势有一定的了解。

教学重点:嵌入式系统的基本概念、嵌入式处理器和嵌入式操作系统。教学难点:嵌入式系统的体系结构、嵌入式处理器。教学方法与教学手段:课堂讲授,多媒体教学。教学时间:2课时。教学内容

1.1 嵌入式系统的基本概念

(1)嵌入式系统的定义

先举例说明生活中的各种嵌入式系统设备,如iPhone、小米手机、洗衣机、电压力锅等。IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是用于控制、监视或者辅助操作机器和设备的装置(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。

微机学会的定义:嵌入式系统是以嵌入式应用为目的的计算机系统,可分为系统级、板级和片级。a)系统级:各种类型的工控机、PC104等模块。b)板级:各种类型的带CPU的主板或OEM产品。c)片级:各种以单片机、DSP、微处理器为核心的产品。

一般定义:嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统。

(2)嵌入式系统的特点 a)专用、软硬件可剪裁配置。b)低功耗、高可靠性、高稳定性。c)软件代码矮小精悍。d)代码可固化。e)实时性。f)弱交互性。

g)软件开发通常需要专门的开发工具、环境和方法。h)要求开发、设计人员具有较高的技能。i)具有较长的生命周期。(3)嵌入式系统的分类

按嵌入式微处理器的位数可分为:4位、8位、16位、32位和64位。按实时性能可分为:非实时系统和实时系统。

按软件结构可分为:嵌入式单线程系统和嵌入式事件驱动系统。

按应用领域可分为:信息家电类、消费电子类、医疗电子类、移动终端类、通信类、汽车电子类、工业控制类、航空电子类、军事电子类等。

1.2 嵌入式系统的发展历史

(1)以单芯片为核心的可编程控制器形成的系统

1971年11月,Intel推出Intel 4004。随后出现Intel 8080/8085、8086、Motorola的6800、68000,Zilog的Z80、Z8000。

以微处理器为核心构成的系统

单板机:Intel的iSBC系列、Zilog的MCB等

将计算机做在一个芯片上,大部分应用于专业性强的工业控制系统中,没有操作系统的支持,系统结构和功能相对单一,处理效率较低,存储容量较小。

(2)以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统

CPU种类繁多,通用性较弱;系统开销小,效率高;操作系统达到一定的兼容性和扩展性;应用软件较专业化,用户界面不够友好。

(3)以嵌入式操作系统为标志的嵌入式系统

嵌入式操作系统可运行于各种不同类型的微处理器上,兼容性好;操作系统内核小,效率高;具备文件和目录管理,支持多任务、网络应用,具备图形窗口和用户界面;有大量的应用程序接口API。

(4)以Internet为标志的嵌入式系统 嵌入式设备与Internet的结合。

1.3 嵌入式系统的体系结构

(1)体系结构

(2)硬件层

 嵌入式处理器:ARM、DSP、FPGA  存储器系统:ROM、FLASH、SDRAM  中断控制器、DMAC、定时器/计数器、UART、USB控制器、LCD控制器等  I/O接口:USB、I2C、SPI、CAN等

(3)中间层

 硬件抽象层(Hardware Abstraction Layer, HAL)。位于操作系统内核与硬件电路之间的接口层,隐藏硬件接口细节。

 板级支持包(Board Support Package, BSP)。为上层的驱动程序提供访问硬件设备寄存器的函数包。 设备驱动程序

1.4 嵌入式处理器

(1)嵌入式处理器的分类

中高端的嵌入式微处理器(Embedded Micro-Processor Unit, EMPU)低端的微控制器(Microcontroller Unit, MCU)DSP处理器(Digital Signal Processor, DSP)高度集成的片上系统(System on Chip, SoC)(2)嵌入式微处理器

由通用计算机中的CPU演变而来,只保留与嵌入式应用紧密相关的功能硬件,在工作温度、抗电磁干扰、可靠性、功耗等方面做了各种增强。

主要的嵌入式处理器类型:ARM、MIPS、PowerPC、68000系列等。特点

a)在设计中考虑低功耗。

b)采用可扩展的处理器结构。处理器内部留有很多扩展接口。c)具有很强的存储区保护功能。d)提供丰富的调试功能。

e)对实时任务具有很强的支持能力。(3)微控制器

俗称单片机,将整个计算机系统集成到一块芯片中。

WatchWatchdogdogGPIO/计数GPIOUARTUART定时定时/计数A/DA/DD/A器D/A器2CCANCANII2CSPISPIUSBUSBCPUCPUSRAMSRAM核心部分FlashFlash8位单片机示意图以一种微处理器为核心,芯片内部集成Flash、RAM、总线逻辑、定时器/计数器、I/O口、串行口、PWM、A/D、D/A等。

最早的单片机: 1976年,Intel的8048,Motorola的68HC05、Zilog公司的Z80.(4)DSP处理器

对系统结构和指令进行了特殊设计,使其适合DSP算法 高效乘累加运算、超标量操作、指令流水线 高效数据存取、硬件重复循环 确定性操作(程序执行时间可预测)应用场合:音视频编解码、数字滤波、FFT等(5)片上系统

将整个系统做在一个芯片上 优点

a)通过改变内部工作电压,降低芯片功耗 b)减少芯片对外的引脚数,简化制造过程

c)减少外围驱动接口单元及电路板之间的信号传递,加快微处理器数据处理的速度 d)内嵌线路可避免信号传递时所造成的系统杂讯 联发科推出28nm双核处理器MT6572 a)代号武松,基于Cortex-A7架构 b)主频为1.2GHz c)处理器上整合了Wi-Fi、FM收音机、GPS以及蓝牙四种功能 d)支持500万像素摄像头(6)嵌入式处理器的发展趋势 a)内部结构

SoC设计,与DSP、Flash、FPGA融合;性能更强,集成更多的功能部件;双核或多核结构 b)功耗更低 c)可靠性更高 d)支持ISP、ISD 1.5 嵌入式操作系统

(1)操作系统的概念及功能

操作系统。是一组计算机程序的集合,用来有效地控制和管理计算机的硬件和软件资源,并为用户提供方便的应用接口。

功能:处理器管理;存储器管理;设备管理;文件管理;用户接口(2)操作系统的分类 按程序调度的方法分为

 顺序操作系统。只含一个运行程序,独占CPU时间,顺序执行。如DOS系统。 分时操作系统。系统内同时有多道程序运行。如Unix系统。 实时操作系统。

从应用角度,嵌入式操作系统可分为  面向低端信息家电

 面向高端信息家电  面向个人通信终端  面向通信设备  面向汽车电子  面向工业控制

从实时性的角度,嵌入式操作系统可分为  具有强实时特点的嵌入式操作系统  具有弱实时特点的嵌入式操作系统  没有实时特点的嵌入式操作系统(3)实时操作系统(RTOS)

是具有实时性且能支持实时控制系统工作的操作系统,首要任务是调度一切可利用的资源来完成控制任务。

对现场不停监测,一旦有事件发生能立即处理。与通用OS的区别:实时性,代码尺寸小。一般包括以下几个重要组成部分:

 实时内核:任务管理、定时器管理、存储器管理、任务间通信与同步等。 网络组件  文件系统  图形用户界面

IEEE的Unix委员会规定了实时操作系统须具备以下几个特点:  支持异步事件的响应。 中断和调度任务的优先机制。 支持指令性计划占式调度。 支持同步。

(4)常见的嵌入式操作系统 嵌入式Linux  实时的嵌入式Linux:如RT-Linux、KURT-Linux等。RT-Linux将通常的Linux任务优先级设为最低。

 一般的嵌入式Linux:如μCLinux。 开源,内核小、效率高,可定制 μC/OS和μC/OS-II  μC/OS-II(MicroController Operating System)是由Jean J.Labrosse开发的实时操作系统内核。

 已被移植到Intel、ARM、Motorola等公司的81种不同的处理器上。

 Labrosse用一年时间开发了μC/OS实时操作系统; 1992年在《Embedded System Programming》上 发表介绍文章,并公布源代码;1993年写了《μC/OS, The Real-Time Kernel》;书及源码推动了μC/OS-II的发展。

 μC/OS-II只是一个实时操作系统的内核,全部核心代码只有8.3 KB。 只包含进程调度、时钟管理、内存管理和进程间的通信与同步等基本功能。Windows CE  多线程、完整优先权、多任务的32位嵌入式操作系统。 基本内核大小至少为200KB。VxWorks  美国WindRiver公司于1983年设计

 是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。 拥有良好的持续发展能力和高性能的内核及友好的用户开发环境。

 支持多种处理器,如ARM、x86、i960、SunSparc、MIPS RX000、PowerPC、StrongARM等。 以良好的可靠性和实时性,广泛应用在通信、军事、航空、航天等领域。

 应用案例:美国F-

16、FA-18战斗机,B-2隐形轰炸机,“爱国者”导弹,1997年4月在火星登陆的火星探测器。Palm OS  32位嵌入式操作系统,由3Com公司的Palm Computing部门开发。

 在掌上电脑和PDA市场上占有很大的市场份额,曾占据90%的PDA市场份额。 2010年04月29日惠普12亿美元收购Palm QNX  一个实时、可扩充的操作系统。

 部分遵循POSIX(可移植操作系统接口)相关标准。

 内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理。 内核非常小巧(QNX4.X约为12KB),运行速度极快。iOS  苹果推出,基于Darwin  最新:iOS8 Android  Google开发的基于Linux平台的开源手机操作系统 Delta OS  是电子科技大学实时系统教研室和北京科银京成技术有限公司联合研制并开发的全中文嵌入式操作系统。

 绝大部分代码由C语言编写。

 已成功应用于通信、网络、信息家电等多个应用领域。pSOS ISI公司研发的产品。

模块化、高性能、完全可扩展。

1.6 嵌入式系统的应用及发展趋势

(1)嵌入式系统的应用领域  消费电子领域  通信网络领域

 工业控制领域、机器人领域  交通管理与汽车电子领域  国防与航空航天领域  医疗仪器领域

(2)嵌入式系统的发展趋势

 小型化、智能化、网络化、可视化  多核技术的应用  低功耗、绿色环保

 云计算、可重构、虚拟化等技术被进一步应用到嵌入式系统中  嵌入式系统软件将逐渐PC化  融合趋势

 微控制器MCU与SoC的结合  微控制器MCU与DSP的结合  ARM与DSP的结合

 微控制器MCU与CPLD/FPGA的结合  安全性 ARM体系结构

教学目的:使学生对ARM设计思想、ARM处理器系列、ARM体系结构、ARM处理器模式、ARM内部寄存器、ARM体系的存储系统有一定的了解。

教学重点:ARM设计思想、ARM体系结构、ARM处理器模式、ARM内部寄存器。教学难点:ARM处理器模式、ARM内部寄存器。教学方法与教学手段:课堂讲授,多媒体教学。教学时间:4课时。教学内容

2.1 ARM设计思想

(1)RISC 传统的CISC(Complex Instruction Set Computing)指令集中,约20%指令占整个程序代码的80%。RISC(Reduced Instruction Set Computing)是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行、简单而有效的指令集。

RISC设计重点在于降低硬件执行指令的复杂度,而传统的CISC更侧重于硬件执行指令的功能性,使CISC指令变得复杂。

(2)RISC设计思想的实现

 指令集。减少了指令种类,指令只实现简单的功能,指令长度固定。

 流水线。指令的处理过程被拆分成几个更小的、能够被流水线并行执行的单元。

 寄存器。更多通用寄存器,可存数据和地址,可为所有数据操作提供快速的局部存储访问。 load-store结构。处理器只处理寄存器中数据,用load和store指令完成寄存器和外存间的数据传送

(3)ARM的设计思想  较小的核。降低功耗

 高的代码密度。考虑成本和物理尺寸限制

 较小的处理器内核管芯(Die)面积。留给外设电路的空间较大  硬件调试技术(4)ARM微处理器的特点

 体积小,功耗低,成本低,性能高;  支持Thumb/ARM指令集,兼容8/16位器件;

 大量使用寄存器,指令执行速度更快;  大多数数据操作都在寄存器中完成;  寻址方式灵活简单,执行效率高;  指令长度固定。

2.2 ARM体系结构分析

(1)包含典型 的RISC 体系结构特征

 统一寄存器文件加载/存储体系结构,数据处理操作只针对寄存器内容;  简单寻址模式,所有加载/存储地址只通过寄存器内容和指令字段确定。 指令长度固定,简化了指令译码。(2)还提供

 可组合使用转换与算术或逻辑运算指令  自动递增和自动递减寻址模式,可优化程序循环  加载存储多个指令以最大化数据吞吐量  几乎所有指令都采取条件执行的方式(3)普林斯顿结构和哈佛结构

普林斯顿结构:也称冯·诺伊曼结构,它将程序指令存储器和数据存储器合并在一起的存储结构。ARM7系列基于普林斯顿结构。

哈佛结构:将程序指令存储和数据存储分开的存储结构。ARM9系列之后都基于哈佛结构。

(4)流水线

ARM7的三级流水线在执行单元完成了大量的工作,执行单元的工作往往占用多个时钟周期,从而成为系统性能的瓶颈。

ARM9采用哈佛架构,避免了数据访问了取指的总路线冲突,采用五级流水线设计。

五级流水线技术把三级流水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工

作量,进而允许使用较高的时钟频率。

无论三级流水线还是五级流水线,在以下情况下都会发生阻塞:  多周期指令、跳转分支指令  中断发生

 相邻指令之间的寄存器冲突:如果当前指令(A)的目的操作数寄存器和下一条指令(B)的源操作数寄存器一致,B指令就需要等A回写之后才能译码。

(5)ARM体系结构的版本

2.3 ARM处理器系列

(1)ARM处理器系列

 经典ARM处理器:ARM7、ARM9、ARM10、ARM11  Cortex-A系列处理器:Cortex-A15、Cortex-A9、Cortex-A8、Cortex-A7、Cortex-A5  Cortex-R系列处理器:Cortex-R7、Cortex-R5、Cortex-R4  Cortex-M系列处理器:Cortex-M4、Cortex-M3、Cortex-M1、Cortex-M0+、Cortex-M0、CMSDK、CMSIS  SecurCore处理器(2)ARM内核版本命名规则

(3)ARM7系列微处理器 a)主要特点

 最高主频:130MIPS(Million Instructions Per Second);  功耗低;

 代码密度高,兼容16位的微处理器;  可得到广泛的操作系统和实时操作系统支持;  众多的开发工具,优秀的调试机制;  采用3级流水线结构;

 提供0.25μm、0.18μm和0.13μm的生产工艺。b)冯·诺伊曼结构:数据和指令使用同一条总线。

c)包括ARM7TDMI、ARM7TDMI-S、ARM7EJ-S和ARM720T四种类型,适用于不同的市场要求 d)ARM7TDMI  ARM公司最早为业界普遍认可并广泛应用的处理器核。 T:Thumb;D:Debug;M:Multiplier;I:Embedded ICE logic。e)ARM7TDMI-S  是ARM7TDMI的可综合(synthesizable)版本(软核)。

 ARM以“软”核的方式把ARM7TDMI核授权给处理器厂商,处理器厂商可进行修改和综合。这就是ARM7TDMI-S。

 综合出的整个核比“硬”核大50%,电源效率降低50%。f)ARM7EJ-S  是可综合的、带有增强型DSP(E变种)和Java加速功能(J变种)的32位RISC嵌入式处理器。

 主要用于数字音频播放器、带Java功能的无线手持设备、喷墨打印机、数码相机和PDA等方面。

g)ARM720T  专为使用Windows CE、Symbian OS操作系统平台设计。 主要用于数字音频播放器、喷墨打印机和数码相机等。(4)ARM9系列微处理器 a)主要特点

 5级整数流水线;

 单一的32位AMBA(Advanced Microcontroller Bus Architecture)总线接口;  MMU支持Windows CE、Symbian OS、Linux等;  支持实时操作系统,包括VxWorks;  统一的数据Cache和指令Cache;

 提供0.25μm、0.18μm和0.13μm的生产工艺。

b)包括ARM9TDMI、ARM920T、ARM940T和ARM9E四种类型。后三种含有Cache。

c)采用Harvard体系结构

 指令与数据分开存储。 采用指令快存 和数据快存。

d)在相同工艺条件下,ARM9TDMI的处理能力是ARM7TDMI的两倍。e)ARM920T 

Motorola MC9328MX1和Samsung S3C2410X处理器都采用ARM920T 核心。 主要应用于通信终端、3G基带和应用处理器、基于OS的平台设备、数码相机、音频/视频解码和机顶盒等。

f)ARM940T  与ARM920T相比,实现了一个更小的D-Cache、I-Cache和MPU。适于不需运行操作系统的平台。

g)ARM9E  使用单一的处理器核,提供微控制器、DSP、Java应用系统的解决方案;  DSP指令集;

 在0.13μm工艺下,主频可达300MIPS的性能;  集成实时跟踪调试功能;  可选的VFP9浮点处理协处理器;

 高性能的AHB(Advanced High performance Bus)。(5)ARM10系列微处理器 a)主要特点

 6级流水线;

 在典型的0.13μm工艺下,主频可达400MIPS的性能;  单一的32位AMBA 总线接口;

 MMU支持Windows CE、Symbian OS、Linux等;  统一的数据Cache和指令Cache;

 提供0.25μm、0.18μm和0.13μm的生产工艺;  并行读取/写入部件。

b)包括:ARM1020、ARM10200、ARM1020E、ARM1022E、ARM1026EJ-S。c)使用ARM10TDMI处理器核,采用ARMv5T结构。d)ARM10TDMI  在相同工艺条件下,处理能力是ARM9TDMI的两倍;

 采用提高时钟频率、6级流水线、转移预测逻辑、64位存储器和无阻塞的存/取逻辑等措施提升性能。

e)ARM10E。新节能模式,64位Load/Store体系,与ARM10TDMI相比具有的特点

 DSP指令集;

 可选的VFP10浮点处理协处理器;

 在实时控制和三维图像处理时,主频可达650MFLPS(百万次浮点运算每秒)。

(6)ARM11系列微处理器

 ARM1156T2-S内核、ARM1156T2F-S内核、ARM1176JZ-S内核和ARM11JZF-S内核  ARM1156T2-S内核和 ARM1156T2F-S内核  基于ARM v6指令集体系结构;

 是首批含有ARM Thumb-2内核技术的产品。(7)Cortex-A系列微处理器

 适于高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域。 支持传统 ARM、Thumb指令集和新的高性能紧凑型 Thumb-2 指令集。 移动互联网的支持

 低功率设计,支持 Adobe Flash 10.1  高性能 NEON 引擎,广泛支持媒体编解码器  高性能

 Cortex-A15:为新一代移动基础结构应用和无线基础结构应用提供高性能的解决方案。

 Cortex-A9。800 MHz1 GHz 的频率下,提供的性能超过 2000 DMIPS。

 Cortex-A5 低成本实现,在 400-800 MHz 的频率下,提供的性能超过 1200 DMIPS,是尺寸最小、功耗最低的 ARM 多核处理器。

 多核技术:Cortex-A15、Cortex-A5和Cortex-A9 处理器都支持 ARM 第二代多核技术。 高级扩展

 Thumb-2,提供最佳代码大小和性能。 TrustZone,安全扩展,提供可信计算。

 Jazelle 技术,提高执行环境(如 Java、.Net、MSIL、Python 和 Perl)速度。

(8)Cortex-R系列微处理器

 为具有严格的实时响应限制的深层嵌入式系统提供高性能计算解决方案。

 快速。以高时钟频率获得高处理性能。

 确定性。处理在所有场合都必须符合硬实时限制。 安全。系统必须可靠且可信。

 成本效益。在处理器及其内存系统中都具有竞争力的成本和功耗。 应用领域

 智能手机

 企业系统:硬盘驱动器、联网和打印  消费电子:机顶盒、数字电视和播放器  医疗行业、工业和汽车行业的可靠系统  功能集

(9)Cortex-M系列微处理器

 向上兼容的高能效、易于使用的处理器

 针对成本和功耗敏感的 MCU 和终端应用的混合信号设备进行过优化。 更低的功耗,更长的电池寿命。

 高密度指令集,更小的代码,更低的硅成本。

RISC 处理器内核高性能32 位CPU具有确定性的运算低延迟3 阶段管道Thumb-2 技术16/32 位指令的最佳混合小于8 位设备3 倍的代码大小对性能没有负面影响低功耗模式集成的睡眠状态支持多电源域基于架构的软件控制嵌套矢量中断控制器(NVIC)低延迟、低抖动中断响应不需要汇编编程以纯C 语言编写的中断服务例程工具和RTOS 支持广泛的第三方工具支持Cortex 微控制器软件接口标准(CMSIS)最大限度地增加软件成果重用CoreSight调试和跟踪JTAG 或2 针串行线调试(SWD)连接支持多处理器支持实时跟踪(10)SecurCore系列微处理器

 为安全要求较高应用设计。智能卡

 SIM、ID、银行业、付费电视、公共交通、电子政务

2.4 ARM处理器模式

(1)32位ARM处理器工作状态

32位ARM处理器有三种工作状态  ARM状态。对应32位ARM指令集  Thumb状态。对应16位Thumb指令集  Jazelle状态。对应8位的Jazelle指令集

用于在处理器指令层次对JAVA加速

只有进入特定的状态,相应的指令集才有效。CPSR的J(Jazelle)和T(Thumb)位反映程序的状态。Thumb-2  与现有 ARM 和 Thumb 解决方案向后兼容,同时扩展了 Thumb 指令集的可用功能;  使用少于 31% 的内存以降低系统成本;  提供比现有高密度代码高出 38% 的性能。(2)64位ARM处理器工作状态

ARMv8架构

两种主要执行状态:AArch64, AArch32 AArch64:引入了一套新的指令集“A64”专门用于64位处理 AArch32:兼容现有的32位ARM指令集 ARMv8架构支持三个主要指令集

A32(或 ARM):32 位固定长度指令集

T32(Thumb):以 16 位固定长度指令集的形式引入,在引入 Thumb-2 技术时增强为 16 位和 32 位混合长度

A64:提供与 ARM 和 Thumb 指令集类似功能的64位固定长度指令集(3)ARM处理器运行模式

 用户模式(usr):ARM处理器正常的程序执行状态。 快速中断模式(fiq):用于高速数据传输或通道处理  外部中断模式(irq):用于通用的中断处理。 管理模式(svc):操作系统使用的保护模式。

 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

 系统模式(sys):运行具有特权的操作系统任务。

 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

运行模式可通过软件改变,也可通过外部中断或异常处理改变。用户模式之外的模式称为非用户模式或特权模式。除用户模式和系统模式之外的5种称为异常模式,常用于处理中断和异常、访问受保护的系统资源等情况。

2.5 ARM体系的异常处理

(1)ARM体系中3种控制程序执行流程的方式:  顺序执行  跳转分支指令

 异常中断:处理器暂时中断当前数据流的现象。(2)对异常的响应。ARM处理器执行完当前指令后:  进入与特定的异常相应的操作模式;

 将引起异常指令的下一条指令的地址保存到新模式的R14中;

 将CSPR原值保存到新模式的SPSR中;

 通过设置CSPR的第7位来禁止IRQ。如果为FIQ中断,则还要设置CSPR的第6位来禁止FIQ;

 给PC强制赋向量地址值。(3)中断向量表

指定了异常中断及其处理程序的对应关系,它通常存放在存储地址的低端。

大小为32字节,其中每个异常中断占据4字节空间,用于存放一个跳转指令或者一个向PC寄存器中赋值的指令。

(4)异常优先级:当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断。(5)从异常返回

将连接寄存器LR的值减去相应偏移量后送到PC中; 将SPSR复制回CPSR中;

若在进入异常处理时设置了中断禁止位,则要清除。通过普通指令控制PC返回

软件中断的返回指令 MOVS R15, R14;将链接寄存器内容移入PC并转换模式 IRQ,FIQ和预取异常终止中断的返回指令 SUBS R15, R14, #4 数据终止异常的返回指令 SUBS R15, R14, #8;异常在导致异常的指令的下一条指令后产生

2.6 ARM内部寄存器

(1)寄存器结构

32位ARM有31个32位通用寄存器,6个状态寄存器。通用寄存器可用来保存数据和地址信息,用R为前缀加寄存器序号表示

15个通用寄存器(R0~R14)、一个或两个状态寄存器及程序计数器可在任意时间和处理器模式下被访问,有些处理器模式拥有自身独立的寄存器

(2)通用寄存器

分成三类:

R0~R7:未分组寄存器。每个未分组寄存器在所有的处理器模式下都表示同一个物理寄存器。R8~R14:分组寄存器。每个分组寄存器与一个用户模式的寄存器对应。R15:程序计数器PC。

分组寄存器R8~R14可分为两组:

R8~R12:每个寄存器对应两组不同的物理寄存器,一组是FIQ模式下的,记为R8_fiq~R12_fiq, 另一组是除FIQ模式外的:R8_usr~R12_usr。

R13~R14:分别对应6个不同的物理寄存器。用户模式和系统模式共用一个寄存器,另外5个对应其余5种。

R13 _ R14 _

可以是以下几种模式之一:usr、svc、abt、und、irq和fiq。

R13:被称为堆栈指针SP,但没有任何指令强制性使用R13作为堆栈指针

R14又被称为链接寄存器LR(Link Register)。当调用子程序时,返回地址被自动保存到R14。由于ARM采用了多级流水线技术,所以当正常读取PC值时,该值为当前指令地址值加8,或是加12。

2.7 ARM体系的存储系统

(1)地址空间

将存储器看作是从零地址开始的字节的线性组合 0-3字节:第1个存储的字数据 4-7字节:第1个存储的字数据 依次排列(2)存储器格式 大端格式

小端格式

(3)存储器访问对准

无论取指还是内存访问都以字、半字或字节对准访问 a)非对齐的指令预取操作

ARM状态:将一个非对齐地址写入PC,数据的第0位和第1位被忽略,PC的bit[1:0]为0 Thumb状态:数据的第0位被忽略,PC的bit[0]为0 b)非对齐地址内存的访问操作(LOAD/STORE操作)

执行结果不可预知

忽略字单元地址低两位的值,半字单元最低位的值(分别对应访问字和半字)

在LDR和SWP指令中,对存储器访问忽略造成地址不对齐的低地址位,然后使用这些低地址位控制装载数据的循环 ARM指令系统及程序设计基础

教学目的:使学生对ARM指令系统及程序设计的基础知识有一定的了解。教学重点:ARM指令系统。

教学难点:ARM程序设计的基础知识。教学方法与教学手段:课堂讲授,多媒体教学。教学时间:4课时。教学内容

3.1 ARM寻址方式

(1)寻址方式

处理器根据指令中给出的地址信息寻找物理地址的方式。寻找操作数或操作数地址的方式。

(2)立即寻址

也叫立即数寻址,操作数本身在指令中给出,该操作数被称为立即数。例如: ADD R0, R0, #1;R0R0+1 立即数须以“#”为前缀,对于十六进制表示的立即数,还需在“#”后加上“0x”或“&”。(3)寄存器寻址

操作数存在寄存器中。例如: ADD R0, R1, R2;R0R1+R2(4)寄存器间接寻址

以寄存器的值作为操作数地址。例如: ADD R0, R1, [R2]

;R0  R1+[R2](5)基址变址寻址

a)基址加偏移的寻址方式

将寄存器内容与指令中给出的地址偏移量相加,得到操作数的有效地址。如: LDR R0, [R1, #4];R0  [R1+4]

前变址:基址加变址作为操作数地址。

后变址:基址作为操作数的地址,传送后自动更新基址寄存器的值。

b)基址加索引的寻址方式

将基址寄存器的值与索引寄存器的值相加,形成操作数的有效地址。例如: LDR R0, [R1, R2]

;R0  [R1+R2] c)多寄存器寻址

一条指令可完成多个(最多16个)寄存器值的传送。例如:

LDMIA R0, {R1, R2, R4};R1  [R0] 22

;R2  [R0+4];R4  [R0+8](6)寄存器移位寻址

操作数为寄存器中数做相应的移位而得到 例如:

ARM中的移位或循环移位操作:  LSL:逻辑左移(Logical Shift Left) LSR:逻辑右移(Logical Shift Right)ADD

R0, R1, R2, LSL #3;R0R1+8×R2  ASR:算术右移(Arithmetic Shift Right)。移位过程中保持符号位不变,若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。

 ROR:循环右移(Rotate Right)。从字的最低端移出的位依次填入字的高端空出的位。 RRX:扩展的循环右移(Rotate Right Extended)。操作数向右移一位,左侧空位由状态寄存器C位填充。当移位的类型为RRX时,无需指定移位的位数,其它的则须指定移位的位数。(7)相对寻址

以PC当前值作为基地址,指令中的地址标号作为位移量,两者相加后得到操作数的有效地址。例如:

BL

NEXT

MOV „„

PC, LR

;从子程序返回 NEXT

;跳转至子程序 NEXT „„

(8)堆栈寻址

a)堆栈:按先进后出(FILO)的方式工作,使用堆栈指针(Stack Pointer, SP)指示当前操作位置。b)根据栈指针的指向位置可将堆栈分为

 满堆栈:SP指向最后压入堆栈的数据。 空堆栈:SP指向下个将放入数据空位置

c)根据堆栈的生成方式可将堆栈分为

 递增堆栈(Ascending Stack):堆栈由低地址向高地址生成。

 递减堆栈(Descending Stack):由高地址向低地址生成。d)ARM支持四种类型堆栈工作方式

满递增堆栈:SP指向最后压入的数据,且由低地址向高地址生成。满递减堆栈:SP指向最后压入的数据,且由高地址向低地址生产。

空递增堆栈:SP指向下个将放入数据的空位置,且由低地址向高地址生成。空递减堆栈:SP指向下个将要放入数据的空位置,且由高地址向低地址生成。

3.2 ARM指令集

(1)ARM指令集分类 加载/存储指令

数据处理指令 分支指令

状态寄存器访问指令 异常/中断指令 协处理器指令(2)ARM指令的特点 所有指令都是32bit;

大多数指令都在单周期内完成; 所有指令都可以条件执行; load/store体系结构;

指令集可以通过协处理器扩展。(3)ARM指令的格式

(4)ARM指令的条件执行

所有ARM指令都可包含一个可选的条件码,只有当CPSR中条件标志位满足指定条件时,指令才会被执行。否则以NOP指令通过流水线。

(5)加载/存储指令

Load:将内存中数据装载到寄存器 Store:将寄存器中的数据存入内存 a)单寄存器传输指令

{} {B} Rd, addressing1 {} SB | H | SH Rd, addressing2 {} {B} Rd, LABEL LDR/STR指令:寄存器在前,地址在后 LDM/STM指令:地址在前,寄存器在后

LABEL:相对PC的寻址方式。编译器在汇编时,会将标号LABEL汇编成PC的偏移量存入该指令的立即数字段。

B: Byte;S: Sign;H: Half LDR/STR:读/写一个32bit字到/从一个32位寄存器,要求读/写地址字对齐。LDRB:内存8bit字节32bit寄存器;不要求地址对齐,寄存器高24位清零。STRB:寄存器低8位内存的某个地址;不要求地址对齐。

LDRH:16bit半字 32bit寄存器;要求地址半字对齐,寄存器的高16bit清零。STRH:寄存器低16bit内存;要求地址半字对齐。

LDRSH:有符号16bit半字32bit寄存器中;要求地址半字对齐,寄存器高16bit根据符号位扩展。

LDRSB:有符号8bit字节32bit寄存器中;不要求地址对齐,寄存器高24bit根据符号位扩展。

“数据”一列指的是这条指令所访问的存储单元

“基址寄存器”一列的内容是指执行指令之后“基址寄存器”的内容 b)多寄存器传输指令

{} <寻址模式> Rn{!}, {^} LDM / STM:从由基址寄存器指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据。

!:表示执行完操作后将变化之后的地址值写入基址寄存器

^:对于LDM操作,如恢复的寄存器中含有PC(R15)寄存器,则指令执行的同时CPU自动将SPSR拷贝到CPSR中,例如:

LDMFD {R0-R12, LR, PC}^ 数据的传送发生在User用户模式下的寄存器,而非当前模式寄存器,例如:

LDMDB SP, {R0-LR}^ 例如:

STMIA R0!, {R1-R5};以R0为地址指针,将R1-R5保存到内存,指针向上移动

c)交换指令

SWP {B} {} Rd, Rm, [Rn] SWP:字交换;SWPB:字节交换 Rd  [Rn], [Rn]  Rm 例如:

SWP R1, R2, [R3];R1[R3] ,[R3] R2 SWP R1, R1, [R2];R1与[R2]内容互换(6)数据处理指令

a)数据传送指令

MOV {cond} {S} Rd, Operand 例如: MOV R1, R0 MOVEQ PC, R14

;将R14值传到PC b)数据取反传送指令 MVN {cond} {S} Rd, Operand 例如:

MVN R1, #2;将立即数2取反送至R1 c)算术运算指令

ADD、ADC ADD|ADC {cond} {S} Rd, Oper1, Oper2 例如: ADDS ADCS ADCS ADC R0, R4, R8 R1, R5, R9;加低端的字;带进位加第二字

R2, R6, R10;带进位加第三字 R3, R7, R11;带进位加第四字

可实现 128位加法 SUB:减法指令

SUB {cond} {S} Rd, Oper1, Oper2 SBC:带借位减法指令

SBC {cond} {S} Rd, Oper1, Oper2 例:SBCS R0, R1, R2;R0=R1–R2–C RSB:反向减法指令

RSB {cond} {S} Rd, Oper1, Oper2 操作数2减去操作数1,例如: RSB R0, R1, R2;R0 = R2 – R1 RSC:带借位的逆向减法指令 RSC {cond} {S} Rd, Oper1, Oper2 d)逻辑运算指令 AND:与

AND {cond} {S} Rd, Oper1, Oper2 ORR:或

ORR {cond} {S} Rd, Oper1, Oper2 EOR:异或

EOR {cond} {S} Rd, Oper1, Oper2 e)比较指令 CMP CMP {cond} Operand1, Operand2 CMN:反值比较 CMN {cond} Operand1, Operand2 将第一个数与第二个数的反值进行比较,相当于完成两个数相加。例如: CMN R1, R0;R1+R0,并设置CPSR f)测试指令 TST TST {cond} Operand1, Operand2

把两个操作数按位进行与运算,根据结果更新CPSR。

TEQ TEQ {cond} Operand1, Operand2 把两个操作数按位进行异或运算,根据结果更新CPSR g)乘法指令 MUL MUL {cond} {S} Rd, Oper1, Oper2 RdOperand1×Operand2。例如: MUL

R0, R1, R2 MLA MLA {cond} {S} Rd,Oper1,Oper2,Oper3 RdOperand1×Operand2+Operand3 例如:

MLA R0, R1, R2, R3;R0 = R1×R2+R3;R0 =R1×R2 UMULL:64位无符号数乘法指令 UMULL {cond} {S} Rd_L, Rd_H, Operand1, Operand2 Rd_H:Rd_L Operand1×Operand2 例如: UMULL R0, R1, R2, R3;R0 =(R2×R3)的低32位;R1 =(R2×R3)的高32位 UMLAL: 64位无符号数乘加指令 UMLAL {cond} {S} Rd_L, Rd_H, Operand1, Operand2 Rd_H:Rd_L+= Operand1×Operand2 例如:

UMLAL

R0, R1, R2, R3;R0 =(R2×R3)的低32位+R0;R1 =(R2×R3)的高32位+R1 SMULL:64位有符号数乘法指令 SMULL {cond} {S} Rn_L, Rn_H, Operand1, Operand2 Rd_H:Rd_L Operand1×Operand2 SMLAL: 64位有符号数乘加指令 SMLAL {cond} {S} Rn_L, Rn_H, Operand1, Operand2 Rd_H:Rd_L+= Operand1×Operand2(7)分支指令

a)B(分支指令)和 BL(带链接分支指令)B {cond} LABEL BL {cond} LABEL

允许向前或向后跳转最高32MB。

BL:带返回的分支指令,用于调用一个将其返回地址存入链接寄存器的函数。例如:

SUBPRG BL …… SUBPRG „„;<子程序代码> MOV PC, LR;返回

b)BX(分支并可选地交换指令集)和BLX(带链接分支并可选地交换指令集)BX {cond} Rm BLX {cond} LABEL | Rm Rm:转移地址,bit[0]为0时,目标地址处为ARM指令,否则为Thumb指令。BX 和 BLX是唯一可使用的切换指令集的方法。

BX 和 BLX指令执行与B和BL指令相同的分支操作,并可从ARM指令集切换到THUMB指令集。

c)长跳转

通过向PC寄存器中写目标地址值,可实现在4GB地址空间中进行任意跳转。例如: MOV MOV LR, PC;保存返回地址

R15, #0x00110000;无条件转向0x110000(8)状态寄存器访问指令 a)MRS MRS {} Rd, 将状态寄存器的内容传送到通用寄存器中。例如: MRS b)MSR MSR {} _, Rm MSR {} _,# 表示下列情况之一: c:控制域,即PSR[7:0] PSR[32:24] CPSR|SPSR  通用寄存器。例如: MSR CPSR_F, #&F00000000

R3, CPSR;CPSRR3

x:扩展域,即PSR[15:8] s:状态域,即PSR[23:16] f:标志域,即

;设置所有标志位

(9)异常/中断指令(续)a)SWI SWI {} <24位立即数> 产生SWI异常中断,以实现在用户模式下调用操作系统的监控功能程序。它将处理器置于管理(SVC)模式。例如:

SWI 0x01

;调用编号为01的系统例程

b)BKPT BKPT <16位立即数> 产生软件断点中断,可用于程序调试。例如 BKPT 0xF010(10)协处理器指令 a)CDP CDP {} , , CRd, CRn, CRm {,} 编号为CP#的协处理器接受指令并执行。具体操作由Cop1和Cop2定义,CRn和CRm为源操作数,结果CRd。例如:

CDP P6, 2, C5, C10, C3, 16

;激活协处理器P6的操作,操作码1和操作码2值分别为2和16,目标寄存器为C5,源操作数寄存器为C10和C3 b)MRC和MRC MRC | MCR {} , , CRd, CRn, CRm {,} 在ARM与协处理器寄存器间传送数据。MRC:ARM寄存器协处理器寄存器 MCR:协处理器寄存器ARM寄存器 例如: MCR P3, 3, R0, C4, C5, 6;ARM处理器R0协处理器P3的寄存器C4和C5 c)LDC和STC 在协处理器寄存器与存储器间传送数据 LDC:协处理器寄存器存储器

STC:存储器协处理器寄存器 前变址格式

LDC | STC {} {L} , CRd, [Rn, ]{!} 后变址格式

LDC | STC {} {L} , CRd, Rn, 3.3 Thumb指令集

(1)Thumb指令集的特点

 是ARM指令集压缩形式的子集,所有Thumb指令均有对应的ARM指令。 采用16位二进制编码,代码密度小。

 执行Thumb指令时,先动态解压缩,然后作为标准的ARM指令执行。 如何区分指令流取决于CPSR的位T。 大多Thumb数据处理指令采用2地址格式。 移位操作变成单独指令。

 没有协处理器指令、单寄存器交换指令、乘加指令、64位乘法指令及程序寄存器处理指令。 仅分支指令B有条件执行功能。

(2)Thumb状态切换

a)ARM状态进入Thumb状态 执行带状态切换的转移指令BX。例如: BX R0;若R0最低位为1,则转Thumb状态

异常返回。通常用于返回到进入异常前所执行的指令流,而不是特地用于切换到Thumb模式。适用于异常前执行的是Thumb指令。

b)Thumb 状态进入ARM状态 执行BX指令。

利用异常进入ARM指令流。(3)Thumb指令寄存器的使用  对R0~R7具有全部访问权限。

 R8~R12的访问受到限制,只能通过MOV、ADD和CMP访问。

 在每一种特权模式下都有一组SP、LR和SPSR,分别对应ARM状态的R13、R14和R15。(4)Thumb指令与ARM指令的相似点  Load/Store结构。

 支持8位字节、16位半字和32位字数据类型。 半字以2字节边界对准,字以4字节边界对准。(5)Thumb指令与ARM指令差异点

 跳转指令:条件跳转在范围上有更多的限制,转向子程序只具有无条件转移。

 数据处理指令:对通用寄存器进行操作,操作结果需放入其中一个操作数寄存器。因此,许多Thumb指令采用2地址格式,ARM数据处理指令大多采用3地址格式。 单寄存器加载和存储指令:只能访问R0~R7。

 PUSH和POP指令使用堆栈指针R13作为基址实现满递减堆栈,除R0~R7外,PUSH指令还可存储R14,POP指令可加载程序指令PC。

 大多数Thumb指令是无条件执行的,所有ARM指令都是条件执行的。 由于采用高密度编码,Thumb指令格式没有ARM指令格式规则。(6)Thumb分支指令

a)B 指令——目标为Thumb代码 B <条件码>

B指令是Thumb指令集中唯一可条件执行的指令。PC = PC +(SignExtend(signed_immed_8)<< 1)B

3.4 3.5 35

3.6 嵌入式系统设计与开发过程

(1)嵌入式软件开发的特点 a)需要交叉开发环境

 交叉开发环境:实现编译、链接和调试应用程序代码的环境,它分散在有通信连接的宿主机与目标环境之中。

 宿主机(Host)是一台通用计算机,一般是PC机。

 目标机(Target)可以是嵌入式应用软件的实际运行环境,也可以是能替代实际环境的仿真系统。

 交叉软件开发工具包括:交叉编译器、交叉调试器和模拟软件等。b)引入任务设计方法

 嵌入式应用系统以任务为基本执行单元  用多个并发的任务代替通用软件的多个模块 c)需要固化程序 d)软件开发难度大

 实时性。

 稳定性、可靠性、抗干扰性。(2)软硬件平台的选择 选择处理器需考虑的因素  处理性能  技术指标、功耗

 软件支持工具、是否内置调试工具  供应商是否提供评估板 软件平台的选择

 操作系统。开发工具,与硬件接口难度,内存,是否提供硬件驱动程序,可裁剪性、实时性等

 编程语言。通用性、可移植性、执行效率、可维护性等  集成开发环境

(3)嵌入式系统设计与开发流程  需求分析  体系结构设计

 硬件的设计、制作及测试  软件的设计、实现及测试  系统集成

 系统性能测试及可靠性测试

STM32微控制器

教学目的:使学生对STM32的性能指标、硬件结构有一定的了解。教学重点:STM32的硬件结构。教学难点:STM32的硬件结构。

教学方法与教学手段:课堂讲授,多媒体教学。教学时间:4课时。教学内容

4.1 STM32微控制器的性能指标

(1)STM32F103的主要功能

 ARM Cortex-M3核  最高主频72MHz  512kB Flash、64kB RAM  1个USB、1个CAN、5个USART、3个SPI、2个I2C、2个I2S、1个SDIO、112个GPIO

 3个ADC、2个DAC、8个定时器

 FSMC总线(支持NOR,NAND,SRAM) 12通道DMA控制器

 Serial wire debug(SWD)、JTAG 接口  启动:用户Flash、系统存储器、SRAM(2)JC-STM32CB核心板

 核心芯片:ST STM32F103ZET6  8M NOR Flash:SST39VF6401,16bit  128M NAND Flash:K9F1G08U0C,8bit  8MHz CPU晶振,32768Hz RTC晶振  1个10M/100M以太网接口  1路音频输出和1路音频输入  1个10-pin JTAG调试接口  1个4-pin SWD串行调试接口  Reset按钮、自定义LED,电源LED  1个精密可调电阻连接到片内ADC输入

 使用CPLD扩展IO口及地址译码,型号EPM240T100C5N  板载10/100M网卡控制器,型号DM9000AEP,16bit总线接口

STM32

第三篇:嵌入式系统实验报告

广西工学院鹿山学院

实 验 报 告

课程名称: 嵌入式系统

指导教师: 刘瑞琪 班 级: 自动化101 姓 名: 杨杰 学 号: 20102787 成绩评定: 指导教师签字:

2013年5月25日

实验一

简单的程序

一 实验目的:、动手实践一个简单的字符型设备驱动程序。、学习Linux 驱动程序构架。、学习在应用程序中调用驱动。

二 实验内容:

编写简单的字符型设备驱动程序。编写相应的应用程序。

三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

实验二 CPU GPIO 驱动程序及测试程序

一、实验目的:

编写第一个针对实际硬件的驱动程序,进一步了解驱动程序构架。

二、实验内容:、编写S3C2410 GPIO驱动程序。、编写S3C2410 GPIO应用程序。、在 LINUX系统中插入自己的驱动程序,调用它。实现用 CPU GPIO 控制外部LED,利用S3C2410 核心板上的 LED 验证我们的工作。

三、实验设备、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、复制Experiment_KeyHello_driverapl_test文件下的simple_test_driver.c文件到Experiment_KeyGPIO文件夹下,将文件名更改为test.c。

2、打开test.c,在else语句后更改函数语句如下:

3、复制Experiment_KeyADapl_test文件夹下的Makefile到Experiment_KeyGPIO文件夹下,打开并将中的ADC删除。

4、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

5、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |=(0xf<<5);如下图所示:

6、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

7、打开终端,并编译test.c文件和gpio_led.c文件。

8、重新打开一个终端,并按步骤输入如下语句:

9、依次输入如下语句:

1、cd..2、ls

3、mknod /dev/hello_ctl c 97 1

4、./test

实验三 中断实验及LED显示

一、实验目的:

学习Linux 系统是如何处理中断。

二、实验内容:

编写获取和处理外中断的驱动程序。

三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

2、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |=(0xf<<5);如下图所示:

3、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

4、打开Experiment_KeyInterruptdriver下的Interrupt.c文件,并在其interrupt函数下添加for语句,如下图所示:

5、打开终端,并编译Interrupt.c文件和gpio_led.c文件。

6、重新打开一个终端,并按步骤输入如下语句:

7、依次输入如下语句:

1、cd /mnt/2410RP_linux/Experiment_Key/Interrupt/driver

2、ls

3、insmod Interrupt.o

实验四 数码管显示实验

一、实验目的:

学习串并转换的相关知识,并编写驱动程序。

二、实验内容:

编写针对zlg7289A 的驱动程序。

三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeySpi_leddriver文件夹下的spi_led.c

2、并在spi_ledInit函数下添加如下语句:

保存并关闭。

3、打开终端,并编译spi_led文件。

4、重新打开一个终端,并输入如下语句:

实验五

AD 驱动实验

一 实验目的:、了解模数转换的基本原理;、掌握模数转换的编程方法。

二 实验内容:、编程对模拟量输入进行采集和转换,并将结果显示在超级终端上。、通过改变模拟量输入,观察显示结果。

三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

1、在spi_led..c中的simpled ioctl中加入以下程序

2、在testADC中复制以下程序并修改如下

3、挂载程序

cd /mnt/2410RP_linux/Experiment_Key/spi_led/driver

ls insmod spi_led.o

cd /mnt/2410RP_linux/Experiment_Key/ad/driver

insmod adc.o cd /mnt/2410RP_linux/Experiment_Key/ad/apl_test

ls

mknod /dev/spi c 104 1

ls

./testADC

第四篇:嵌入式系统学习心得

篇一:嵌入式心得体会

这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。

广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和dsp系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成;嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。

理解“嵌入”的概念 主要从三个方面上来理解。

1、从硬件上,将基于cpu的处围器件,整合到cpu芯片内部,比如早期基于x86体系结构下的计算机,cpu只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16c550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到cpu内部,还有pc机有显卡,而多数嵌入式处理器都带有lcd控制器,但其种意义上就相当于显卡。比较高端的arm类intel xscale架构下的ixp网络处理器cpu内部集成pci控制器(可配成支持4个pci从设备或配成自身为cpi从设备);还集成3个npe网络处理器引擎,其中两个对应于两个mac地址,可用于网关交换用,而另外一个npe网络处理器引擎支持dsl,只要外面再加个phy芯片即可以实现dsl上网功能。ixp系列最高主频可以达到1.8g,支持2g内存,1g×10或10g×1的以太网口或febre channel的光通道。ixp系列应该是目标基于arm体系统结构下由intel进行整合后成xscale内核的最高的处理器了。

2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到rom中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如wince在内核定制时,会有相应选择,其中就是wordpad,pdf,mediaplay等等选择,如果我们选择了,在ce启动后,就可以在界面中找到这些东西,如果是以前pc上将的windows操作系统,多半的东西都需要我们得新再装。

3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的rom中就实现了一个真正的“嵌入”。

嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层

1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用c和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成cpld的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、c语言。

2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。

驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。

3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操

作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,xp操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。

4、应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及java方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于sip、h.323、astrisk)方面又较为复杂,并且有难度了。

通过网上查询我发现目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业it人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如arm处理器、嵌入式操作系统等),掌握这些新技术的人当然很少。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。我们软件系的人学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式操作系统方面。对于搞嵌入式软件的人,最重要的技术显然是掌握主流嵌入式微处理器的结构与原理,必须掌握一个嵌入式操作系统,必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。

然而我们都没有做过一个嵌入式软件项目,甚至连嵌入式的开发流程我也不清楚,我只了解了使用简单工具做一个简单的实验。只有去专研才能在嵌入式的领域站住脚,只有知道的比别人多才会更有竞争力。通过网上了解,我查询了嵌入式的入门和所需要的知识,其中c语言尤为重要,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言。其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的;知道了c语言和操作系统之后,再来看看嵌入式系统,我们主要学的是arm,用的是arm7,深入理解arm不是件容易的事,只有在知道arm相关知识之后才能称得上嵌入式已经入门了。与嵌入式有关的知识我也学了不少就是不能够综合在一起运用,组成原理,数据结构,操作系统,c++,这3门与嵌入式密切相关的学科都系统的学了一遍,但由于长时间没用到都有点忘记了,从网上得知嵌入式的学习与这些书有很大关系之后,我把嵌入式与以前学过的知识结合起来发现嵌入式的实验中很多都是共通的,我对嵌入式有了初步的理解。

我以为学习嵌入式应该分为2个部分:软件和硬件。关于硬件方面我接触到了数字电路教材和模拟电路方面的知识,但由于没有嵌入式cpu很难亲自动手来实现嵌入式的相关理论;嵌入式入门则需要不断地实验与分析,我只在实验课时做几个与所给的程序相关的小程序来实现一下;而软件方面则学过c语言,里面通常的语法曾今熟悉过;我通过下列方法来适应c语言在嵌入式中应用:首先重新翻看了下c的教材,看了些常见的语法,接着在编译器的角度来看待c,编译原理我刚学过,其中将高级语言与低级语言的翻译感觉在嵌入式中用到了很多;最后冲硬件的角度来看待c。嵌入式的核心包括嵌入式操作系统,嵌入式软件开发平台及工具以及嵌入式应用软件。这些决定怎样才能开发一个好的嵌入式系统。下面谈谈我了解的嵌入式的相关知识与应用:

首先,嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应

用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式有如下几个突出的有点1.系统内核小,2专用性强,3系统精简4高实时性os5嵌入式系统的应用程序可以没有操作系统直接在芯片上运行,6嵌入式系统需要开发工具和环境。

嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪七十年代单片机(最早的单片机是intel公司的 8048,出现在1976年)的出现到今天各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。经过30年的发展,嵌入式技术已经日趋成熟,在中国嵌入式机一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。

其次,嵌入式系统无疑是当前最热门最有发展前途的it应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。嵌入式系统是软硬结合的学科,通常有两类人会去专研嵌入式:一类是学电子工程、通信工程等偏硬件专业的,另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。我是软件专业的学习嵌入式,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。嵌入式应用在很多方面,具体的可以分为工业控制,交通管理,信息家电,家庭智能管理系统,pos网络及电子商务,环境工程与自然,机器人,机电产品方面应用等方面。其中目前在服务领域,如远程点菜器等已经体现了嵌入式系统的优势。例外还有很多地方用到了嵌入式系统,最近飞利浦和arm共同推出32位risc嵌入式控制器,适用于工业控制,采用最先进的0.18微米cmos嵌入式闪存处理技术,操作电压可以低至1.2伏,它还能降低25%到30%的制造成本,在工业领域中对最终用户而言是一套极具成本效益的解决方案。

那么该如何学好嵌入式我觉得应该从以下几点入手:

首先c语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言,你说不掌握它可以吗?至于如何学习c语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,c语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。

其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。

还有应该学习下linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习mtk、塞班、android等操作系统,android是以后发展的趋势,现在很热门,android也是基于linux系统封装的,所以建议先学习下linux。

还有,应该学习下单片机或者arm或者mips,很多人说我没有单片机的经验,直接学arm可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习arm就更简单了。

最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下uboot的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽

小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。

以上就是我在本学期学习嵌入式后的心得及感想。篇二:嵌入式学习总结

一.为什么学习嵌入式?

1.就业前景

近几年,嵌入式系统产品日臻完善,并在全世界各行业得到广泛应用。嵌入式系统产品的研制和应用已经成为我国信息化带动工业化、工业化促进信息化发展的新的国民经济增长点。

随着消费家电的智能化,嵌入式更显重要。像我们平常见到的手机、pda、电子字典、可视电话、vcd/dvd/mp3player、数字相机(dc)、数字摄像机(dv)、u-disk、机顶盒(set top box)、高清电视(hdtv)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等,都是典型的嵌入式系统。据预测,随着internet的迅速发展和廉价微处理器的出现,嵌入式系统将在日常生活里形成更大的应用领域。

在中国,嵌入式软件发展过程中,政府已充分认识到它的重要作用,并在政策、资金等方面给予了大力支持。2004 年国家发改委、科技部、商务部联合颁布的《当前优先发展的高技术产业化重点领域指南》,把嵌入式软件产业作为国家发展的一个重要领域。

最近几年来,中国的嵌入式软件发展速度一直高于中国软件产业的发展速度和全球嵌入式软件的发展速度,在中国软件产业和全球嵌入式软件产业中所占的比重越来越大。目前,中国嵌入式软件产业在整个软件产业中的比重已经超过了三分之一强。从2006年至2010年,中国嵌入式软件产业规模仍将保持快速增长态势,年均复合增长率为25.8%,到2010年将达到3339.6亿元的规模。

中国嵌入式软件产业的发展面临着良好的发展环境与机遇,这包括政府的重视与扶植、信息产业与传统产业的融合机遇、垄断局面尚未形成、中国制造的良好基础、自由软件运动的兴起等等。

同时,不可否认的是长期以来,由于人才、宣传、资金等诸多问题以及嵌入式本身所特有的软硬结合特性,使嵌入式软件人才一直处于供不应求的状态。

2.自身发展

嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。

一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如bootloader、board support package(像pc的bios一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。

另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写bsp和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责

开发软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有“花头“可做的),所以我们搞软件的人完全不用担心我们在嵌入式市场上的用武之地,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。

二.怎样学习嵌入式?

1.arm嵌入式开发领域

包括什么?

软件开发

操作系统以下的底层偏硬件驱动

在简单操作系统如uc/os-ii之上的程序开发

不包括什么?

硬件设计

类似linux这样操作系统以上的纯应用开发

2.arm基础知识

#1.arm体系结构:

load/store体系,big/little endian大小端格式,risc/cisc指令集,pipeline流水线

#2.arm工作模式: 7种工作模式:usr,sys,svc,irq,fiq,und,abt;其中5种异常模式 #3.arm寄存器:

37个寄存器:r0-r12, r13(sp),r14(lr),r15(pc),cpsr(spsr)#4.arm异常: 7种异常,异常向量表,异常优先级,异常处理程序,处理器现场,现场的保存和恢复

#5.amba总线: ahb(高性能总线),asb(系统总线),apb(外设总线)#6.arm内核技术: trustzone,jazelle,neon,thumb-2,simd,mmu,mpu #7.jtag标准: ieee1149.1,tdi,tdo,tck,tms,trst,边界扫描链,h-jtag,banyan,giveio #8.arm内核分类: arm7tdmi,arm926,strongarm/xscale,arm10,arm11,cortex-(a/r/m),securcore #9.arm汇编指令: mov,add,sub,b,bl,ldr,str,ldmfd,stmfd,mrs,msr,swi,mrc,mcr #10.mmu内存管理单元: va/pa,i-cache/d-cache,write buffer,context switch,cp15,tlb,ap,domain access control,cache coherence #11.arm芯片外设控制器:

memory controller(内存控制器),watchdog(看门狗),gpio(通用io),uart(串口),timer(定时器),interrupt controller(中断控制器),nand flash controller,clock & power management(时钟和电源管理),dma(直接存储访问),usb controller,lcd controller,adc,iic,iis,spi,ac97,camera,mmc/sd #12.最小系统:

处理器,时钟,电源,pll锁相环,存储器,通讯端口,外设接口

存储器件

sram,sdram,nor flash,nand flash #13.arm处理器: samsung: s3c4510,s3c44b0,s3c2410,s3c2440,s3c6410,#14.soc设计: fpga,cpld,vhdl,verilog #15.arm开发调试工具: sdt,ads1.2,axd,realview,keil mdk 4.11(rvmdk4.11)#16.arm命令行工具: armcc,armasm,armlink,fromelf #17.嵌入式操作系统: vxworks,rtlinux,uc/os-ii,wince/wm #18.外设驱动程序: volatile关键字,位操作bit,时序图timing,管脚功能pin function,外设控制/数据/状态寄存器

#19.程序的存储,加载和运行: ro段,rw段,zi段,ro-base/rw-base,栈空间,堆空间,位置无关代码pic,启动搬移代码

3.核心概念

#1.寄存器:

arm内核寄存器

r0-r12 r13(sp)r14(lr)r15(pc)cpsr, spsr arm soc 特殊功能寄存器

sfr(special function register)#2.地址

c程序中变量的“地址” :&a soc 特殊功能寄存器的“地址” :0x48000000 寻址方式里面的“地址” :ldr r0, [r1] 二进制指令里面的“地址” :0xe59ff018 存储芯片内部的“地址” :0x4h 操作系统之上应用程序的“(虚)地址”

cpld器件对应的“(假)地址”

#3.异常和中断

异常是属于arm内核体系结构的概念

中断是属于arm soc处理器的概念

了解软件中断(swi)是实现操作系统提供系统调用的重要手段

了解硬件中断(例如timer定时器)是实现操作系统时间片的重要手段

三.三个问题。

#1.为什么要编写一个bootloader?

从根本上掌握一个嵌入式开发板底层的软硬件系统是怎样运转起来的

时钟频率如何设置;看门狗所起作用,串口如何工作;通讯协议如何实现;库函数;反汇编;函数栈空间。

#2.为什么要移植一个操作系统?

了解操作系统和底层硬件之间的依赖关系,知道哪些是移植相关的部分(即接口)定时器中断(时钟节拍);异常处理和现场保存恢复;进程,进程控制块;处理器现场;进程的上下文切换;中断级别的进程切换。

#3.为什么要实现一个用户应用?

一个音频播放器;dma控制器,interrupt中断控制器;iis 总线;uda1341声卡芯片驱动;wav/mp3 音频文件格式;lcd液晶显示驱动;一个u盘;usb协议;fat文件系统格式;scsi命令集;nandflash存储芯片驱动。

四.经典语段

经典语段一:

嵌入式技术的掌握是需要一个过程的

实事求是的说,嵌入式技术的全面掌握是有相当难度的。可以轻轻松松学会嵌入式技术的说法是夸大其词了。这个就像学英语一样,学英语无论怎样学,不管是“疯狂学”还是用新理念来学,真正掌握的话还是需要一步步积累才能熟练掌握。在此,我建议大家不要想在几天内学会嵌入式,成为这方面的高手。这些想法本身是不太现实的。

现在我们需要做的是:

第一:把心踏实下来,做好打硬仗的准备。

第二:注意学习方法。尽量不要走弯路,争取一鼓作气入门。一旦入门了以后呢就好办了。嵌入式技术的掌握,本身呢就比较难,要是再走些弯路,时间上会浪费,甚至会影响学习的信心。

经典语段二:

最好的学习方法:

做项目。如果有机会大家跟着做一个难度适中的嵌入式项目,相信大家会很快入

门的。也就是说从实战之中来获得进步。但是,在我们没有嵌入式基础之前,不容易获得这样的机会。也就是说,在能力没有到之前,找个这样的工作很难。很显然呢,如果我们具备了获得这样一份工作的能力就好办了。但是,恰恰是这个阶段最难。这个就是搞嵌入式系统的门槛。这个门槛的跨越,我觉得是需要引导的。

比如有的人买了块开发板自学,上来就分析linux源码,结果折腾了几个月呢都没有什么收获。有的人只是掩饰了几个基本的功能,放了个mp3,玩了下如何来浏览网页,下不就不知道该怎么做了。实际上呢,学习一门技术是需要一个过程的,期间也会有一定的规律。我们具体来看。

五.学习心得

#1.嵌入式系统的范围很广,指具有计算能力的非pc系统,即具有通常使用的个人电脑的全部或部分特质的专用计算机系统。如生活中的pda、手机、电视机顶盒、数字电视、数码相机以及工业自动化仪表、医疗仪器等。它分硬件和软件两部分,硬件以嵌入式处理器(相当于pc的cpu)为核心,外扩rom、ram(相当于pc的硬盘、内存条)、输入/输出设备(pc的键盘/显示器)、各种通信接口(串口、usb、网络)等。软件由引导程序(pc的bios)、嵌入式操作系统(相当于pc机的windows xp)和应用程序(相当于在windows xp上运行的程序,如金山词霸、word等)3部分组成,或只有其中的某部分。

#2.目标要明确,不要得过且过,不要追逐热门的东西。不管在什么时候,心里都要有自己的信念和理想,不要被其他东西左右了自己。

#3要从兴趣和竞争出发,因为这才是你产生动力源的地方。学东西时,要让自己先喜欢上它,要学会享受学习它的时间,喜欢乔***的都知道,乔老爷子最常说的一句就是要享受比赛的时间。因为只有你喜欢上了它,享受了它,才不会被它所产生的压力压倒自己,不要产生一种厌恶的心理。而且心态要调整,不要一味的蛮学,死学,在没有什么兴趣学的时候可以先玩几天,在回过头来,或者用其他的方式来转换。

#4要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始,不要为高速开发的一些现象所迷惑,那些都只是软件的功劳。我个人认为搞编程,英语和数学很重要,大家一定要时时的抓,至于怎么抓那就是另外一回事了,当然其他的知识也要汲取,可以多接触点天文,地理,人文方面的东西来补充自己。篇三:学习嵌入式系统感言

个人觉得培训学校都是差不多,所学的内容都是一样的。您不妨自己找几个学校的课程对比下,你就知道大同小异了,培训主要就是c、linux和arm课程。

我原来也想去培训,可是家里条件不允许,我没有那么多钱,后来我只好自学了,不懂的就上论坛问,我自己学了四个月,差不多也入门了,现在也是在做嵌入式开发。想想我自己走过的路,其实我发现,其实嵌入式并没有想象的难,关键是要花时间去学,要坚持几个月就可以了。

如果楼主还有时间,不妨自己学下。实在觉得困难的话再去培训吧。当然,楼主如果家里经济不错的话,也可以去培训吧。但是如果真的下决心要学的话,其实可以去找找自学的方法。

我把我前阶段看到的一篇一个专科生如何自学嵌入式,里面有介绍了他的学习方法和学习过程的文章,给楼主看看,希望对你有帮助。

专科生学嵌入式到找到工作的前前后后--学习的榜样

退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。

一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。

回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。

后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。

我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。

下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。

收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的c语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。c语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的c语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了c和linux的基本操作。

接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了arm的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。

这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,同时我不懂的就问,这里真的很感谢他们的技术客服对我的任何问题都是耐心的解答,每天都我几乎都有好几个问题问他们,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。

最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右

我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。

把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。

在大学生如则的身上,我们看到了一种精神,就是对认准的事情,不管多困难,多曲折,都不放弃,而且要坚定地、执着地做下去。这是在许多成功者身上我们看到的共同的东西。搞发明创造是寂寞的、艰苦的,但当一个人将它视作自己的事业和理想,它就是快乐的、充实的,坚持下去,必将看到成功的果实,世界上的许多事情亦是同理。(完)篇四:学习嵌入式心得

实验报告书

课程名: 《嵌入式系统及应用》 题 目: 学习嵌入式心得

班 级:

姓 名:

学 号:

这学期才接触嵌入式系统学了8周了感觉还称不上入门,我通过了解知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。

广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和dsp系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成;嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。

大体的嵌入式可以用下图来表示:

通过网上查询我发现目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业it人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如arm处理器、嵌入式操作系统等),掌握这些新技术的人当然很少。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。我们软件系的人学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式操作系统方面。对于搞嵌入式软件的人,最重要的技术显然是掌握主流嵌入式微处理器的结构与原理,必须掌握一个嵌入式操作系统,必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。

然而我们都没有做过一个嵌入式软件项目,甚至连嵌入式的开发流程我也不清楚,我只了解了使用简单工具做一个简单的实验。只有去专研才能在嵌入式的领域站住脚,只有知道的比别人多才会更有竞争力。通过网上了解,我查询了嵌入式的入门和所需要的知识,其中c语言尤为重要,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言。其次,应该对操作系统有所

了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的;知道了c语言和操作系统之后,再来看看嵌入式系统,我们主要学的是arm,用的是arm7,深入理解arm不是件容易的事,只有在知道arm相关知识之后才能称得上嵌入式已经入门了。

与嵌入式有关的知识我也学了不少就是不能够综合在一起运用,组成原理,数据结构,操作系统,c++,这3门与嵌入式密切相关的学科都系统的学了一遍,但由于长时间没用到都有点忘记了,从网上得知嵌入式的学习与这些书有很大关系之后,我把嵌入式与以前学过的知识结合起来发现嵌入式的实验中很多都是共通的,我对嵌入式有了初步的理解。我们这学期的嵌入式课本名为《嵌入式系统开发与应用教材》由北京航空航天大学出版社出版,其中讲到了嵌入式系统的开发基础,arm相关技术以及基于arm的嵌入式软件开发基础,还提到了基于s3c44b0x嵌入式系统应用开发实例,这些书上都提到但却不是很全,并没有叫我们怎么去学好嵌入式系统相关开发实例或过程。

我以为学习嵌入式应该分为2个部分:软件和硬件。关于硬件方面我接触到了数字电路教材和模拟电路方面的知识,但由于没有嵌入式cpu很难亲自动手来实现嵌入式的相关理论;嵌入式入门则需要不断地实验与分析,我只在实验课时做几个与所给的程序相关的小程序来实现一下;而软件方面则学过c语言,里面通常的语法曾今熟悉过;我通过下列方法来适应c语言在嵌入式中应用:首先重新翻看了下c的教材,看了些常见的语法,接着在编译器的角度来看待c,编译原理我刚学过,其中将高级语言与低级语言的翻译感觉在嵌入式中用到了很多;最后冲硬件的角度来看待c。嵌入式的核心包括嵌入式操作系统,嵌入式软件开发平台及工具以及嵌入式应用软件。这些决定怎样才能开发一个好的嵌入式系统。

我们上课学的都是怎么样调试嵌入式系统可以通过下面的图来演示:

下面谈谈我了解的嵌入式的相关知识与应用:

首先,嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式有如下几个突出的有点1.系统内核小,2专用性强,3系统精简4高实时性os5嵌入式系统的应用程序可以没有操作系统直接在芯片上运行,6嵌入式系统需要开发工具和环境。

嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪七十年代单片机(最早的单片机是intel公司的 8048,出现在1976年)的出现到今天各式各样的嵌

入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。经过30年的发展,嵌入式技术已经日趋成熟,在中国嵌入式机一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。

其次,嵌入式系统无疑是当前最热门最有发展前途的it应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。嵌入式系统是软硬结合的学科,通常有两类人会去专研嵌入式:一类是学电子工程、通信工程等偏硬件专业的,另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。我是软件专业的学习嵌入式,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。嵌入式应用在很多方面,具体的可以分为工业控制,交通管理,信息家电,家庭智能管理系统,pos网络及电子商务,环境工程与自然,机器人,机电产品方面应用等方面。其中目前在服务领域,如远程点菜器等已经体现了嵌入式系统的优势。例外还有很多地方用到了嵌入式系统,最近飞利浦和arm共同推出32位risc嵌入式控制器,适用于工业控制,采用最先进的0.18微米cmos嵌入式闪存处理技术,操作电压可以低至1.2伏,它还能降低25%到30%的制造成本,在工业领域中对最终用户而言是一套极具成本效益的解决方案。下图为一个真实的嵌入式系统实例,全套采用嵌入式系统制作的污水管理系统: 其实用到嵌入式的地方还有很多,随着计算机的飞速发展嵌入式的价格越来越便宜也将更加普及,嵌入式是一门前途光明的学科。

通过8周的学习学到的并不是很多,要想在这个领域中有所作为还需深入研究,我要走的路还有很多但我会一步一步走下去的。

篇五:学习嵌入式的心得

嵌入式学习[转贴] 怎样做才能快速的嵌入式了? 其实,做工程是没有捷径可走的

先说做硬件: 把你的数字电路教材和模拟电路的教材读熟,暂时先把重点放在数字电路上面,接着把微机原理和接口技术读熟悉了,最好能用汇编写几个简单的程序上机调试一下,这是很重要的。

完成上面的工作大概需要半年,不管你有多么的聪明,除非你以前这个基础就打的不错,否则,还是老老实实花上至少半年的时间!还是那句话,没有捷径可走,如果你相信那些什么“21天学通xx”什么的,那么我告诉你,放弃做工程吧!再说,你这么容易就学会了,别人也能的,你确定能拿到高薪吗?

下一步,就是选择一个dsp(或其它的嵌入式cpu)平台作为你的目标平台,先熟悉它的架构和与外围电路的接口,然后学习她的指令集,也要写一些小程序去跑一下。这个时候,你应该去买一个开发板了,一般的厂家附带会给你一些demo程序,看懂它,理解它,修改它,在你的板子上跑一跑。完成上面两步,说明你已经入了这个行业的门了,下一步,想成为高手的话,就是自己去设计一些项目了,这个阶段所花的时间每个人都是不同的,要看你的造化(主要是前面的基础是否牢固)了。

再说说软件:

在嵌入式行业,你想做软件开发的话,没别的,那就深入理解c语言,尤其是c的指针,如果你以前学过c,但是没有意识到c相比其它的高级语言的优点的话(不是听别人说的,你自己的体会),你可以按下面步骤来理解c:

1、重新翻一遍c的教材,记住一些常用的c语法,但不要死抠语法;

2、从编译器的角度来理解c;

从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一点,至少有两个好处: 第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的coder平均在一个工作日中应该完成200行以上的源码,其编译错误应该控制在5个以下,要知道这200行源码不是一次完成的,所以大多数情况下你都要追求一次编译通过;

第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递归调用和循环内的if语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦!

3、从硬件的角度来理解c。

完成上面3步,你就是c的高手了,接下来应该去看看软件工程方面的书了,这个我还不太懂,不敢妄言。

另外说说教材的选择:学一门东西,选好你的教材,只要一本就可以了。坚决防止这种情况的出现:去图书馆借很多本书,像抢劫似的,而只是每一本都翻翻,就又还给图书馆了的!注意上面我把汇编语言放在硬件学习的板块里面,是由于汇编跟硬件的关系太紧密了,以至于是先学汇编还是先学习硬件电路和cpu架构成了要分清到底是“先有鸡还是先有蛋”的千年哲学难题了。

嵌入式操作系统一览

其实,嵌入式系统并不是一个新生的事物,从八十年代起,国际上就有一些it组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。这其中涌现了一些著名的嵌入式系统: windows ce microsoft windows ce是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200k的rom。

vxworks vxworks是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。它支持多种处理器,如x8

6、i960、sun sparc、motorola mc68xxx、mips rx000、power pc等等。大多数的vxworks api是专有的。采用gnu的编译和调试器。

psos isi公司已经被winriver公司兼并,现在psos属于windriver公司的产品。这个系统是一个模块化、高性能的实时操作系统,专为嵌入式微处理器设计,提供一个完全多任务环境,在定制的或是商业化的硬件上提供高性能和高可靠性。可以让开发者根据操作系统的功能和内存需求定制成每一个应用所需的系统。开发者可以利用它来实现从简单的单个独立设备到复杂的、网络化的多处理器系统。

qnx qnx是一个实时的、可扩充的操作系统,它部分遵循posix相关标准,如:posix.1b实时扩展。它提供了一个很小的微内核以及一些可选的配合进程。其内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它os服务,都实现为协作的用户进程,因此qnx内核非常小巧(qnx4.x大约为12kb)而且运行速度极快。这个灵活的结构可以使用户根据实际的需求,将系统配置成微小的嵌入式操作系统或是包括几百个处理器的超级虚拟机操作系统。

palm os os-9 microwave的os-9是为微处理器的关键实时任务而设计的操作系统,广泛应用于高科技产品中,包括消费电子产品、工业自动化、无线通讯产品、医疗仪器、数字电视/多媒体设备。它提供了很好的安全性和容错性。与其他的嵌入式系统相比,它的灵活性和可升级性非常突出。lynxos lynx real-time systems的lynxos是一个分布式、嵌入式、可规模扩展的实时操作系统,它遵循posix.1a、posix.1b和posix.1c标准。lynxos支持线程概念,提供256个全局用户线程优先级;提供一些传统的、非实时系统的服务特征;包括基于调用需求的虚拟内存,一个基于motif的用户图形界面,与工业标准兼容的网络系统以及应用开发工具。

目前,世面上有很多商业性嵌入式系统都在努力地为自己争取着嵌入式市场的份额。但是,这些专用操作系统均属于商业化产品,价格昂贵;而且,由于它们各自的源代码不公开,使得每个系统上的应用软件与其它系统都无法兼容。并且,由于这种封闭性还导致了商业嵌入式系统在对各种设备的支持

方面存在很大的问题,使得对它们的软件移植变得很困难。在嵌入式这个it产业的新的关键领域,linux操作系统适时地出现在了国家和国内各嵌入式厂商面前,由于linux自身诸多优势,吸引了许多开发商的目光,成为嵌入式操作系统的新宠。它的出现无疑为国家发展嵌入式操作系统事业提供了一个极有吸引力的机会。

前言

这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸!

工作三年、几成废人!

我2000年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入it的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交4000元的违约金,对我来说是天文数字。大学里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的人生背景(悲景更确切),这里不多说了,写十篇也写不完,同时偏离主题。这样我就参加了工作。一张报纸一杯茶的日子,几乎下班后有种很空虚和恐慌的感觉。在工作中虽然是与自己专业有点关系,但是很少。专业几乎荒废。我自己也思考,如果再不出去,自己将会成废人,只好让国家养了。两年后决定出去,但是几成废人,谁要呢,只好到学校去镀金。这是中国教育和社会的悲哀!

至于专业就改为计算机方面,听说好找工作,我说实话不是很对计算机特别感兴趣,生存第一需要。不要笑我,哈哈!

考研成绩出来,超过了国家线几十分。那个方向要两个,我第三,但是那年非碘,不面试就按分数来排,自然我落选了。其实给我面试机会也不一定要我,哈哈,自己几斤几两很清楚。

最后调剂到另外一个学校,交钱,咬咬牙,交吧!现在仍然债台高筑!

进入学校前夕

为什么要把这段列出,看后就知道了。

单位有网络,经常上网查些英语资料,在那里唯独英语没有丢很多。于是我就在网上查资料,学什么好呢,最后确定学嵌入式把,听说跟硬件相对比较紧密!而我在大学里多少学习了数字电路,单片机等,所以多少也有所利用,不会真的一无所知。当然在这之前也自学过数据结构,计算机组成原理等。

c 语言在大学就学了。哈哈这就是我的家底。

我知道自己的基础差,于是我就拿操作系统,数据库、数据结构、c++来看,机关有这个好处,空余时间多,于是平常就看书,很痛苦,没有人请教。

另外就上网到论坛上去,我就到各个专业的技术论坛,其实是电子论坛和嵌入式论坛。我几乎没有发帖,几乎把几个大型的出名的论坛的帖子翻遍了,虽然有很多重复的,我才知道嵌入式是个什么东东。这些帖子对我以后的学习产生了极大的影响。

最关键两点:

1、嵌入式是什么?

2、嵌入式需要哪些知识?

知道了这两点,好办!我就开始规划学习路线。计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统、c++。同时论坛上了解到,实时操作系统ucos是一个很好的嵌入式操作系统,对初学者很好。于是我就买了一本书,但是代码在电脑里调不通,网上也有很多相同的问题,我就看书,分析代码,一遍不行就两遍,三遍,这样才看了入了门,才知道什么是进程。原来看操作系统书时,根本就不知道进程是个什么东西。

在这段时间掌握的东西不多,但是,对我以后的影响很大,我想起了大学时一个同学跟我说过了一句话:大学里最重要的不是学到了什么,最重要的是学会怎么学!大概是这个意思。

进入我的避难所

对我来讲,再次进入大学不再是大学,而是避难所。希望这次进入给我喘气和养精蓄锐的机会和时间。我是这样认为和实践的。

在学校我有三件事:上课,上图书馆,上网。

对于上课,学校开了很多课程,非常好,很多是名人名师讲解,于是很多同学都想学,都去听。我也考虑过,最后放弃。我是这样认为的,时间是有限的,什么都想学,什么都学不成。于是我把我自己学的课进行了分化,一般的课程通过就行,重要的一定好好学。我希望不要什么争论学习课程多和少的问题,这仅仅是我的看法。所以我的成绩应该是很差的。分数低。好在后来的单位没有要我的成绩单,否则就惨了。

我个人感觉是上图书馆的效率比在寝室里高多了,这是我的经验。

有人会问,您下了那么多资料,怎么看的完和消化的了呢?

我是这样对待这个问题的:

1、网上资料比较零散,不系统,但是如果把差不多的东西收集起来看就相对完整了,(嵌入式的图书就是这两年特别多,特别是2004年,简直是向外涌!2003年想买本嵌入式,特别是嵌入式linux的不多。)

2、对于像我这种入门的来说,很多看不懂,没关系,反复看,我个人对学习方法的一个总结是:重复是最好的老师!

3、即使有的用不上,也可以收集以后用的上时查阅。

但是我并非什么都要,目前我的技术路线是嵌入式linux,所以像wince之类基本上不

收集。

总之,我在学校里我充分利用时间来学习,我看到一些同学整天的挂在网上打游戏,发

些无关痛痒的帖子,浪费时间呀!我真的很痛心!

学习嵌入式

在这里我把它单独列出,文章有点紊乱,但是内容希望有益。

1、学习linux 根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。

可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。

看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:

1、自己的基础差,这是最关键的。

2、内核本身很难。

3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。

学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!

在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是如果你懂了这些东西学习更有效率。

关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。

先看《深》,那主要讲原理,好像市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。如果没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。

2、学习嵌入式linux 学习嵌入式,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,特别不是计算机专业的,推荐学习ucos。那是开源的,同时很小。学习很好。为什么选linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些!

至于怎么学习,这是他的特色地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。

如果没有开发板,那是纸上谈兵。有人说,那要1000-2000亚,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖5元/月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿1-2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满意,但是,我发现我很差,特别是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理!

3、学习板和培训 你可以不接受培训,但是不能不买开发板。如果你想学习嵌入式一定要买块学习板,最好买块arm9的,贵些也值。可以跑高级操作系统。这个不要什么品牌公司的,一般不会出什么问题,市场上的板子一般是三星的2410,基本上是抄的。如果是做产品那要注意些。一般的公司一般要2000,加lcd要3000甚至更多。我接触到有的板只要1200,加lcd也就2000,差别比较大,我认为学习都够啦。

对于培训,如果有条件最好参加,主要是嵌入式相对别的不同,自己摸索很费时,如果有高手指点非常的好,进步快。特别是认识做这些的朋友。我接受过培训,认识个朋友。在以后的工作中帮我很多,在这里谢谢他!我记得哈佛的一个mba的学生这样说,大意是:在哈佛学到什么不重要,最重要的是这些未来各大公司的高级管理人员是我的同学!真是有远见!

目前市场是培训比较贵,一个星期两三千,真正算起来也要,那些讲师待遇绝对不会低。但是有个致命的问题是连续上课,一连几天,效果不佳。我希望社会上多出些1000元左右,并且时间长些,如一个月,一周一到两次课。如果没人做,我来做,哈哈!

没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习linux内核和看书的,真的很感动。他的为人我很钦佩。

第五篇:嵌入式系统实验报告

嵌入式系统设计实验报告

班 级:学 号:姓 名:成 绩:指导教师:

20110612 2011061208 李晓虹 武俊鹏、刘书勇

1.实验一

1.1 实验名称

博创UP-3000实验台基本结构使用方法

1.2 实验目的

1.熟悉嵌入式系统开发式流程概述。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。3.熟悉ARM JTAG的安装与使用。

1.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发

环境、仿真器驱动程序、超级终端通讯程序。

1.4 实验内容及要求

1.熟悉嵌入式系统开发式流程概述。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。3.熟悉ARM JTAG的安装与使用。

1.5 实验设计与实验步骤

1.新建超级终端

2.选择ARM 开发实验台串口。

完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置 3.保存为一个特定超级终端到桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。4.启动开发板,按住任意键,使开发板进入BIOS设置状态。

5.在超级终端的界面上,显示BIOS版本信息,以及相应的测试指令。操作时,要在PC机上输入小写的字母快捷键,进入到相应的功能中去。6.按照超级终端上的提示信息,进行功能的测试。

1.6 实验过程与分析

本次实验操作起来并不困难,因为此次实验属于验证型实验,按照实验资料所给的提示信息,以上面的步骤,即可得到实验的结果。进入到BIOS界面后,按照超级终端上的提示信息来进行功能

1.7 实验结果总结

在实验过程中,我们进行的很顺利,没有遇到什么问题,在超级终端界面,按提示的快

捷键来测试对应的功能。如

e:测试由ZLG7289 驱动的LED 显示,共分3 步,请看超级终端提示按任意键继续,同 时观察LED 的变化,最后返回主菜单。

b:引导FLASH 中的应用程序system.bin。执行该功能将退出BIOS 状态,把控制交给应 用程序,等。

1.8 心得体会

通过此次实验,我对于实验环境有了初步的了解与认识,对于嵌入式也有了更深一步的认识。同时实验过程中,我学会了第一次接触的超级终端的使用方法,并能够熟练掌握,知道其工作的原理。

2.实验二

2.1 实验名称

ADS1.2软件开发环境使用方法

2.2 实验目的

1.熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。

2.使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。

2.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发

环境、仿真器驱动程序、超级终端通讯程序。

2.4 实验内容及要求

掌握AXD Debugger的使用方法,学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机之间的串行通讯:ARM 监视串行口;将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的);即按PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。

2.5 实验设计与实验步骤

(1)新建工程,选择菜单中的Project | Add Files 把和工程相关的所有文件包括init和startup 子目录加入到工程中。ADS1.2 不能自动按文件类别对这些文件进行分类,需要的话可以执行菜单Project | Create Group 创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。(另一种办法是,在新建工程时ADS 创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。选中所有目录拖动到任务栏上的ADS 任务条上,不要松

开鼠标当ADS 窗口恢复后再拖动到工程文件窗口,松开鼠标。这样ADS 将以子目录名建立同名文件组并以此对文件分类。)

(2)双击Main.c 打开该文件,可以看到Main()函数的内容如下所示。int main(void){ ARMTargetInit();//开发版初始化 LCD_Init();LCD_ChangeMode(DspTxtMode);//转换LCD 显示模式为文本显示模式 LCD_Cls();//文本模式下清屏命令

LCD_printf(“Hello world!n”);//向液晶屏输出 Uart_Printf(“nHello world!n”);//向串口输出 while(1);}(3)利用上个实验中的通讯软件超级终端来将生成的文件放到嵌入式开发平台中。(4)重启实验台即可看到LCD上显示的“Hello world!” 2.6 实验过程与分析

新建工程,然后将所需的工程文件加载打工程目录下,编译生成system.bin文件,将文件导入到实验台中,然后重启实验台,即可得到实验结果。

2.7 实验结果总结

超级终端输出一些相对应的代码的执行结果。熟悉了ADS1.2 开发环境以及学会了ARM 仿真器的基本使用。使用ADS 编译、下载、调试并跟踪一段已有的程序,并大致了解了嵌入式开发的基本思想和过程。

2.8 心得体会

通过此次实验,我对于嵌入式开发的基本思想有了一定的了解,嵌入式开发采用的是交叉编译环境,所以在一些方面会有所限制。对于初学者来说,通过一两次实验结果的演示就能够对实验台有深入的了解不可能的,所以在后续的实验中,我要好好努力,认真做好课程实验为后续的课程设计实验打下基础。

3.实验三

3.1 实验名称

键盘及LED实验

3.2 实验目的

1.学习键盘及LED 驱动原理。

2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。

3.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开

环境、仿真器驱动程序、超级终端通讯程序。

3.4 实验内容及要求

编写出一段程序,要求能在LED上显示出小键盘上按下的4位数字。

3.5 实验设计与实验步骤

1.新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。2.定义ZLG7289 寄存器(ZLG7289.h)。3.编写ZLG7289 驱动函数(ZLG7289.c)。4.定义键盘映射表:(Keyboard16.c)。5.定义键值读取函数。

6.编写主函数,将按键值在数码管上显示。

3.6 实验过程与分析

此次实验中,我们根据已有实验,进行调试,查看程序的运行效果。根据效果,我们又回到实验代码中,然后对代码进行深入的研究,查看每部分功能所对应的代码,通过不断的调试编译,我们最终对该实验用到的代码有了更深的认识。从而能够按照要求,完成我们自己实验。

3.7 实验结果总结

通过小键盘的按键,键值可以在LED上显示出来。并学习了键盘及LED 驱动原理以及掌握了ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。

3.8 心得体会

在这次实验中让我对嵌入式的实验箱有了进一步的认识,并且进一步了解的ARM实验的原理和实验情况,能够对源代码进行正确了理解。并且能修改这些源代码能够使其工作在自己的预期的工作状态和输出自己想要的结果

4.实验四

4.1 实验名称

电机转动控制及中断实验

4.2 实验目的

1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。

2.编程实现ARM系统的PWM输出和I/O输出,前者用于控制直流电机,后者用于控制步进电机。

3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。

4.了解44B0处理器上中断的应用。

5.学习在44B0处理器上中断的应用。

6.进一步熟悉平台外围硬件及其驱动程序的编写。

4.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

4.4 实验内容及要求

1.编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其转动方式。

2.编程实现ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。

3.通过键盘控制直流电机与步进电机的切换。4.设置并启动定时器。

5.设置中断,编写定时器中断服务程序,对中断次数进行计数并在LED上显示结果。

4.5 实验设计与实验步骤

1.添加并打开工程。

2.进行直流电机初始化设置和代码编写。3.进行步进电机初始化设置和代码编写。

4.对Timer3编程,编写定时器中断服务程序,完成对中断次数的计数。5.编写LED计数显示函数,使LED能正确计数并显示0-9999。6.编写中断初始化函数和中断响应函数。7.终端下载测试。

4.6 实验过程与分析

1.对直流电机进行编程和测试,掌握转速和旋转方向的设定方法。2.对步进电机进行编程和测试,掌握ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。

3.对主函数进行编程,用键盘响应直流电机与步进电机的切换控制。

4.掌握中断相关语句的应用,弄清定义的中断向量、中断向量号,编写中断响应函数,并完成中断响应控制。

4.7 实验结果总结

实现了直流电机与步进电机的基本设置和控制,可以通过键盘控制电机之间的切换。完成了中断的响应和定时中断。

在通过本次实验,我初步了解的实验的目的所在,并且利用所给的源代码能够,调试出所预期的结果,而且能够根据已给的源代码修改得到所需的结果。

4.8 心得体会

通过本次实验,掌握了电机工作原理,了解了中断的意义和实现方法,实现了简单了中

断处理程序,更加了解了中断的意义。

5.实验五

5.1 实验名称

LCD驱动控制实验及触摸屏驱动实验

5.2 实验目的

1.了解触摸屏的基本概念与原理。

2.理解触摸屏与LCD的关系。3.编程实现对触摸屏的控制。

5.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

5.4 实验内容及要求

1.了解触摸屏基本原理,理解对触摸屏进行输出标定、与LCD显示器配合的过程。2.通过编程实现触摸两点自动在两点间划直线。3.通过编程实现在触摸屏上动态画出曲线。

5.5 实验设计与实验步骤

1.添加并打开工程。

2.在头文件中定义宏和常量及驱动函数。3.校准触摸屏坐标,进行坐标转换。4.实现触屏取点并显示功能。5.实现两点间自动划线功能。6.实现触摸屏动态划线功能。

5.6 实验过程与分析

1.在定义触屏响应功能的函数中对点击触屏进行响应函数的修改,在其中添加修改点颜色的函数,修改得到的触摸点的颜色,并显示在LCD上。

2.获取第一个点坐标并储存,获取第二个点坐标并储存,编写划线函数,取得两点间直线上所有点的坐标,并对其改变颜色,显示在LCD上,即完成划直线功能。

3.将划线函数应用到响应触屏移动消息的函数下,即可对连续获得的触摸坐标进行连续的画短直线,连接成曲线,完成动态划线功能。

5.7 实验结果总结

了解了触摸屏响应动作消息的函数的工作原理,通过修改实现了触摸屏响应不同动作进行画点、划线、动态划线的功能。

5.8 心得体会

通过本次实验,使我了解了怎么在一块嵌入式实验箱 通过编程控制实验箱上得硬件,比如在本次实验中的控制LCD屏幕就是,在屏幕上点击,然后得到在LCD屏上点击的位置。本次实验初步完成了实验结果。

6.实验六

6.1 实验名称

UCOS-Ⅱ在ARM微处理器上的裁剪

6.2 实验目的

1.了解UCOS-Ⅱ内核的主要结构。

2.掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法。3.学习如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。

4.通过对UCOS-Ⅱ配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对UCOS-Ⅱ的裁剪。

6.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

6.4 实验内容及要求

对UCOS-Ⅱ内核进行裁剪并移植到ARM7微处理器上。

6.5 实验设计与实验步骤

编辑OS_CFG.H文件。OS_CFG.H文件中的内容可分为两大类:服务功能的配置和数据结构的配置。

一.服务功能的配置:

根据程序中的实际情况,保留自己要用的系统服务功能,删除自己不需要的服务功能。进行合理配置后,是我们自己系统的目标代码比较紧凑,从而降低了对程序代码存储空间的要求。如果代码存储空间足够大的话,那就将全部系统服务功能全部配置为1。不需要考虑功能裁剪。

二.数据结构功能的配置: 与任务有关的数据结构 1.OS_MAX_TASKS 作用:设置用户程序中可以使用的最多任务数。说明:该值不能超过62.举例: 若程序中用到了三个任务,则该值的最小值 2.OS_LOWEST_PRIO 作用:设置程序中最低任务的优先级。

说明: 设定该值可以节省操作系统使用RAM的空间。任务的最低优先级和最大任务数是没有直接关系的。

6.6 实验过程与分析

按照实验指导书上的步骤进行,得到了要求的系统。

6.7 实验结果总结

按照要求进行了裁剪,得到了满足需要又紧凑的应用软件系统。

6.8 心得体会

了解了UCOS-Ⅱ内核的主要结构,掌握了UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法,学会了如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪

7.实验七

7.1 实验名称

ucos-II移植实验

7.2 实验目的

1.了解UCOS-Ⅱ内核的主要结构。

2.掌握将UCOS-Ⅱ内核移植到ARM7处理器上的基本方法。

7.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

7.4 实验内容及要求

1.将UCOS-Ⅱ内核进行移植到ARM7微处理器上。

2.编写两个简单任务,在超级终端上观察两个任务的切换。

7.5 实验设计与实验步骤

1.该实验的文件分为两类,其一是STARTUP 目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的。

2.设置os_cpu.h 中与处理器和编译器相关的代码

3.用C 语言编写6 个操作系统相关的函数(OS_CPU_C.C)4.用汇编语言编写4 个与处理器相关的函数(OS_CPU.ASM)5.编写一个简单的多任务程序来测试一下移植是否成功。

为了使 uCOS-II 可以正常运行,除了上述必须的移植工作外,硬件初始化和配置文件也是必须的。STARTUP 目录下的文件还包括中断处理,时钟,串口通信等基本功能函数。在文件 main.c 中给出了应用程序的基本框架,包括初始化和多任务的创建,启动等。任务

创建方法如下:

①在程序开头定义任务堆栈,任务函数声明和任务优先级 ②在main()函数中调用OSStart()函数之前用下列语句创建任务 ③编写任务函数内容

6.编译并下载移植后的uCOS-II 所有的源代码都准备好后就可以进行编译了。在ADS 环境下需要设置工程的访问路径。从菜单Edit | Debug Settings 进入设置对话框,在Target | Access Paths 中选择User Paths 并选上Always search user paths。然后点Add 按钮添加路径ucos-ii 和arch。这主要是设置编译器处理文件包含时的搜索范围。按照实验一的方法可以对编译后的代码进行调试或下载到平台的电子硬盘中。这个实验从结构上看和其他的实验没有多大区别,同样生成可执行文件system.bin。可以在平台BIOS中激活电子硬盘,然后把system.bin 拷贝进去,重启平台,然后在超级终端上观察结果。

7.6 实验过程与分析

操作系统相关的函数:(1)OSTaskStkInit OSTaskCreate()和OSTaskCreateExt()通过调用OSTaskStkInit()来初始化任务的堆栈结构。因此,堆栈看起来就像刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。图12A-2 显示了OSTaskStkInt()放到正被建立的任务堆栈中的东西。这里我们定义了堆栈是从上往下 长的。在用户建立任务的时候,用户传递任务的地址,pdata 指针,任务的堆栈栈顶和任务的优先级给OSTaskCreate()和OSTaskCreateExt()。一旦用户初始化了堆栈,OSTaskStkInit()就需要返回堆栈指针所指的地址。OSTaskCreate()和OSTaskCreateExt()会获得该地址并将它保存到任务控制块(OS_TCB)中。

(2)OSTaskCreateHook 当用OSTaskCreate()和OSTaskCreateExt()建立任务的时候就会调用OSTaskCreateHook()。该函数允许用户或使用移植实例的用户扩展uCOS-II 功能。当uCOS-II 设置完了自己的内部结构后,会在调用任务调度程序之前调用OSTaskCreateHook()。该函数被调用的时候中断是禁止的。因此用户应尽量减少该函数中的代码以缩短中断的响应时间。当 OSTaskCreateHook()被调用的时候,它会收到指向已建立任务的OS_TCB 的指针,这 样它就可以访问所有的结构成员了。函数原型:void OSTaskCreateHook(OS_TCB *ptcb)

(3)OSTaskDelHook 当任务被删除的时候就会调用OSTaskDelHook()。该函数在把任务从uCOS-II 的内部任 务链表中解开之前被调用。当OSTaskDelHook()被调用的时候,它会收到指向正被删除任务 的OS_TCB 的指针,这样它就可以访问所有的结构成员了。OSTaskDelHook()可以来检验TCB扩展是否被建立(一个非空指针)并进行一些清除操作。函数原型:void OSTaskDelHook(OS_TCB *ptcb)(4)OSTaskSwHook 当发生任务切换的时候就会调用OSTaskSwHook()。OSTaskSwHook()可以直接访问 OSTCBCur 和OSTCBHighRdy,因为它们是全局变量。OSTCBCur 指向被切换出去的任务 OS_TCB,而OSTCBHighRdy 指向新任务OS_TCB。注意在调用OSTaskSwHook()期间中断 一直是被禁止的。因此用户应尽量减少该函数中的代码以缩短中断的响应时间。函数原型:void OSTaskSwHook(void)

(5)OSTaskStatHook OSTaskStatHook()每秒钟都会被OSTaskStat()调用一次。用户可以用OSTaskStatHook()

来扩展统计功能。例如,用户可以保持并显示每个任务的执行时间,每个任务所用的CPU 份额,以及每个任务执行的频率等。函数原型:void OSTaskStatHook(void)(6)OSTimeTickHook OSTimeTickHook()在每个时钟节拍都会被OSTaskTick()调用。实际上OSTimeTickHook()是在节拍被uCOS-II 真正处理,并通知用户的移植实例或应用程序之前被调用的。函数原型:void OSTimeTickHook(void)

7.7 实验结果总结

在超级终端上输出轮流交替run task1和run task2,表明系统正在不断交替运行2个任务。

7.8 心得体会

在这个实验中我们初步了解和测试了实验的内容和源代码实验结果基本上符合预期的要求。了解了µC/OS-II 内核的主要结构和ARM7处理器结构,掌握了将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。

8.实验八

8.1 实验名称

各接口模块相互衔接综合实验

8.2 实验目的

利用前7次实验所学的知识,综合设计一个至少含有5个模块的实验。

8.3 实验环境

硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。

软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。

8.4 实验内容及要求

1.回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制接口模块驱动设计及开发方法。

2.综合应用以上全部或者部分模块,实现一个嵌入式综合应用系统,要求至少5个模块。

3.尽量使综合应用具有合理功能。

8.5 实验设计与实验步骤

1.新建工程,添加所需的文件。

2.编写计算器的计算程序caculator.c以及caculator.h文件。3.编写音乐播放文件play.c以及play.h文件。

4.修改键盘映射表让键盘上的数字与LCD与LED屏幕上显示的数字相对应。5.对输出在LCD屏幕上的显示结构进行设计

6.进行裁剪和移植功能设计和完成。编译生成system.bin文件,将文件拷贝至实验台内,重启实验台即可看到实验效果

8.6 实验过程与分析

1.完成10以内的加减乘除的计算功能,通过键盘输入,可在LCD屏幕上显示输入的表达式以及得到的输出结果。如“2+3=5”。

2.按任务切换键,实现任务的切换。3.任务被切换到播放音乐的任务中去。

4.任务切换过程将会在串口的超级终端界面有所显示,同时我们设置的将LCD上显示的结果同步到超级终端上。实现串口通信。

5.利用到了直流电机,如果运算范围超出我们规定的运算范围,则电机转动,来提示错误。

6.实现裁剪与移植功能。

8.7 实验结果总结

在这次实验中,我们利用前面所学习的知识,综合利用在此次实验中,我们利用了前面好所学知识中的6个模块,分别是串口通讯,键盘控制,LED与LCD的输出,电机控制,以及裁剪与移植的功能。通过这些功能的结合,我们实现自己所设计的实验的功能。

8.8 心得体会

在此次实验中,我们遇到了一些问题但是过程中遇到了不少问题,说明对实验原理和语句编写还不是很熟悉。总的来说,通过这段时间的训练,我也学会了不少东西,了解了ARM的基本结构,功能等。

9.实验总结与心得体会

通过这次为期一周的嵌入式课程实验,我对于嵌入式有了更加深刻的了解与认识。我是第一次接触嵌入式,以前对于嵌入式的知识了解甚少,但是通过此次实验,我不仅了解了嵌入式,也学会了许多关于嵌入式方面的知识。

通过前面的基础实验,我们对于ARM环境有了更深的了解,掌握了博创平台的使用方法,例如如何使用小键盘,如何使用LCD、LED屏幕,如何控制终端,如何进行多任务之间的切换等等。通过这几次的基础课程实验,我们最后出了计算器,能够实现10以内的加减乘除,在此基础上我们利用多任务,实现播放音乐与计算的切换,还利用点击的转动来提示运算过程中出现的问题。

通过这几次实验,为我们以后的课程设计实验打下了坚实的基础,相信有了这几天系统实验的培训,我们的课程设计实验做起来会更加轻松。

下载嵌入式系统教案(李震)word格式文档
下载嵌入式系统教案(李震).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    嵌入式系统课程设计

    《嵌入式系统概论》综合设计报告书 设计题目:用键盘控制LED显示不同图形 中央民族大学 二零零八年十月三十一日 一、 设计目的 了解LED点阵和矩阵键盘的工作原理。 二、 设计......

    嵌入式系统实验

    南京信息工程大学 实验(实习)报告 实验(实习)名称电机转动控制及中断实验 实验(实习)日期2016.5 得分 指导教师 谢胜东学院 计算机与软件 专业 计算机科学与技术 年级2013......

    嵌入式系统实验报告

    嵌入式系统设计实验报告 班 级: 学 号: 姓 名: 成 绩: 指导教师: 1. 实验一 1.1 实验名称 博创UP-3000实验台基本结构及使用方法 1.2 实验目的 1.学习嵌入式系统开发流程。 2.熟悉U......

    嵌入式系统发展趋势

    未来嵌入式系统的发展趋势 在网络、通信、微电子发展的基础上,以及势不可挡的数字化信息产品的强大需求推动下,嵌入式技术具有广阔的发展创新空间。 (1)低功耗、高性能、高可......

    嵌入式系统调查报告

    “嵌入式系统在企业中的应用”调查报告 工学院范裕婷内容提要:现今,全过程自动化产品制造、大范围电子商务活动、高度协同科学实验以及现代化家庭起居,是嵌入式系统在企业中应......

    嵌入式系统实验报告

    嵌入式系统实验报告 学号: 姓 名: 班 级:13电子信息工程指导老师: 苏州大学 电子信息学院 2016年12月 实验一:一个灯的闪烁 1、实验要求 实现PF6-10端口所连接的任意一个LED灯......

    嵌入式系统教学大纲

    《嵌入式系统》课程教学大纲 课程名称: 嵌入式系统 课程编码:51610209 学时: 44 学分:2.5 开课学期:7 课程类别:专业平台课程 课程性质:必修 适用专业:电子信息科学与技术 电子信息......

    李晓林(2009061121)嵌入式系统实验报告5篇

    嵌入式系统设计实验报告 班 级:学 号:姓 名:成 绩:指导教师: 090611 2009061121 李晓林 武俊鹏 刘书勇 1 1. 实验一 1.1 实验名称 博创UP-3000实验台基本结构及使用方法 1.......