第一篇:远程线考试系统设计实验报告
系统设计实验报告
—— 远程在线考试系统
目录 软件需求说明书 ························
引言
···························
1.1 编写目的·······················
1.2 背景 ·························
1.3 定义 ·························
1.4 参考资料 ······················· 2 程序系统的结构························ 3 程序设计说明·························
引言.1 编写目的本文档的编写目的是为远程在线考试系统项目的设计提供:
a.系统的结构、设计说明; b.程序设计说明; c.程序(标识符)设计说明. 2 背景
随着网络技术的飞速发展,现在很多的大学及社会上其它的培训部门都已经开设了远程教育,并通过计算机网络实现异地教育。但是,远程教育软件的开发,就目前来说,还是处于起步的阶段。因此,构建一个远程在线考试系统,还是有很大的实际意义的。
根据用户提出的需求,本项目组承接该系统的开发工作 a.开发软件系统的名称:远程在线考试系统 b.本项目的任务提出者:福州大学软件学院 c c. . 用户:各类大专院校学校、中小学校。.3 定义
远程在线考试系统
远程在线考试系统是基于用Browser/Web模式下的,可以实现考试题库管理、多用户在线考试、自动阅卷功能的系统。
.4 参考资料
GB 8566 计算机软件开发规范 GB 8567 计算机软件产品开发文件编制指南 软件设计标准
程序系统的结构
程序 1(标识符)设计说明
.1 程序描述
注册信息录入及信息处理
基本目的:
输入基本资料进行验证保存。.2 功能
基本信息输入和处理包括 输入和保存姓名 输入和保存性别 输入和保存出生日期 输入和保存考试号码 输入和保存备注
.3 性能
要求响应时间小于 1 秒。
.4 输人项
输入信息 数据类型 数值范围 考生姓名 String 包含变长字符串,最大长度可为 20 亿个字符。
考生性别 Boolean M/F 考生出生日期 Date(Time)包含表示日期的数字,日期范围从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日。
考生考试号码 Long 包含-2,147,483,648 到 2,147,483,647 之间的整数。
考生基本信息 String 包含变长字符串,最大长度可为 20 亿个字符。
. 5 输出项
无
.6 算法
无 .7 流程逻辑
.8 接口
无
.9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。.13 尚未 解决的问题
无程序 2(标识符)设计说明
.1 程序描述
考生信息的管理(考生信息处理)对基本信息进行添加、删除、修改、查询等任务。.2 功能
基本处理包括 考生基本信息的添加
考生基本信息的删除
考生基本信息的修改 考生基本信息的查询.3 性能
要求响应时间小于 1 秒。
.4 输人项
输入信息 数据类型 数值范围 考生姓名 String 包含变长字符串,最大长度可为 20 亿个字符。
考生性别 Boolean M/F 考生出生日期 Date(Time)包含表示日期的数字,日期范围从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日。
考生考试号码 Long 包含-2,147,483,648 到 2,147,483,647 之间的整数。
考生基本信息 String 包含变长字符串,最大长度可为 20 亿个字符。
. 5 输出项
无
.6 算法
无
.7 流程逻辑
.8 接口
无
.9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无程序 3(标识符)设计说明
.1 程序描述
试题模型设置输入可以对试题模型进行管理。.2 功能
基本输入包括 试题分值输入 试题数量输入.3 性能
要求响应时间小于 1 秒。
.4 输人项
输入信息 数据类型 数值范围 题目数量、分值 Long 包含-2,147,483,648 到 2,147,483,647 之间的整数。
. 5 输出项
无
.6 算法
无
.7 流程逻辑
.8 接口
无
.9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无程序 4(标识符)设计说明
.1 程序描述
试题库管理输入与处理是对试题库进行管理。.2 功能
单选题添加、编辑、与删除 多选题添加、编辑、与删除.3 性能
要求响应时间小于 1 秒。
.4 输人项
输入信息 数据类型 数值范围 题目 String 包含变长字符串,最大长度可为 20 亿个字符。
. 5 输出项
无
.6 算法
无
.7 流程逻辑
.8 接口
无
.9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注
释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无 7 程序 5(标识符)设计说明
.1 程序描述
试卷生成输入与处理是对试卷生成进行处理。.2 功能
基本输入与处理包括 输入考题数量 系统自动生成相应试卷
.3 性能
要求响应时间小于 1 秒。.4 输人项
输出信息 数据类型 数值范围 题目数量 String 包含变长字符串,最大长度可为 20 亿个字符。
. 5 输出项
无
.6 算法
无
.7 流程逻辑
.8 接口
无
.9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无程序 6(标识符)设计说明
.1 程序描述
在线考试输入是对考生答题进行管理。.2 功能
基本输入与处理包括 输入题目答案
.3 性能
要求响应时间小于 1 秒。.4 输人项
输入信息 数据类型 数值范围 客观题(判断题)
Boolean T/F 客观题(选择题)
String 包含变长字符串,最大长度可为 20 亿个字符。
主观题(问答题)
String 包含变长字符串,最大长度可为 20 亿个字符。
. 5 输出项
无
.6 算法
无
.7 流程逻辑.8 接口
无
.9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无 9 程序 7(标识符)设计说明
.1 程序描述
考试系统自动阅卷 9 .2 功能
基本输入与处理包括 输入正确答案 系统自动阅卷处理 .3 性能
要求响应时间小于 1 秒。.4 输人项
输入信息 数据类型 数值范围 标准试卷 String 包含变长字符串,最大长度可为 20 亿个字符。
考生试卷 String 包含变长字符串,最大长度可为 20 亿个字符。
. 5 输出项
输出信息 数据类型 数值范围 考生得分 Integer 包含-32,768 到 32,767 之间的整数。
题目对错信息 String 包含变长字符串,最大长度可为 20 亿个字符。.6 算法
无 9 .7 流程逻辑.8 接口
无 9 .9 存储分配
需要数据库存储.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无
.11 限制条件
无
.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无程序 8(标识符)设计说明
.1 程序描述
成绩查阅输入与处理 9 .2 功能
基本输入与处理包括 输入考生基本信息关键字查询
输出考生得分.3 性能
要求响应时间小于 1 秒。
.4 输人项
输入信息 数据类型 数值范围 关键词 String 包含变长字符串,最大长度可为 20 亿个字符。. 5 输出项
输入信息 数据类型 数值范围 相关信息 String 包含变长字符串,最大长度可为 20 亿个字符。
.6 算法
SQL 查询.7 流程逻辑
.8 接口
无.9 存储分配
需要数据库存储
.10 注释设计
a. 加在模块首部的注释:无
b.加在各分枝点处的注释:对各变量的功能、范围、缺省条件等需要注释;
d.对使用的逻辑所加的注释:无.11 限制条件
无.12 测试计划
由本组测试员进行测试。
.13 尚未解决的问题
无
第二篇:操作系统进程管理系统设计实验报告
实验报告说明书
设计名称: 操作系统课程设计
实 验 : 进程调度设计
学生姓名:
专 业: 网络工程 班 级: 08级一班 学 号:
指导教师:雷晓平王东 黄营 杨跃武 日 期: 2011年 6月 19日
课程设计任务书
网络工程 专业 08 年级 1 班
一、具体要求
本课程设计共2周,采取集中方式。㈠主要设计内容
1、进程调度
2、存储管理
3、文件管理
㈡操作系统分项设计
1、设计一 :进程管理系统设计
目的与要求:本设计的目的是加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。
要求设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系(可选)。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
具体详见:设计任务书1--进程调度算法.doc
2、设计二:存贮器管理系统设计
目的与要求:本设计的目的是使学生熟悉存贮器管理系统的设计方法;加深对所学各种存贮器管理方案的了解;要求采用一些常用的存贮器分配算法,设计一个存贮器管理模拟系统并调试运行。模拟环境应尽量接近真实。
具体详见:设计任务书2--内存分区管理模拟.doc
3、设计三:虚拟存储器管理系统设计
本设计的目的是通过设计一个简单的虚拟存储器管理系统来模拟实际的页面调度算法与过程,以掌握这种有用的技术。要求将其输入/输出处理程序编成一个独立的进程模块并与其它请求输入/输出的进程并发运行。并要求加入设备管理子模块。
具体分析为:页面调度算法主要有FIFO、最近最少使用调度算法(LRU)、最近最不常用调度算法(LFU)、最佳算法(OPT)等。题目要求:
① 实现三种算法:
1、先进先出;
2、OPT;
3、LRU ② 页面序列从指定的文本文件(TXT文件)中取出
③ 输出:第一行:每次淘汰的页面号,第二行:显示缺页的总次数
4、设计四:文件管理系统设计
目的与要求:本设计的目的是通过设计和调试一个简单的外部文件系统,主要是模拟文件操作,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。
基本要求如下:
实现三种算法: 先来先服务、最短寻道优先、电梯算法 磁道服务顺序从指定的文本文件(TXT文件)中取出
输出:第一行:磁道的服务顺序;第二行:显示移动总道数
5、设计五:多道程序的转换调度系统 题目要求:(作业调度和进程调度结合在一起)作业流信息是从指定文本文件(TXT文件)中读取 作业信息:
作业号 进入系统时间 估计运行时间 优先级 内存需求量 磁带机需求量 都为整型 作业调度算法:先来先服务、最短作业优先(二者选一)
进程调度算法:先来先服务、基于优先级的算法(静态优先级)(二者选一)输出格式:作业号 时间间隔 800-810(/* 8:00-8:10 */)2 810-900 1 900-930平均周转时间:总的周转时间/作业总数
周转时间就是作业结束时间减去作业进入系统时间 具体详见:多道程序转换.doc
以上设计以20-25人为组,选择一个设计进行。㈢操作系统整体设计
将第㈡部分中的全部或部分有机地组合起来,构成一个小型的操作系统。
二、进度安排
1、教师下达设计任务书(半天)任务书内容包括题目、主要技术指标和要求、给定条件及原始数据、所用仪器设备和参考资料及文献等。教师讲授必要的设计思路和设计方法。
2、学生完成预设计(1天半)本阶段学生通过查阅资料及文献(主要自学),明确任务,掌握工程设计基本方法,确定设计方案,进行设计分析,完成预设计。
3、实验阶段(7天)经教师审查通过预设计方案后,即可进行编程调试。实验由学生独立完成,教师定时指导。
4、设计总结阶段(1天)本阶段学生要认真完成课程设计报告书,整理技术资料,并尽可能写出课程设计的心得体会和改进意见。
三、完成后应上交的材料
课程设计报告书包括:设计任务及主要技术指标、设计方案及论证结果、系统的原理框图、设计程序、实验结果、实验中主要问题及故障现象的分析及设计结论等。
附实验数据、系统软硬件环境、使用说明及参考资料。
四、总评成绩
指导教师 签名日期 年 月 日 系 主 任 审核日期 年 月 日
目 录
一、实验目的………………………………………5
二、实验要求………………………………………5
三、具体内容………………………………………5 3.1先来先服务(FCFS)„„„„„„„5 3.2作业优先SJF 算法„„„„„„„„5 3.3多级队列调度算法„„„„„„„„.5 3.4时间片轮转调度法„„„„„„„„„5 3.5优先级法„„„„„„„„„„„„„6 3.6多队列反馈法„„„„„„„„„„„6 3.7轮转法„„„„„„„„„„„„„„.6 3.8最短周期优先„„„„„„„„„„„6 3.9先来先服务„„„„„„„„„„„„„7
四、实验程序………………………………………7
五、实验总结………………………………………13
设计题目:进程管理系统设计
一、实验目的:
本设计的目的是加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。
二、实验要求:
设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系(可选)。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
三、具体内容:
调度也称dispatcher,这是内核的主要职责之一。一个良好的任务调度算法应该主要体现在以下几个方面:
公平:保证每个进程得到合理的CPU 时间
高效:使CPU 保持忙碌状态,即总是有进程在CPU 上运行 响应时间:使交互用户的响应时间尽可能短
周转时间:使批处理用户等待输出的时间尽可能短 吞吐量:使单位时间内处理的进程尽可能多
很显然在任何操作系统中这几个目标不可能同时达到所以不同的。
操作系统会在这几个方面中做出相应的取舍从而确定自己的调度算法,常用的处理机调度算法有:先来先服务FCFS、短作业优先SJF、优先级、时间片轮转法、多级队列法、多级反馈队列法。
(1)先来先服务(FCFS)
FCFS 是最简单的CPU 调度算法,即按进程到来的先后次序进行调度,这样在系统中等待时间最长的进程被优先调度,而不管其所需运行时间的长短。
(2)作业优先SJF 算法
是指当CPU 可供使用时SJF 算法把CPU 分给需要运行时间最短的进程。(3)多级队列调度算法
把就绪队列划分成几个单独的队列一般根据进程的某些特性如内存大小和进程类型永久性地把各个进程分别链入其中某一个队列中,每个队列都有自己的调度算法,此外在各个队列之间也要进行调度。通常采用固定优先级的抢占式调度,例如某系统中有5 个队列,各个队列的优先级自上而下降低,只有当前3 个队列中都为空的时候队列4 中的进程才可以运行,而当队列4 中的进程在运行时,如果队列1 中进入了一个就绪进程,则队列4 中的进程要立刻让出CPU 使用权。多级反馈队列法允许进程在各队列间移动,其基本思想是把具有不同CPU工作时间这一特性的进程区分开来,如果一个进程要使用很长的CPU 时间,则应把它移至较低级的队列中,这种方式把I/O 繁忙型和交互式进程放在较高优先级的队列中同样在低优先级队列中长时间等待的进程可以移到较高优先级队列中UNIX 系统采用的是多级反馈队列轮转法。
(4)时间片轮转调度法
当两个或两个以上任务有同样优先级,内核允许一个任务运行事先确定的一段时间叫做时间额度quantum,然后切换给另一个任务也叫做时间片调度time slicing,内核在满足以下条件时把CPU 控制权交给下一个任务就绪态的任务,当前任务已无事可做,当前任务在时间片还没结束时已经完成了。轮转法主要是为分时系统设计的,其中时间片是一个重要的参数不能取的过大或过小,通常为10 至100ms 数量级,就绪队列可以看成是一个环形队列,CPU 调度程序轮流
地把CPU 分给就绪队列中地每个进程,时间长度为一个时间片Linux 操作系统就是采用时间片轮转的调度算法。
(5)优先级法
优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的下一个CPU周期的长短和其他因素。
优先级通常用0~4095的整数(称为优先数)表示,是数大优先级高还是数小优先级高取决于规定。例如UNIX系统规定优先数越大优先级越低,优先数越小优先级越高。
优先数有静态和动态之分。静态优先数是指在进程开始运行之前便根据某种或某些因素(如估计运行时间、主存需求量、打开文件个数、所付经费多少等)算定,而且该优先数在进程的整个生命周期内一直不变。静态优先数方法虽然简单,但有可能导致某些低优先级的进程无限期地等待。尤其在高优先级的进程不断进入就绪队列的情况下,使等待CPU的低优先级进程更多,等待时间更长。动态优先数方法是按照某种原则使各进程的优先级随着时间而改变。例如随等待时间增大优先级也跟着提高、随着使用CPU时间的增长优先级跟着下降,就是一种较好的策略。等待了较长时间的进程,总会因其优先级不断地提高而被调度运行。
如果把进入就绪队列的次序作为计算进程动态优先数的主要指标,那么优先级法就变成FCFS。如果把下一个CPU周期最短作为计算进程动态优先数的主要指标,那么优先级法变成SBF,此时各进程的优先数p_pri = 1/ ti,其中ti是估算的下一个CPU周期的长度。
优先级调度也允许剥夺方式。现在的许多操作系统,例如UNIX系统V,Windows NT,OS/2等都采用优先级剥夺调度。
(6)多队列反馈法
其基本思想是,把就绪进程按优先级排成多个队列,同队列的进程具有相同的时间片。高优先级队列的时间片比低优先级队列的小。调度时先从高优先级队列中选出某一进程投入运行,当该进程的时间片到期后则转至低一级的就绪队列中。只有高优先级队列为空时才从低一级队列中调度进程。
例如考虑由3个队列组成的多级队列调度。3个队列的编号分别为0, 1, 2,如图所示。调度算法首先调度0号队列中的进程。当0号队列为空时才调度1号队列中的进程;当0号与1号队列都为空时才调度2号队列中的进程。在剥夺方式下,新进入0号队列的进程将剥夺1号或2号队列中正在执行的进程的CPU,而新进入1号队列的进程将剥夺2号队列中正在执行的进程的CPU。
其实,每个队列都可拥有各自的调度算法,也可制定不同的“转队”规则。这样看来,多队列反馈调度算法能有多种变化。
(7)轮转法
轮转法就是按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各进程机会均等的调度方法。
轮转法本质上是剥夺的,因为一轮内,每个进程不能获得比一个时间片q更长的运行时间。正是由于这一特点,轮转法特别适用于分时操作系统。
轮转法的关键问题是如何确定q的大小。如果时间片太大以致每个进程的CPU周期都能在一个时间片内完成,则轮转法实际上脱化为FCFS。如果q太小以致CPU切换过于频繁,则会增加CPU的额外开销,降低了CPU的有效利用率。这是因为,每次CPU切换涉及到保存原运行进程的现场和恢复新运行进程的现场,这些操作一般需要10ms~100ms的时间。例如,设有一个CPU周期为10单位的进程,在q取12,6,1时的调度次数分别为0,1,9。令时间单位为1ms(1ms=1000ms),1次调度的开销为100ms,则在q=1时CPU的额外开销和有效开销之比为1:10,这是不容忽视的。
(8)最短周期优先
最短周期优先(SBF: shortest burst first)把当前就绪队列中的下一个CPU周期最短的那个进程调度运行。
(9)先来先服务
如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS: first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。也就说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长短及其他因素。FCFS算法简单易行,但性能却不大好。
四、实验程序
#include “iostream.h”
//define pcb typedef struct pcb { char name[10];//进程名
char state;//状态w(就绪)r(运行)f(结束)int id;//id号
int super;//优先级
int ntime;//需运行的时间 int rtime;//已运行的时间 struct pcb *next;}*pcb1;
pcb1 s,w;//define two publiced linknode ,one is s(ready queue),one is w(blocked queue)
//initialize two queues void init(pcb1 &r){ r=NULL;//both queues is the kind of head index }
//print the information of the ready queue void print(){pcb1 p;cout<<“您现在查看的是就绪队列的信息:”;cout<<“进程号 ”<<“进程名 ”<<“优先级 ”<<“状态”<<“已运行时间 ”<<“需运行时间”<
cout<
id<<“ ”<
name<<“ ”<
super<<“ ”<
state<<“ ”<
rtime<<“ ”<
ntime< //print the information of the blocked queue void print1(){pcb1 p;cout<<“您现在查看的是阻塞队列的信息”;cout<<“进程号 ”<<“进程名 ”<<“优先级 ”<<“状态 ”<<“已运行时间 ”<<“需运行时间”< id<<“ ”< name<<“ ”< super<<“ ”< state<<“ ”< rtime<<“ ”< ntime< //check the queue if empty int empty(pcb1 &r){ if(r==NULL)return 0;else return 1;} //check the first process of the ready queue if finshed int check(){ pcb1 p;p=s;if(p->rtime==p->ntime){ p->state='F';//if one process finshed then change ti's state cout<<“进程”< id<<“ 已经结束”< //sort process according to the super of the process and insert to the ready(blocked)queue void sort(pcb1 &r,pcb1 p){ pcb1 p1,p2;int in=0;if(r==NULL)//the queue is empty { r=p;} else { if(p->super>=r->super)//the super of the process which wait insert to the queue is highter than the super of the first process of the queue { p->next=r;r=p;} else { p1=r;p2=r->next;if(p2==NULL)//only one process in the queue { r->next=p;} else { while(in==0&&p2!=NULL)//insert to the middle of the queue { if(p->super>=p2->super){ p->next=p2;p1->next=p;in=1;} else { p1=p1->next;p2=p2->next;} } } if(in==0)//link to the last of ready queue p1->next=p;} } } //block one process and insert to block queue void block(){ if(empty(s)){ if(s->next==NULL){ sort(w,s);s=s->next;} else { pcb1 p1;p1=s;s=s->next;p1->next=NULL;sort(w,p1);} } else { cout<<“现在就绪队列已经为空,再没有进程需要阻塞”< //wake one process of block queue and insert to ready queue void wake(){ if(empty(w)){ pcb1 p1;p1=w;w=w->next;p1->next=NULL;sort(s,p1);} else { cout<<“阻塞队列已经为空,没有进程再需要唤醒”< //runing void runing(){ if(empty(s)){ pcb1 p;p=s;if(check())//check the first process of the queue if finished {//no s=s->next;p->rtime++;p->super--;p->next=NULL;sort(s,p);} else {//yes s=s->next;} } else { cout<<“就绪队列已经为空”< //creat process void input(){ pcb1 p2;p2=new pcb;cout<<“请输入 进程号、进程名、进程优先级、需要运行时间”;cin>>p2->id>>p2->name>>p2->super>>p2->ntime;p2->rtime=0;p2->state='W';p2->rtime=0;p2->next=NULL; sort(s,p2);} //main function void main(){ char ch;init(s);init(w);cout<<“*****************************进程调度模拟程序开始*******************************”< 程序运行界面如下: 五、实验总结 本次实验,我的任务是设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,系统在运行过程中能显示各进程的状态及有关参数的变化情况,从而观察诸进程的运行过程及系统的管理过程,我是用C++写的,在我的电脑能够运行通过,虽不能尽善尽美,但也基本能实现老师的要求。 两个星期程序设计课程,虽然时间有点短,但我也收获不少,这次试验,加深了我对进程概念及进程管理的理解;比较熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构的实施。也让我认识到自己的不足,操作系统的有些知识,我知道的还不多,没有掌握好,还需要多多学学,不断提升自己的能力。 广西工学院鹿山学院 实 验 报 告 课程名称: 嵌入式系统 指导教师: 刘瑞琪 班 级: 自动化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 嵌入式系统设计实验报告 班 级:学 号:姓 名:成 绩:指导教师: 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以内的加减乘除,在此基础上我们利用多任务,实现播放音乐与计算的切换,还利用点击的转动来提示运算过程中出现的问题。 通过这几次实验,为我们以后的课程设计实验打下了坚实的基础,相信有了这几天系统实验的培训,我们的课程设计实验做起来会更加轻松。 汽车空调系统实验报告 车辆2 陈树郁 201131150501 一、实验目的 1.学习并理解汽车空调系统的组成及基本工作原理; 2.熟悉空调系统的制冷循环路线; 3.掌握对空调系统的操作以及控制系统的结构原理; 4.理解压力表的结构原理以及对压力表的操作; 5.理解制冷剂的作用并能掌握加注方法; 6.具有诊断和排除汽车空调系统常见故障的技能。 二、空调工作基本原理 发动机驱动的压缩机将气态的制冷剂从蒸发器中抽出,并将其送入冷凝器。高压气态制冷剂经冷凝器时液化而进行热交换(释放热量),热量被车外的空气带走。然后高压液态的制冷剂经膨胀阀的节流作用而降压,低压液态制冷剂在蒸发器中气化而进行热交换(吸收热量),此时蒸发器附近被冷却了的空气通过鼓风机吹入车厢内。接着气态制冷剂又被压缩机抽走,泵入冷凝器,如此使制冷剂进行封闭的循环流动,不断地将车厢内的热量排到车外,使车厢内的气温降至适宜的温度。 三、实验设备 1.曲柄连杆式压缩机(由曲柄,连杆,活塞,进排气阀等组成); 2.斜盘式压缩机(由主轴,斜盘,气缸,活塞,进排阀等组成); 3.冷凝器、干燥器、膨胀阀、蒸发器、压力表、制冷剂罐、真空泵、空调系统示教台。 四、实验设备简介 1.空调压缩机 a)压缩机的功能 把蒸发器中吸收热量后产生的低温低压冷冻剂蒸气吸入后进行压缩,升高其压力和温度之后送往冷凝器,使冷冻剂在冷却循环中进行循环,由蒸发器吸收的热量在通过冷凝器时散发掉。 b)压缩机的种类 压缩机的种类分为曲轴连杆式、斜盘式摇盘式、双作用轴向斜盘式、涡旋式、旋转叶片式等; c)压缩机的工作原理(双作用式) 当主轴带动斜盘转动时,斜盘便驱动活塞作轴向移动,由于活塞在前后布置的气缸中同时作轴向运动,这相当于两个活塞在作双向运动。 d)工作过程 前缸活塞向左移动时,排气阀片关闭,缸内压力下降,吸气阀片打开,低压蒸气进入气缸开始了吸气过程,一直到活塞向左移动到终点为止;与此同时后缸活塞也向左移动,但不同的是后缸活塞处于压缩过程,在这过程中蒸气不断被压缩,压力和温度不断上升,上升到一定程度时,排气阀片打开,转到排气过程,一直到活塞移动到最左边为止。这样斜盘每转动一周,前后两个活塞分别同时完成吸气、压缩过程,这样一次循环,相当于两个工作循环。 e)压缩机电磁离合器 压缩机电磁离合器在需要的时候可以接通或切断发动机与压缩机之间的动力传递;另外,当压缩机过载时,它还能起到一定的保护作用。2.冷凝器 空调冷凝器用于制冷空调系统,管内制冷液直接与管外空气强制进行热交换,以达到制冷空气的效果。 在制冷时为系统的高压设备(冷暖热泵型在制热状态时为低压设备),装在压缩机排气口和节流装置(毛细管或电子膨胀阀)之间,由空调压缩机中排出的高温高压气体,进入冷凝器,通过铜管和铝箔片散热冷却,空调器中都装有轴流式冷却风扇,采用的是风冷式,使制冷剂在冷却凝结过程中,压力不变,温度降低。由气体转化为液体。 在冷凝器内制冷剂发生变化的过程,在理论上可以看成等温变化过程。实际上它有三个作用,一是空气带走了压缩机送来的 高温空调制冷剂气体的过热部分,使其成为干燥饱和蒸气;二是在饱和温度不变的情况下进行液化;三是当空气温度低于冷凝温度时,将已液化的制冷剂进一步冷却 到与周围空气相同的温度,起到冷却作用 目前汽车空调冷凝器有管片式、管带式以及平行流式3种。 3.干燥器 储液干燥器串联在冷凝器与膨胀阀之间的管路上,使从冷凝器中来的高压制冷剂液体经过滤、干燥后流向膨胀阀。在制冷系统中,它起到储液、干燥和过滤液态制冷剂的作用。制冷剂和冷冻机油中含有微量水分,当这些水分通过节流装置时,由于压力和温度下降,水分便容易凝结成冰,造成系统堵塞的“冰堵”故障。干燥的最主要功用是防止水分在制冷系统中造成冰堵。 此外,制冷系统会由于制造维修时,而带入一些杂物,同时,金属的腐蚀作用也会产生一些杂质。上述杂质与制冷系统的制冷剂混合在一起,在系统中循环便很容易将系统中堵塞,影响正常工作,同时也会增加压缩机的磨损,所以干燥器的另一重要作用是过滤。 4.膨胀阀 膨胀阀也称节流阀,是组成汽车空调制冷系统的主要部件,安装在蒸发器入口处。功能是把来自贮液干燥器的高压液态制冷剂节流减压,调节和控制进入蒸发器中的液态制冷剂量,使之适应制冷负荷的变化,同时可防止压缩机发生液击现象(即未蒸发的液态制冷剂进入压缩机后被压缩,极易引起压缩机阀片的损坏)和蒸发器出口蒸气异常过热。 目前膨胀阀主要有内平衡热力膨胀阀、外平衡热力膨胀阀、H型膨胀阀、膨胀节流管(孔管)四种结构形式。 膨胀阀工作原理:它有四个接口通往空调系统,一个接干燥过滤器出口,一个接蒸发器入口。另外两个接口,一个接蒸发器出口,一个接压缩机进口。感温元件处在从蒸发器出来的制冷剂气流中。这种膨胀阀是温控式的,当冷却负荷的增加导致蒸发器向外输出的温度升高,感温包的温度也随之升高并产生膨胀作用。通过膜片和推杆推动球阀使截面加大,制冷剂进入蒸发器的流量加大。当蒸发器内制冷剂输出温度有所下降时,感温包收缩,球阀的横截面减小,导致制冷剂进入蒸发器的流速减慢。阀门的开度大小取决于蒸发器输出端的温度。 5.蒸发器 空调蒸发器的作用是利用液态低温制冷剂在低压下易蒸发,转变为蒸气并吸收周围空气的热量,风机再将冷风吹到车室内,达到制冷目的。 6.制冷剂 制冷剂又称制冷工质,在南方一些地区俗称雪种。它是在制冷系统中不断循环并通过其本身的状态变化以实现制冷的工作物质。制冷剂在蒸发器内吸收被冷却介质(水或空气等)的热量而汽化,在冷凝器中将热量传递给周围空气或水而冷凝。 以前的汽车使用的制冷剂为R-12,它会破坏臭氧层,已淘汰,制冷剂不可混用。目前空调使用的制冷剂,一种是R22制冷剂,另一种是R410A新冷媒。 五、实验过程 1、制冷剂加注过程 空调系统在加注制冷剂前必须抽真空,而抽真空的目的是为了清除系统中的空气及水分,并进一步检查系统在真空情况下的密封性。a)抽真空步骤 ① 将歧管压力表中黄色(中间)软管的接头接到真空泵上,将蓝色(低压)软管 的接头接到低压管路维修阀口上,将红色(高压)软管接头接到高压管路维修阀口上;② 打开歧管压力表,打开高低压手动阀,启动真空泵; ③ 抽真空到低压表的负压值高于l00kPa; ④ 关闭高低压手动阀,其低压侧表针在10分钟内不得有明显回升。若无,则可向系统内充注制冷剂;若有,就应向系统内充入少量制冷剂进行查找、检修泄漏点,并重新抽真空。b)制冷剂加注步骤 将压力表黄色软管接头从真空泵上接到倒的制冷剂钢瓶接口上; 拧开压力表高压手动阀,向系统中加入液态制冷剂,直到规定量;若不能加注到规定量,可按步骤b补充。注:加注液态制冷剂时,不可拧开低压手动阀,以防产生液击;不能启动空调,以防制冷剂倒灌入钢瓶中产生危险。c)加注气态制冷剂 ① 将压力表中黄色软管接头从真空泵上接到正立的制冷剂钢瓶接口上; ② 拧开钢瓶阀门,拧松压力表黄色软管螺母,直到有制冷剂气体外泄约2-3 秒钟,然后拧紧螺母; ③ 拧开压力表低压手动阀,向系统中加入气态制冷剂,当系统压力高于 2.5kg/cm2时,关闭低压阀; ④ 启动发动机,同时启动空调且置最大制冷工况档; ⑤ 再打开低压手动阀,让制冷剂吸入系统,直到规定量。 需注意的是补充制冷剂,可用压力表和视液镜观查法来确定制冷剂是否足量。 2、空调泄露点的查找 a)直接查找有油污的地方,若过于隐蔽也可把洗洁精水涂抹在管道上,有气泡冒出的地方即为泄露点; b)用试灯法检测,若火苗呈绿色则灯接近处即为泄露点; c)电子检测法检测,将探头伸到可疑泄露处,若有冷媒泄露则在显示屏上有显示,在检测过程中要注意调节灵敏度; d)荧光法检测泄漏量很小的泄露点。 六、实验心得 1.通过实验对空调的组成零部件有了更深层的了解; 2.在实验不断思考的过程中,对空调的工作原理、检测与维护的知识得到进一 步的提升;增强了自身的学习能力; 3.冷媒发生的变化: a)压缩机:低温低压气态制冷剂压缩成高温高压制冷剂 b)冷凝器:将高压制冷剂蒸汽冷凝成中温高压液体(注:从冷凝器中出来的为液态冷媒,流经干燥瓶吸收了多余的水分) c)蒸发器:低温低压的液态制冷剂蒸发成低温低压的制冷剂蒸汽 4.通过学习解决了之前在4S店实习中遇到汽车空调蒸发器至压缩机空气入口 之间的低压管路结霜的问题,结合课堂上的知识,我认为应该有以下几个原因: a)管道堵塞 b)鼓风机不运转 c)干燥瓶不起做用 d)温度传感器失效第三篇:嵌入式系统实验报告
第四篇:嵌入式系统实验报告
第五篇:汽车空调系统实验报告