嵌入式系统教案

关键词: 原文

嵌入式系统教案(精选6篇)

篇1:嵌入式系统教案

嵌入式系统教案

教材:《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将本节课的关键内容归类。

篇2:嵌入式系统教案

大多数的Linux系统运行于PC平台,但是,Linux也可在嵌入式系统中可靠的工作。此篇论文讲述了嵌入式系统的概况,以及论证了有关Linux应用于商业嵌入式系统的问题。

嵌入式系统 ---- 比摩西还老

那些用以控制设备的计算机,或叫嵌入式系统,差不多同计算机本身一样早地出现在我们的周围。

在通信领域中,这些嵌入式系统早在20世纪60年代后期就被用来控制电话的电子式机械交换并被称为“存储程控控制“系统“计算机”一词在那时尚不常见;所谓的存储程序是指那些放有程序和路由信息的内存。存储这些控制逻辑而不是用硬件来实现是在观念上的一种真正突破,现今,我们早认为这种工作机理是理所当然的了。

为适应每一个应用,这些计算机是被定做出来的(简言之,这些计算机是面向应用的).按今天的标准来看,他们有着奇怪的专用指令以及与主要计算引擎集成在一起的I/O设备,就像一批突变异种者.

微处理器通过提供一个小巧低价的并可以在大系统中像搭积木那样使用的CPU引擎改变了这一情况;它利用一基于被一条总线挂接在一起的不同外设所构建的严格的硬件体系结构并提供一个可以简化编程的通用目的编程模型.

同硬件一起,软件也得到了发展.最初,只有一些简单的开发工具可供用以创建和调试软件.各工程项目的运行软件通常以信手涂鸦的方式编出来.由于编译器经常有很多错误而且也缺乏象样的调试器,这些软件差不多总是用汇编语言或宏语言来写.采用软件构建块和标准库的编程思想直到20世纪70年代中期才流行起来.

用于嵌入式系统的与“搁架”无关的操作系统(OS)在20世纪70年代后期开始出现.它们中的许多是用汇编语言写就的并且仅能用于为其编写的微处理器上.当这些微处理器变得过时的时候,它们使用的OS也厄运同临.只能在新的处理器上从新写一遍才能运行.今天,许多这种早期的系统只不过成了人们模糊的记忆,还有人能记起MTOS吗?当C语言出现后,OS可以用一种高效的,稳定的和可移植的方式来编写.这种方式对使用和经营有直接的吸引力,因为它承载着人们当微处理器废弃不用时能保护他们的软件投资的希望.听起来,有点儿像商业市场营销中的一段传奇故事.用C来编写OS已经成了一种标准直至今天.总之,软件的可复用性已经为人接受而且正在很好地发挥作用.

在20世纪80年代早期,我特别喜爱的OS是Wendon操作系统;大概只要150美金,就可以获得它的C源代码库.它是一个开发套件,人们可以通过选择一些组件来构建自己的OS---整个过程就像是从中餐菜单里订餐一样.比如,可以从库中的多个可行选项列表中精选出一种任务调度算法和内存管理方案.

许多用于嵌入式系统的的商业操作系统在20世纪80年代获得了蓬勃发展.(Wendon)这一原始的炖菜已经发展成为了商业操作系统这一现代炖肉.今天已经有几打的商业性操作系统可供选择.出现了许多互相竞争的产品,如VxWorks,pSOS,Neculeus和WindowsCE.

许多嵌入式系统根本就没有操作系统,只不过有一个控制环而已.对很简单的嵌入式系统来说,这可能已经足够.不过,随着嵌入式系统在复杂性上的增长,一个操作系统显得重要起来,因为否则的话,将使(控制)软件复杂度变得极不合理.可悲的是,现实中确实有一些复杂得另人生畏的嵌入式系统,而且它们之所以变得复杂就因为它们的设计者坚持认为它们的系统不需要操作系统.

渐渐地,更多的嵌入式系统需要被连接到某些网络上,因而,需要在嵌入式系统中有网络协议栈(支持);甚至很多宾馆中的门把手都有一个连接到网络的微处理器.

把网络栈添加到一个仅用控制环来实现的简单嵌入式系统所带来的复杂程度可能足以唤起人们对一个操作系统的渴望.

除了各种商业性操作系统以外,还有多种私拥操作系统.其中,有很多是涂鸦式写就的,像Cisco公司的IOS等.有些则源于对别的操作系统的改写,像很多网络产品都衍生于同一版本的伯克利UNIX操作系统,因为后者有完整的网络支持能力;而还有一些则基于公共域OS,比如KA9Q就来源于PhilKarn.

作为侯选的嵌入式操作系统,LINUX有一些引人的优势:它可以移植到多个有不同结构的CPU和硬件平台上,很好的稳定性,各种性能的升级能力,而且开发更容易.。

开发工具--打破了传统仿真器的阻碍

在开发嵌入式系统中极为关键的一项是有各种可用的工具.就像任何一个行当一样,好的工具有助于快捷而圆满地完成任务;在嵌入式系统开发的不同阶段,可能要用到不同的工具.

传统上,开发嵌入式系统的首选工具是仿真器。这是一块比较昂贵的设备,一般插于微处理器和它的总线之间的电路中,从而让开发者监视和控制所有输入和输出 微处理器的各种活动和行为.在装配起来,可能有一些困难,并且由于它们的侵入性,装上后可能造成不稳定 的性能;尽管这样,它们却能在总线级上给出一个系统正在发生什么的清晰的描绘并排除了很多在硬件和软件 接口最底层上的猜测工作.

在以往,一些工程项目依赖它--经常在开发周期中的各个阶段--作为主要的调试工具.不过,一旦当编制的软件 有能力支持一个串型口的时候,大量的调试可以不用ICE而使用别的方法来完成.同样,大部分新一代的嵌入式系统 采用蛮像食谱式的微处理器设计;通信工作的启动代码常常是具备的以使串型口尽快地工作,这意味着开发者能 在没有ICE的情况下也能很好地进展;去掉了ICE,从而降低了开发成本.一旦串型口可以工作起来,便能用于支持那 些日渐复杂的开发工具的相关(软件)层

LINUX基于GNU C 编译器;后者作为GNU工具集的一组成部分,和源码级调试器gdb一起工作,提供了在开发一个嵌入式 LINUX系统中要用到的所有软件工具.下面是在为一个新的硬件开发一个新的嵌入式LINUX系统时要用到的典型调试 工具的序列和步骤:

1:写出或移植一段启动代码(后面再详细讨论);

2:写一段代码在串型口上输出一字符串,像“Hello,World!”(其实,我更喜欢人类发明电话后,通过电话说的第一句话“Watson, come here I need you”);

3:移植gdb目标码使之能在串型口上工作.这将允许向另一台正运行着gdb程序的LINUX主机会话;你只不过要告诉 gdb是通过串型口调试该目标程序;gdb通过串型口与你的测试计算机上的gdb目标码会话并给出全部C源码级的 调试信息.你也可以利用这一(通信)能力把附加的代码下载到RAM或闪存中.

4:借助gdb,执行余下的直到LINUX内核开始接管之前的所有硬件和软件的初始化代码.

5: 一旦LINUX内核启动后,上述的串型口就成为LINUX的控制台端口并可以利用它的便利来进行后继开发过程.再使用gdb的内核调试版本kgdb.这一步常常不是必需的.如果你有一个网络连接,比如,10BaseT,你或许会想让它紧接着工作起来.

6: 如果你的目标平台运行的Linux kernel是全功能的(即:未经删减过功能),你可以利用gdb或其图形化替代品如xgdb去调试你的应用进程.

实时--真是这样吗?

轻率,大部分的系统并不是如此。嵌入式系统经常被错误地说做实时系统,但是它们中的大多数并不具备实时特性。实时性仅仅是相对的。实时严谨地定义应为硬实时:能在极短的时间(毫秒级)内响应,并以某种确定的方式处理事件。现在,许多硬实时功能正逐渐集中在DSP或ASIC的设计中,通过一些适当的硬件,如FIFO,DMA或其它专用硬件来实现。

对大多数系统来说,有1到5毫秒的实时响应时间应足够了。当然,另一种宽松的要求也是可以接受的,例如:

Windows 98的处理监视器崩溃画面的中断,要求必须在4微秒之内处理的,占所有情况的98%;而在20微秒之内处理的,占各情况的100%.

这些宽松的实时要求可以很容易达到.实现它们过程中涉及到一些探讨,包括现场切换,中断延迟,任务选优和调度.

现场切换曾一度成为操作系统界的一个热点话题,不过,由于大多数CPU在这点上处理得比较令人满意而且CPU速度现在已经变得足够的快,现场切换现已不再是主要关注点了.

实时的严格性要求通常应由一个中断例程或内核中的现场驱动函数来处理以确保行为的一致性.当中断发生后,处理该中断所用的时间,即中断延迟,在很大程度上,由中断优先级与其它能临时屏蔽该中断的软件决定.

(实时系统中的)中断必须应被高效地设计和安排以确保满足时间上的要求,就像在其它OS中那样.在Intel X86处理器系列中,这项工作可以能被扩充了实时性的Linux很好地处理.(实时Linux,即:RTLinux,参看www.rtlinux.org/).从本质上说,它提供了一个把Linux作为其后台任务而运行的中断处理调度器.(This essentially provides an interrupt processing scheduler that runs Linux as its background task)一些关键(临界)中断可以不为Linux其他部分所知地得到服务(处理),因而,你就有了对临界时间的控制权.这种做法提供了实时级别和时间限制性较为宽松的基本Linux级别之间的界面.并提供了一个与别的嵌入式操作系统类似的实时处理框架.从根本上讲,为满足实时性要求,采用了把实时性的关键(临界)代码段隔离开来并进行高效的安排,然后对该段代码的处理结果再以更一般的方式(或许在进程级别上)来做进一步处理.

嵌入式系统--定义

一种观点认为: 如果某种应用没有用户界面,从而,用户不能直接地和它交互,那么它就是嵌入式系统.这当然太过简单化了.电梯控制系统是嵌入式系统,但却有一个用户界面: 选择楼层的按钮和显示电梯正到达几层的指示器. 对于那些连入网络的嵌入式系统,如果该系统包含一个用于监视和控制的web服务器,界面上的区别就更显模糊了.一个较好的定义应强调在该系统的重要功能或主要用途上.

由于Linux可以提供一个用以执行嵌入功能的基本内核以及各种你想要的用户界面元素,所以Linux有很强的通用特点.它能处理嵌入性任务和有关用户界面两方面的作业.可以把Linux看作如下的一个连续体:

从一个只有内存管理,任务调度,定时器服务的缩简的微内核到一个支持各种文件系统和多种网络服务的完整服务器.

一个最小的嵌入式系统仅需如下基本组成部分:

1 : 一个用作引导的可用设施(工具);

2 : 一个具备内存管理,进程管理,和定时器服务的Linux微内核;

3 : 一个初始进程;

为让上面的最小嵌入式系统变得有一定实用性,尚需加上一些东西:

1 : 硬件的驱动程序;

2 : 一个或几个应用进程以提供必要的应用功效.

随着对系统要求的增加,也许还要用到下面这些组件:

1 : 一个文件系统(或许放在ROM或RAM中);

2 : TCP/IP 网络协议栈;

3 : 一个磁盘用来存放半易失性数据和提供交换能力.

硬件平台

挑选最好的硬件是一项很复杂的工作,充满着各种顾忌和干扰:公司的政策,各种成(偏)见,其它工程的影响以及缺乏完整或准确的信息.

成本经常是一个关键性因素.当你着眼成本时,一定要考虑产品的整体成本,而不要只看到CPU;有时一个快速而廉价的CPU可能成了这个产品的耗价的问题根源,一旦当你加上总线和延迟逻辑以便同你的各种外设协同工作的时候.如果你是一个仅管听命的软件员,那么你就只能对早已作好的决定撞运气了,如果你是系统的设计者,就需要尽力制订一个合理的预算并且所选用的硬件要能令你满意地处理实时任务.

从实际中观察CPU到底需要多快方能把工作做好,然后把这个速度乘3(才是系统将所要的CPU速度);因为CPU在理论上所能达到的能力到了现实中总是难以置信地大打折扣!不要忘记缓存对你的系统的影响.

也要计算出总线需要运行多快,如果有二级总线(像一条PCI总线那样),也要把它们包含进来;一条慢的或过多参与DMA传输的总线能够让一个快速的CPU变成在爬行.

有集成外设的CPU很不错,因为很少有硬件需要调试.而且,为支持主流CPU,它们的驱动程序经常是可用的.不过在我以往的工程中,这些芯片对外设的组合好象总是不合理或者缺少我们期望的性能(功能);同样,正因为这些外设被集成在一起,所以不要设想这会是一个最低价的(硬件平台)方案.

把10磅的Linux塞进5磅的口袋

对Linux的一个通常观点是,它由于太大而不宜用作嵌入式系统.这种观点不一定是真实的.面向PC机的Linux典型发布版有很多你根本用不上的功能特征甚至也超过了一个真正PC用户的需求.

首先,我们要把内核和各种任务分开来.标准的Linux内核总是长驻内存的.每一个要运行的应用程序需要从磁盘中装载到内存中,并在那里被执行.当该程序运行结束,它占用的内存被释放掉,也就是说,该程序被卸载掉.在一个嵌入式系统中,可能不存在一个磁盘.因系统的复杂程度和硬件的不同设计,有两种方法可用以摆脱对一个磁盘的依赖性.在一个简单的系统中,当系统启动后,内核和各种应用进程均驻留在内存中--这是大多数传统嵌入式系统的工作方式.Linux也支持这种方式.

使用Linux, 出现了另外一种方式.既然Linux有装载和卸载程序的能力,一个嵌入式系统可以利用这一点以节省RAM.考虑一个比较典型的系统:有大约8兆到16兆的闪存和8兆RAM;那么闪存可以被用作文件系统.用闪存驱动程序作为从闪存到文件系统的界面.作为一种选择,也可以用一个闪存磁盘.这是用闪存来摆脱系统对一个磁盘的需求(依赖).使用这种方式的一个例子是M-System(www.m-systems.com/)中的DiskOnChip技术,它可以支持160MB.所有应用程序以文件的形式被存放在闪存文件系统中并在必要的时候被装载到内存中;这种“用到时才装载”的能力是一个很强大的特征,从而可以很容易地具有(支持)以下各种能力:

1: 允许系统启动后抛弃(释放)那些初始化代码(空间).典型地,Linux用到很多运行在内核外部的工具性程序(utilities).它们通常仅在系统初始化期间运行一次,以后将再也用不到.而且,它们以互斥的方式,一个接一个地依序运行.这样,随着系统的启动,一段内存可以被反复地使用:“以页调入”的方式运载每一个程序.这可以很好地节省内存,特别是处理像网络栈那样的对象时,因为这些对象一经配置便永不更变.

2: 如果Linux之支持可动态装卸模块的特征被包含在内核之中,不仅各种应用程序,驱动程序也可被动态装卸.这样,系统能够检查硬件环境并有选择性地仅仅装载那些适应当前硬件环境的软件.这可以取消(降低)让一个程序以占用更多闪存的代价处理众多硬件变数的复杂性.

3: 系统的升级更加标准化(模块化),你可以常常在系统运行过程中升级一些应用和驱动程序.

4: 配置信息和运行时间参数可作为数据文件存放在闪存中.

无虚拟内存交换

另外一个Linux的特性就是虚拟内存交换,

这一特性将应用程序的编写引入歧途,应用程序的内存需求量可以无限制地上升,因为操作系统在磁盘中提供了交换空间。而在一个无盘的嵌入式系统中,这种特性就用不上了。

如此强大的功能,在嵌入式系统中竟无用武之地。事实上,在一个严格的实时系统中你可能并不需要这种特性,因为它会导致定时功能的失控。如同其它的嵌入式系统一样,软件的设计必须很紧凑,以适应较小的物理内存。

注意,这取决于你的CPU体系,比较明智的做法是保留Linux的这段代码,毕竟,砍掉这些代码,还是要付出一些工作量的。但是,这些代码依然有保留的理由。因为它们能够支持代码共享,多个进程可以共享某一软件的同一拷贝。如果无此功能,那么,每一个程序都必须拥有库程序的独立拷贝,例如:printf 。

将交换空间大小简单地置为零,就可以关掉系统虚拟内存的分页交换机制了。当你的程序要求内存大于实际的内存时,系统的表现就如同交换空间溢出时一样:你的程序不会被加载,或者,当要求过多内存时,malloc 调用失败。

在许多的CPU体系中,虚存机制提供的内存管理可使进程的地址空间相互隔离。一般在嵌入式系统中不是这样,地址空间是简单的,平坦的情况。Linux的虚存机制使出错的进程不致影响整个系统。在许多嵌入式系统中,因为效率原因而设置的全局数据,同时被几个进程所共享,这在Linux中也存在,那就是内存共享,它可以经过设置,使某一段内存成为共享内存。

文件系统

许多嵌入式系统不存在一个磁盘或者一个文件系统。没有它们中的任何一个,Linux也可以运行。正如前面提到的那样,应用任务可以随同内核一起被编译并在启动时作为一个映像被加载.对简单系统来说,这已经胜任.不过,它却缺少前面描述到的各种灵活性.

事实上,如果你观察过许多商业性嵌入式系统,你会发现他们把文件系统作为可选项来提供.大部分要么是一个私人拥有的(专门)文件系统,要么是一个与MS-DOS兼容的文件系统.Linux不但支持许多其它文件系统也支持MS-DOS兼容的文件系统,通常推荐使用除MS-DOS兼容文件系统以外的其它文件系统,因为它们有较优的健壮性和容错性.Linux也有检查和修复工具(不过商业卖主一般不提供),这对从网络上进行更新的闪存系统尤为重要.如果系统在升级中断电,可能导致系统无法再用.一个修复工具通常可以排解此类问题.

文件系统可以放在一个传统磁盘驱动中,或闪存中,或任何可用的其它介质中.同样,一个小的RAM disk常常可以很好地存放暂时性文件(易失性文件).闪存被分隔成很多小块(并被组织起来).它们中可能有一个引导块,它存放了CPU上电后运行的第一个软件.可能存放的就是Linux的引导程序.余下的闪存块可以被用作文件系统.Linux的内核可以被引导程序从闪存中拷贝到RAM中;或者,作为另一种选择,可以把内核放在闪存的一个独立区中并从那里直接运行.

对一些系统来说,另一可行的选择是包含一个廉价的CD-ROM驱动.它可能比闪存还要便宜.并且借助更换CD-ROM盘片就可很容易地得到升级.通过这种方法,Linux只需从CD-ROM启动并可以像对一个硬盘那样从该CD-ROM中获得所有用到的程序.

最后,对于网络上的嵌入式系统(有网络支持的嵌入式系统),Linux支持NFS(Network File System).这一着打开了在一个网络支持系统中实现各种增值特征的通道.首先它允许通过网络加载各种应用程序.由于用在每一个嵌入式系统上的软件可以从一个公用的服务器上加载,这在控制软件的修订或升级中是很重要的.在系统运行的过程中,导入和导出数据,配置,状态信息的一个备份也很有用.对用户监控而言,这是一个非常强大的特征;举例来说,一个嵌入式系统可能装配了一个RAM disk,它包含着与系统当前状态的更新维持一致的(状态)文件.那么别的嵌入式系统仅需通过网络把这个RAM disk作为远程磁盘mount过来便可以访问那些位于远端RAM disk中的状态文件.这也允许在另一台机器上的WEB服务器借助简单的CGI脚本来访问那些状态信息.运行在其他机器上的应用程序包能够很容易地访问这些数据.对更复杂的监控,像MatLab(www.mathworks.com/products/matlab/)这样的一个应用程序包能很容易地用图形化来显示在一个系统操作者的PC或工作站上的系统操作.

引导内核--当没有LILO或BIOS时

当一个微处理器最初启动时,它首先执行在一个预定地址处的指令.通常这个位置是只读内存,其中存放着系统初始化或引导程序.在PC中,它就是BIOS.这些程序要执行低级的CPU初始化并配置其他硬件.BIOS接着判断出哪一个磁盘包含有操作系统,再把OS拷贝到RAM中,并把控制权交给OS.实际上,整个过程远非这么简单,不过对我们的理解已经足够.运行在PC上的Linux系统依赖于该PC的BIOS来提供这些配置和OS加载功能.

在一个嵌入式系统里,常常没有上述的BIOS;这样,你就需要去提供等价的启动代码.还好,一个嵌入式系统的BIOS并不需要像PC BIOS引导程序那样有那么多的灵活性,因为它通常仅需处理一种硬件配置方案.这些代码比较简单但也另人厌烦.它是一些把特定的数写入指定硬件寄存器的指令序列.不过这是很关键的代码,因为这些数值必须要符合你的硬件并且要按特定顺序来完成.在大多数情况下,(这些代码中)有一个最小化的加电自检模块用以检查内存,让一些LED闪现一下,也可能探测一些其它让Linux OS启动和运行的必要硬件.这些启动代码是高度硬件专用性的,因而,不具移植性.

有幸的是,大多数系统为核心微处理器和内存使用了食谱式的硬件设计.典型地,芯片制造商有一个可供设计参考的演示板--新设计多少可以从中直接拷贝一些.对这些食谱式的设计,经常有现成的启动代码可用,而且可以很容易地被修改以适应你的需要.很少(会遇到)有需要从头开始编写的启动代码.

为了测试你的(启动)代码,你可以使用一个包含它自己的仿真内存的电子仿真器(in-circuit emulator),这里的仿真内存用以替换目标内存.你把待测代码加载到仿真器中并通过仿真器调试它.如果没有可用的仿真器,也可以跳过这一步,不过需要一个较长的调试周期.

这些代码最终要从非易失性存储器中运行,通常是用闪存或EPROM芯片,你要想办法把这些代码放进前述芯片中,放入的具体方法依赖于“目标”硬件和工具.一个常见的方法是把闪存或EPROM芯片插入到一个EPROM或闪存“烧炉”中.这种方法将把你的程序“烧入”(存入)芯片中.然后,把芯片插入到你目标板上的一个插槽中,打开电源.这种方法要求在板子上具有插槽化(socketed)部分;然而,有些设备包格式(结构)不允许 槽化(socketed).

另一种办法是通过一个JTAG接口.一些芯片包含一个JTAG接口,从而可以对芯片编程.这是一种最简便的办法.芯片可以被永久地焊接到板子上.一段电缆从板子上的JTAG连接器(通常是一个PC卡)连接着一个JTAG接口.接下来要求在操纵JTAG接口的PC上做一些用户定制性编程.在仅需较少运行量的产品中,也可以使用这种方法.

健壮性---比政客的承诺还可靠

这是显而易见的,作为一种选择,Linux已被普遍地认为能够在PC平台上可靠地,稳定地运行。嵌入式内核自身有多稳定?对于大多数微处理器来说,Linux是很好用的。将Linux移植到新的微处理器体系也是非常迅捷的。一般是将其移植到一种新型的目标板,这种新型的目标板包含有独特的外设,当然还有CPU.

幸运的是,大部分的内核代码都是相同的,因为它们与微处理器无关,所以,移植的工作都集中在那些不同的部分,通常是一些存储器管理及中断处理程序。一旦完成,它们往往是非常稳定。如同前面谈到的,引导的过程非常依赖于硬件的变化而变化,所以,一定要周密地计划一番。

设备驱动程序虽然变化多端,但其中一些已相当稳定。同时,你的选择也不算太多,一旦离开PC平台,那就只有自己去写了。所幸的是,在我们周围已有许多既有的设备驱动程序,你总能找到一个近似的,而去修改它。驱动程序的接口是明确定义的。大多数驱动程序之间都是相似的,所以,移植一个磁盘,网络,串行口驱动程序,从一个设备到另一种,经常不是太难。我发现大多数的驱动程序都写的很好,并很好理解,而难题反而是在我手上的那本讲解内核结构的书。

就我个人的经验而言,Linux与我曾经使用过的那些顶顶大名的商业操作系统一样稳定。总的来说,关于这些操作系统(包括Linux)的问题都源于对系统工作策略的误解,而不是纯代码bug或基本设计错误。大量的操作系统的bug故事,在这里没有必要再重提。而Linux的优点,就在于其源码是公开的,并有很好的注释和完整的文档说明,从而,你也就拥有了控制与解决一切问题的能力基础。

即内核与驱动程序之后,还有一点:如果一个系统中有一只硬盘,那么,系统的可靠性可能会成为问题。我们拥有两年的经验和时间,都沉浸在有盘嵌入式系统中。这些系统从不关机,电源有几次被意外地断掉,可是,EXT2文件系统表现得很好。标准的Linux初始化脚本运行了fsck程序。这个程序做了一个漂亮的检查与清理不正常节点的工作。还有一处英明之举,也是一处较大的变动,我们将update程序由30秒执行一次,调整为5或10秒执行一次。这使得磁盘高速缓存中的数据能较频繁地写回到磁盘里,从而,降低了丢失数据的可能性。

没有

嵌入式Linux当然有它的不足。比如,它很占内存,尽管不比一些商业竞争者的情况更坏。但可以通过消减一些不必要的功能来改善,也有可能得不偿失,因为很可能会产生比较严重的bug。

大多数Linux应用程序都会使用虚拟内存交换,这在很多嵌入式系统中是一种非确定因素,所以,不要假定任何一个无盘嵌入式系统能够运行什么Linux应用程序。

低等级的,内核级的调试工具仍然不是很好使。kgdb会使人感到很不适应,你常要reboot。很不幸,调试仍然是以打印语句为主。

对于我来说最严重的问题是心理作用。Linux是一种极具适用性的操作系统。可是,嵌入式系统在通常情况下是不具备这种性质的;它们是对于特定的用途,进行过仔细优化了。但Linux的这种适用性倾向,保持了系统的通用性和多变性,同时也是一个奢侈的目标,付出的代价很高,需要增添许多额外的工作,会有许多附加的程序产生,从而增加了软件包的体积,有时还会以降低性能为代价。举一个常提到的例子--配置程序:在一个网络接口上配置IP地址,一般是由启动脚本中的ifconfig完成的。这是一个大小约28K左右程序,其实只用几行代码就可以完成它的工作:它负责根据配置文件中的内容初始化一些相应的数据结构。事情就是这样:当一切成为一件合理的事情去做时,你不这样做,又能怎样呢?不然“软件”意义又何在呢。

结束语

在嵌入式系统中使用Linux是可能的,并且已经成功了。它可以可靠地工作。从此,我们就在开发的成本上有了第二种选择。

篇3:嵌入式系统教案

随着社会的发展, 社会对毕业生要求越来越高, 要想提高毕业生的就业率, 并使之能更好地适应社会对人才的需求, 高校的部分课程的教学模式与教学方法必须有所改变。嵌入式系统是一门理论性与实践都很强的学科, 它不仅需要前面一些课程理论知识的铺垫, 而且还要求同学们在课余时间加强动手练习, 所以仅凭教师在理论课讲理论, 学生在实验课完成指定实验是不够的。针对我院学生的特点, 课题组结合校园网和信息化技术开发了嵌入式系统课程辅助教学平台, 该平台通过提供与本门课程相关知识的资料、每节课需要预习的知识点, 每节实验课基本实验的演示视频, 并提供预习情况的监督功能来保证同学的预习质量。通过提供嵌入式课程设计管理功能来保证同学课余时间的动手能力, 通过提供交流论坛来为同学提供一个经验交流环境。

2. 系统设计

2.1 系统功能

根据课程建设、学院和学生的要求, 本系统需要完成功能如下:

(1) 课程要求:系统应能显示本门课的课程大纲、教学日历、课程表和相关的上课规定等文件, 让同学在上课之前对本门课的相关要求有一定的了解, 并能在系统内发布相应的公告信息。

(2) 资料共享:可以上传教师上课课件、相关辅导材料和工具软件。上传的资源不要求多, 但必须精, 因为一门课在一个学期学习内学习时间有限, 繁多的教学资料会使得同学抓不住重点。

(3) 预习管理:任课教师在课程开课前按照教学大纲和教学日历, 将上课内容按章划分好知识点, 发布在网上供学生阅读, 实验课应将实验指导书, 相关工具介绍、实验的基本操作视频放在网上, 以便学生能提前预习。学生通过用户名登录后, 对于课前预习知识点来说, 学生每次浏览知识点后, 系统就会记录下来其是否浏览过。对于实验视频演示系统, 每次学生观看, 系统会记录下来其是否浏览过, 浏览了多长时间, 并可以将此作为评判平时成绩因素之一。

(4) 交流论坛:为学生提供一个相关交流学习的一个空间, 老师也可利用解答版块解决学生提出的问题, 交流论坛不但可以回答学生在学习过程当中遇到的问题, 也可以将被解答过答案留给以后学习本门课学生的作为参考。

2.2 系统框架

本系统共五个功能模块, 分别为:公告管理模块、资源管理模块、大作业管理模块、交流论坛模块和用户管理模块。系统框图如图1所示。

3. 系统实现

本系统是在Windows XP操作系统下, Adobe Dreamweaver CS6软件环境下, 以PHP为编程语言开发完成的, 数据库采用My Sql 5.0, 系统采用通用B/S结构。

3.1 公告管理模块

该系统包括发布公告、公告管理等子功能模块。该模块可以由任课教师和管理员进行操作。

(1) 公告管理子模块

主要发布上课相关公告, 交作业时间。为了保证是学生亲自动手完成的, 每次学生交作业后, 进行答辩, 答辩的时间、地点在公告里进行通知, 每次答辩成绩和实课成绩通过公告进行发布。

(2) 公告管理子模块

主要完成公告的删除与修改功能。

3.2 资源管理模块

该系统包括上传资料、管理资料、课前预习等子功能模块。

(1) 上传资料子模块

主要完成教师上传课件、课程相关资源、实验视频等相关资料, 此子模块的功能可以由任课教师和管理员进行操作, 本子模块对资料的大小没有限制。

(2) 管理资料子模块

主要完成对上传资料的管理, 包括修改资料名称、修改资料分类、删除上传资料等。本子模块可以由管理员和任课教师进行操作。

(3) 课前预习子模块

该子模块主要完成对学生预习情况记录的功能, 如果学生下载过理论课预习资料视其阅读过, 如果学生在上实验课前浏览过教学视频且浏览时间为视频最后时间, 视为浏览过。

3.3 大作业管理模块

该模块包括教师出题子模块、学生选题子模块、学生分组子模块和上传大作业资料子模块。

(1) 教师出题子模块

教师在此子模块里出大作业的题目, 学生根据自己的兴趣选择大作业题目。

(2) 学生选题子模块

学生通过在本模块里选择自己的大作业题目。

(3) 学生分组子模块

学生选择题目之后按照教师规定的功能模块进行分组, 学生分组之后将组信息填在本子模块里。

(4) 上传大作业资料子模块

学生完成大作业后, 将答辩用PPT、相关程序和课程论文传至本模块。

3.4 交流论坛模块

该模块采用Discuz X2.5论坛模版, 主要包括前沿技术、问题讨论、老师答疑和资源共享等版块。

在这个模块里, 学生们可以讨论问题, 也可以给任课教师留言, 由任课教师回答相关问题。

3.5 用户管理模块

本系统不能用户自己注册, 所有注册均由管理员进行添加, 该子模块包括学生用户管理子模块、教师用户管理管理子模块和管理员用户管理子模块。

4. 结束语

本系统在本学期开发完成, 目前正在使用, 系统操作比较稳定, 基本上能满足辅导要求, 但是还存在如上传的资料不够精简、预习知识点不够全面等问题。

参考文献

[1]孙宝军.课程建设与大学生毕业设计互溶性的思考[J].现代计算机, 2013, 13:38-40.

[2]林祥果.基于“项目导向, 任务驱动”的高职嵌入式系统课程开发实践[J].顺德职业技术学院学报, 2012, 3:50-53.

[3]郑广海, 曲英伟.“嵌入式Linux操作系统及实践”课程改革[J].计算机教育, 2012, 4:37-40.

[4]潘巧书.计算机教学辅助系统的应用研究[J].中国电子商情:科技创新, 2013, 17:26-26.

篇4:嵌入式系统在温控系统中的应用

1.前言

温度作为一个基本物理量,它是一个与人们的生活、生产密切相关的重要物理量。生活和工业生产过程中温度作为一种常用的主要被控参数,我们需要对温度参数进行检测并利用该参数进行自动控制。采用单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此单片机对温度的控制问题是一个工业生产中经常会遇到的问题。

2.国内外发展现状

目前国内外的温度控制方式越来越趋向于微型化和智能化,温度测量首先是由温度传感器来实现的。测温仪器由温度传感器和信号处理两部分组成。随着工业生产效率的不断提高,自动化水平与范围也不断扩大,因而对温度检测技术的要求也愈来愈高,一般可以归纳以下几方面。

(1)扩展检测范围 现在工业上通用的温度检测范围为-200-3000℃,而今后要求能测量超高温与超低温。尤其是液化气体的极低温度检测更为迫切,如10K以下的温度检测是当前重点研究课题。

(2)扩大测温对象 温度检测技术将会由点测温发展到线、面,甚至立体的测量。应用范围己经从土业领域延伸到环境保护、家用电器、汽车工业及航天工业领域。

(3)发展新型产品 利用以前的检测技术生产出适应于不同场合、不同工况要求的新型产品,以满足用户需要。同时利用新的检测技术制造出新的产品。

(4)适应特殊环境下的测温 对许多场合中的温度检测器有特殊要求,如防硫、防爆、耐磨等性能要求;又如移动物体和高速旋转物体的测温、钢水的连续测温、火焰温度检测等。

(5)显示数字化 温度仪表向数字化方向发展。其最大优点是直观、无读数误差、分辨率高、测量误差小,因而有广阔的销售市场。

(6)标定自动化 应用计算机技术,快速、准确、自动地标定温度检测器。根据分析,由单片机组成的温控系统,通过在单片机外部添加各种接口电路,可构成单片机最小系统,用以实现对温度控制对象的温度的显示和控制。同时也能根据实际情况实现数据处理、报警,对各个参数以一定的周期进行检查和测量,检测的结果经处理后再进行显示和报警,以提醒操作人员注意或直接用于生产控制。

3.应用情况

嵌入式温控系统现在应用非常广泛,可以说深入到了生活的方方面面,如蔬菜大棚智能温度控制系统、贮液容器温控系统、汽车空调温控系统、电加热炉温度控制系统等。

(1)蔬菜大棚智能温度控制系统 冬季塑料蔬菜大棚最重要的一个管理因素是温度控制。温度过低,蔬菜会冻死或停止生长,所以要控制温度在蔬菜适宜的范围内。如果仅靠人工控制既耗费人力、物力,又容易发生差错。为此设计智能化温控系统,控制蔬菜大棚温度,适应生产需求。蔬菜大棚智能温度控制系统的研制水到渠成。

(2)贮液容器温控系统 贮液容器溫控系统中以贮液容器温度为被控参数,蒸汽流量为控制参数,输入贮液容器冷物料的初温为前馈控制,构成前馈一反馈控制系统,从而达到控制贮液容器温度,满足工艺要求的目的。

(3)汽车空调温控系统 现代化的汽车空调就是能将汽车室内空间的环境调整到对人体最适宜的状态,创造良好的车内环境,以提高司机的工作效率和保护乘员的身体健康。目前高档轿车中用各种微处理器完成各种控制,汽车空调温控系统技术也有了飞速的发展。

(4)电加热炉温度控制系统 电加热炉随着科学技术的发展和工业生产水平的提高,已经在冶金、化工、机械等各类工业控制中得到了广泛应用,并且在国民经济中占有举足轻重的地位。嵌入式电加热炉温度控制系统现在正被广泛地使用。

4.技术情况分析

下面对使用80C51和18B20的系统进行分析:

(1)硬件 硬件主要包括中央处理器80C51、温度传感器18B20、键盘、LED等。

(2)软件 系统软件设计时可以采用模块化的结构和层次设计思想,不仅方便了设计和使用,也有利于以后系统的扩展和升级。系统软件可以包括主程序、数据采集处理模块,可以使用PID算法,可以包括声光报警模块、通讯模块等。

从以上分析不难看出,使用单片机进行温控系统的开发已具有成熟的技术。

5.趋势

随着微电子技术的不断发展,集成了CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器甚至A/D、D/A转换器等电路在一块芯片上的超大规模集成电路芯片出现了。以单片机为主体,将计算机技术与测量控制技术结合在一起,又组成了所谓的“智能化测量控制系统”,也就是智能仪器。

与传统仪器仪表相比,智能仪器具有以下功能特点:

(1)操作自动化 仪器的整个测量过程如键盘扫描、量程选择、开关启动闭合、数据的采集、传输与处理以及显示打印等都用单片机或微控制器来控制操作,实现测量过程的全部自动化。

(2)具有自测功能 包括自动调零、自动故障与状态检验、自动校准、自诊断及量程自动转换等。

(3)具有数据处理功能 具有数据处理功能,这是智能仪器的主要优点之一。智能仪器由于采用了单片机或微控制器,使得许多原来用硬件逻辑难以解决或根本无法解决的问题,现在可以用软件非常灵活地加以解决。

(4)具有友好的人机对话能力 智能仪器使用键盘代替传统仪器中的切换开关,操作人员只需通过键盘输入命令,就能实现某种测量功能。与此同时,智能仪器还通过显示屏将仪器的运行情况、工作状态以及对测量数据的处理结果及时告诉操作人员,使仪器的操作更加方便直观。

(5)具有可程控操作能力 一般智能仪器都配有GPIB、RS232C、RS485等标准的通信接口,可以很方便地与PC机和其他仪器一起组成用户所需要的多种功能的自动测量系统,来完成更复杂的测试任务。

随着嵌入式在温控系统的应用,温控系统也具有了操作自动化功能、自测功能、数据处理、人机对话能力、可程控能力等功能,随着嵌入式技术的不断发展,温控系统应用的领域会越来越大,温控系统也会向微型化、高度集成化、控制简单化等方向发展。

6.结论

嵌入式温控系统具有良好的动态性能,控制精度高,控制效果稳定、良好,可以满足各个行业的不同要求。随着智能温控系统的不断普及和发展,基于高性能处理器的嵌入式温控系统将会有更加广阔的用武之地。

篇5:嵌入式系统实验

实验(实习)名称

电机转动控制及中断实验 实验(实习)日期

2016.5 得分

指导教师 谢胜东

学院 计算机与软件 专业 计算机科学与技术 年级

2013 班次 3 姓名

叶正舟 学号

20131308072 实验名称

电机转动控制及中断实验 实验目的

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

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

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

(4)掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。实验环境

(1)ADS1.2开发环境(2)PC(3)串口线 实验内容及要求

学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM 的生成方法,同时也要掌握I/O 的控制方法。

(1)编程实现ARM芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速

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

(3)通过超级终端来控制直流电机与步进电机的切换。实验设计与实验步骤

(1)新建工程,将“电机转动控制实验”中的文件添加到工程(2)编写直流电机初始化数(MotorCtrl.c)(3)控制直流电机与步进电机 实验过程与分析

(1)通过把从串口中得到控制信息的代码修改成从zlg7289芯片中读取小键盘信息,从而利用试验台的小键盘来控制步进电机和直流电机的切换

(2)A/D转换可以把电信号转换成数字信号来控制电机的转速。for(;;)

{ loop:

//if((rUTRSTAT0 & 0x1))//有输入,则返回

if(rPDATG&ZLG7289_KEY)//17键小键盘控制电机

{

*Revdata=RdURXH0();

goto begin;

}

Delay(10);ADData=GetADresult(0);

if(abs(lastADData-ADData)<20)

goto loop;Delay(10);count=-(ADData-lastADData)*3;

//(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/512为步距角,//由于接了1/8减速器,两者之商再乘以8为步进电机相应转过的角度

if(count>=0)

{//转角大于零

for(j=0;j

{

for(i=0;i<=7;i++)

{

SETEXIOBITMASK(stepdata[i], 0xf0);

Delay(200);

}

}

}

lastADData=ADData;

} } 实验结果总结

利用A/D转换器实现了对直流电机和步进电机的控制,利用实验设备上自带的小键盘实现了A/D转换器对两个电机控制的切换。心得体会

篇6:嵌入式系统教案

作者: WuYJ@263.net.cn

摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可方便移植到不同的嵌入式应用中。

在嵌入式系统中,为了便于对闪存(Flash)空间进行管理,会采用文件的形式来访问Flash。目前,可以购买到的Flash文件系统一般都是兼容DOS的文件系统(Flash File System,FFS),这对需要一个具有复杂的目录层次,并且DDS文件兼容的系统来说是必要的;但是对大多数的嵌入式应用来说,这种文件系统太过奢侈。笔者在参与嵌入式系统项目的时候,设计了一种线性文件系统,它适用于大多数的嵌入式应用对Flash文件系统的需求。

线性文件系统设计基于三个目标:一是提供给应用程序通过文件名而不是物理地址访问系统Flash的能力;二是文件系统的设计独立于实时操作系统(RTOS),这样可以很容易移植到不同的嵌入式应用中;三是设计统一的底层接口,适应不同的Flash类型。本文设计的线性文件系统为典型的嵌入式系统提供了所需的类文件系统能力。需要注意的是,本文件系统不支持复杂的Flash扇区擦写次数均衡算法,没有目录层次,并且和其它的文件系统不兼容。

1 线性文件系统

线性文件系统的设计思路是这样的:文件分为文件头和文件数据区两个部分,每个文件按照顺序存放在Flash中,以单向链表来链接文件。文件的起始部分是文件头,包含文件的属性、指向下一个文件头的指针、文件头和文件数据区的32位循环冗余校验和(CRC32)等。文件头用一个32位的字来表示文件属性,每位表示一种属性,如数据文件或者是可执行文件,是否已删除的文件等,具体可以根据应用的需要来定义文件的属性;文件头和文件数据区维护独立的CRC32校验,使文件系统能更精确检测文件的完整性。文件的起始地址没有特殊需求,分配给文件系统的Flash大小限制了文件的大小。另外,线性文件系统作为嵌入式系统的一个功能模块,它为应用程序提供与标准文件系统类似的API接口,如:read()、write()、open、close()、stat()和seek()等。对于同时在多片Flash的系统而言,每片Flash相当于一个目标,文件都可存储在任何一片中(当然受物理空间限制),但不能跨片存储。

图1 Flash文件系统空间

在第一个文件创建之前,必须进行初始化,将所有分配给文件系统的`Flash空间擦除。当创建第一个文件时,起始位置从文件系统的起始地址开始,文件头指针指向下一个空文件的起始位置(链表尾部);第二个文件的位置从当前的链表尾部开始,同时文件头中的链表指针指向新的尾部。删除文件时,仅仅是简单地把文件头的标识位中的活动文件标识位置0,表示删除。这样,在经过多次删除之后,就有必要运行碎片整理模块来进行文件系统Flash空间的碎片整理。碎片整理模块还需要在文件系统Flash空间尾部留一个扇区来数据备份,以便当碎片整理被打断时(如下电或者复位)可以恢复文件系统。这个保留的扇区称空闲扇区。它必须放在文件系统空间之后,这样可以保证文件系统的所有文件在所占用的Flash空间是连续的。整个文件空间的分配如图1所示。

阴影部分是文件头,数据结构如下:

struct hdr{

unsigned short hdrsize; /*文件头字节数*/

long filsize; /*文件头版本*/

long filsize; /*文件大小*/

long flags; /*描述文件的标识*/

unsigned long filcrc; /*文件数据的CRC32的值*/

unsigned long hdrcec; /*文件的最后修改时间*/

struct hdr *next; /*指向下一个文件头的指针*/

char name[NAMESIZE]; /*文件名*/

char info[INFOSIZE]; /*文件描述信息*/

};

碎片整个记录区包含两种数据类型:碎片整理文件头信息表defraghdr和文件区扇区整理前后的CRC值备份表sectorcre。具体的地址分配从空闲扇区的起始地址减1开始,往前分配文件系统扇区数乘以4字节作为sectorcrc的空间;从sectorcrc起始地址减1开始,往前分配活动文件个数乘以64字节作为碎片整理文件头信息表。这两个结构定义如下:

struct defraghdr{

struct hdr *ohdr; /*文件头的原始位置指针*/

struct hdr *nextfile; /*指向下一个文件的指针*/

long filsize; /*文件大小*/

unsigned long crc; /*这个头的CRC32值*/

unsigned long ohdrcrc; /*原始文件头CRC32值的拷贝*/

long idx; /*碎片整理表头的索引*/

long nesn; /*新的文件尾的扇区号*/

long neso; /*新的文件尾的扇区偏移量*/

char *nda; /*新的文件起始地址*/

char fname[NAMESIZE]; /*文件名*/

};

struct sectorcrc{

unsigned long precrc; /*碎片整理前扇区数据CRC32的值*/

unsigned long postcrc; /*碎片整理后扇区数据CRC32的值*/

};

从上面介绍可知,除了文件数据之外,文件系统还需要如下4种额外的开销。

①文件头:这是每个文件必须的开销,如果文件名和信息域各24字节,那么整个文件头共76字节。

②碎片整理文件头信息表:每个活动(非删除)的文件在进行碎片整理时在这个表里创建一个表项,每个表项64字节。

③碎片整理前后的扇区CRC32值表:保存文件整理前后的CRC32值,总的字节数约为文件所占扇区数的4倍。

④空闲块:用来在碎片整理过程中备份当前整理扇区数据。它必须不小于文件系统其它所有扇区。

可以用下面方程计算系统开销的总和:

overhead=(FTOT*(HDRSIZE+64))+SPARESIZE+(SECTORCOUNT*8)

其中:

FTOT是总的文件数;

HDRSIZE是文件头字节数(目前为76字节);

SPARESIZE是空闲块的大小;

SECTORCOUNT是分配给文件系统的Flash扇区数,不包括空闲块。

图2 文件碎片整理

2 碎片整理

创建新文件需要占用文件系统空间;但是,由于Flash的底层技术不允许Flash中的任意地址空间被删除,而是按照扇区为单位删除,为此在删除一个文件的时候,暂时没有把整个文件所占的空间删除,仅仅是在文件头的标识里作一个删除标识,并保留在Flash中。这样,被删除文件积累到一定的数量时,就会占用相当大的空间。因此,需要整理文件系统Flash空间,使被删除文件占用的空间重新使用。图2显示了碎片整理过程。文件F1、F2和F5已经被删除,并且在碎片整理之后从Flash中被清除。

进行碎片整理的方法可以有多种。对于嵌入式系统来说,选择哪种方法,衡量的依据是复杂性和功能之间的平衡。下面讨论两种不同的方法:第一种方法相当简单,但是有缺陷;第二种方法功能强大得多,笔者在线性文件实现中即采用这种方法。当然,存在更加复杂的解决办法,但通常的情况是,所添加的复杂性会使整个文件系统的实现更加复杂。目标是保持文件存储的简单和线性,保证所有的文件都是以连续的空间存储在Flash中。

最简单的方法是将活动的文件备份在RAM中,删除分配给文件系统的Flash空间,然后将RAM中备份的所有文件拷贝回Flash。这种方法很简单,并且不需要分配一个扇区作为空闲区;但问题是,需要有一整块和分配给文件系统的空间一样大的RAM来完成这项工作。更糟的是,如果此时系统被复位,或者在删除扇区内容却还没有将文件拷贝回Flash的时候被断电,文件系统将会崩溃。因为RAM中的内容会随之选择,文件内容会被破坏掉。

我们在文件系统实现设计了一种碎片整理方法,可以防止在碎片整理过程中系统复位导致文件崩溃的情况。采用这种方法,不需要大块的RAM,但是需要预选先分配给碎片整理过程一个Flash扇区作为备份区。这个扇区的字节数不小于任何分配给文件系统的扇区。在整个文件系统中,这个扇区位于分配给文件系统最后一个扇区的下一个扇区。因为扇区可能比需要分配给非删除文件的备份的空间要小,所以它必须逐个扇区进行处理,而不是一下就把所有的碎片整理完。采用备份扇区的好处是,在碎片整理过程中,无论断电或者复位都不会破坏文件系统。当下次系统重新恢复时,会根据在碎片整理前记录的每个扇区碎片整理前后CRC值,来判断当前的文件碎片整理状态。如果上次文件整理没有完成,就会继续上次的整理。这种技术的一个缺陷是空闲扇区的擦写次数会较多。这样空闲扇区就可能因为达到擦写寿命而失败。达到这一点的关键依赖于使用的Flash、所分配给文件系

统的扇区数、文件删除和重建的频率。一个可行的解决办法采用电池备份的RAM来替换空闲扇区,可以增加Flash的整体寿命,但是对那些预算紧张的应用来说太过奢移。

具体的碎片整理过程是,首先建立碎片整理区。①为每个扇区建立2个CRC32表项;第一个CRC32是这个扇区在碎片整理前的CRC值;第二个CRC32值是计算出来的碎片整理后的CRC32值。这些CRC是当碎片整理过程被打断时,用来重新恢复整理用的。②创建碎片整理文件头信息表,每个活动的文件占用一个表项。③计算①和②的CRC值,并保存。①~③的数据保存在图1中的碎片整理记录区。第二步是文件重定位;遍历文件系统的每个扇区,处理重新定位后存储空间和该扇区相覆盖的文件。在每个扇区被重写之前,扇区原来的信息被保存在空闲扇区里。第三步,擦除Flash;遍历未使用的扇区,确认所有的扇区被删除。第四步,完整性检测:对新的文件进行检测,保证所有重定位的文件都是完整的。

3 应用分析

Flash的扇区有最大擦写次数。当前的Flash芯片一般支持10万~100万次的擦除。文件系统的应用各不相同,所以这里不能下结论说采用线性文件系统Flash的寿命会有多长。下面解释文件系统访问Flash的方法。这样用户可以根据应用来判断Flash的预期寿命。

我们所设计的线性文件系统并不进行扇区删除次数均衡,以延长Flash的使用寿命。如果所需要的文件系统频繁修改并需要扇区删除次数均衡,可以购买现成的Flash文件系统。扇区删除均衡算法大大增加了底层实现的复杂性,并且超出本文的讨论范围。一般来说,通过文件系统来管理Flash的需求远大于对Flash扇区擦写次数均衡的需求,特别是现在越来越多的Flash扇区都支持100万次的擦写。

如上面所提到的,文件系统本身提供给编程者的接口API与标准OS提供的接口类似。这可能误导开发者认为文件系统可以看作是一个硬盘,以任意的频率进行读写操作。事实并不是这样,线性文件系统碎片整理同制并没有进行擦写次数均衡,这意味着空闲扇区可能会是最早损坏的Flash扇区。因为在碎片整理过程中,空闲扇区被用作其它所有扇区的暂时存放扇区。例如在设计里,有13个扇区Flash用来作线性文件系统区,有1个扇区作为空闲扇区。假设对于最坏情况的碎片整理(13个扇区都影响到),如果每天进行1次碎片整理,对于100 000次擦写次数的Flash而言,可用期能够超过(100 000/13/365=21)。20年是基于每天进行1次碎片整理,并且所有扇区都影响到的情况。碎片整理的频率和整理所影响到的扇区数受应用程序使用文件的限制。用户可以根据文件系统的应用来估算Flash扇区的磨损情况,并作相应的处理。

下面讨论文件系统是如何使用扇区的。Flash扇区仅仅在碎片整理时候才被擦除。当删除文件的时候,只是简单地作一个标识(文件头的一个位)。如果一个存在的文件以写的方式打开,实际的修改步骤是,删除原有的文件,并在当前文件系统的最后一个文件之后重写该文件。最后,这个过程会使文件系统的Flash空间被耗尽,这要就需要运行碎片整理程序。碎片整理程序会使已被删除文件所占用的空间被清除,所有活动的文件在Flash中的位置以连续的方式存放。每个扇区的整理过程是,扇区被拷贝到空闲扇区作备份,然后原来的扇区被删除,计算出该扇区在文件整理后的内容,写入扇区,之后删除空闲扇区的备份。文件系统从头到尾每个扇区重复这样作。在碎片整理时,如果一个扇区不需要进行碎片整理,碎片整理程序就不会动这个扇区因此,受碎片整理程序影响的扇区数目依赖于当前被文件系统占用的Flash扇区数和被删除文件在Flash中的位置。

在一个典型的嵌入式应用里,文件系统中的可执行文件本身就是应用程序。可执行文件一般是最大的文件,也是最不可能经常改变的文件。这意味着执行文件所占用的空间是相对固定的,将会减少空闲扇区因为碎片整理而进行的擦写次数。另外一方面,如果有任何文件需要定期改动,碎片整理将会更加频繁运行。

结语

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:企业嵌入式 下一篇:高职嵌入式