收藏 分享(赏)

实时系统设计与分析试验报告模板(大试验版).doc

上传人:dzzj200808 文档编号:2629059 上传时间:2018-09-24 格式:DOC 页数:13 大小:78.50KB
下载 相关 举报
实时系统设计与分析试验报告模板(大试验版).doc_第1页
第1页 / 共13页
实时系统设计与分析试验报告模板(大试验版).doc_第2页
第2页 / 共13页
实时系统设计与分析试验报告模板(大试验版).doc_第3页
第3页 / 共13页
实时系统设计与分析试验报告模板(大试验版).doc_第4页
第4页 / 共13页
实时系统设计与分析试验报告模板(大试验版).doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、实时系统设计与分析实验报告学 院 软件学院 年 级 2005 级 班 级 三班 学 号 3005218077 姓 名 王尽宇 2008 年 4 月 14 日1目录一、实验内容.1二、实验过程.X三、实验结果.X2一、实验内容:1、试验题目:普通型自动喷灌机(手持操作控制器部分)2、试验要求:自动喷灌机可以在种植大棚内的天车轨道上往复运行,在运行过程中通过喷水装置实现对一定面积内的农作物进行灌溉。喷水装置共有左右两个喷管,每个喷管上各有十个喷头,控制系统应可以分别控制每个喷管的开闭,自动喷灌机停止时两个喷管都是关闭的,而自动喷灌机运行时可分别设定每个喷管的状态为:双向运行时均开启喷水、仅正向运行

2、时开启喷水、仅反向运行时开启喷水、双向运行时均不喷水。由于每个喷管的水流量是固定的,因此喷水量是靠喷灌机的行进速度来调节的,控制系统应可以预先设定喷灌机的运行速度,并且可以分别设定正向与反向运行时不同的运行速度。自动喷灌机的喷灌工作模式有两种,手动启动和定时启动。其中手动启动又分为启动正向运行与启动反向运行;定时启动则是预先设定一个周期时间,喷灌机进行倒计时,时间到自动开始一次往复运行,并开始下一次倒计时,如此不断循环。另外手动启动还可以通过遥控器实现,遥控器只有启动正向运行和停止两个功能。任何时刻可以通过停止操作停止喷灌机的运行。按键需求:正向行进速度加减键2个反向行进速度加减键2个左右喷管

3、工作状态选择键2个软件学院 2005级实时系统设计与分析试验报告1定时喷灌的间隔时间设置键2个(小时、分钟各一个)参数设定完成键1个,取消键1个喷灌管冲洗命令键1个(预留)喷灌管转换命令键2个(预留)正向启动、反向启动、停止键3个手操控制器主开关1个:扳键开关显示内容:正向行进速度 xx.x 米/分,0.5行显示反向行进速度 xx.x 米/分,0.5行显示左右喷灌模式 双向、正向、反向、停止,1行汉字显示定时喷灌的间隔时间和当前倒计时时间 xx时xx分,各0.5行显示当前工作状态显示,1行汉字显示提供8列 * 4行16 * 16点阵LCD显示(0.5行可显示8 * 8字符)操作方式:按键修改速

4、度、时间、工作状态,修改后 30 秒不按取消键将自动确认,按确认或正向、反向、停止键立即确认并执行相应动作,另外按停止键可实现重新开始倒计时。软件学院 2005级实时系统设计与分析试验报告2二、实验过程:(设计思路,功能划分,任务分配,实验解决方案等等,具体要求请参考系统说明书。 。 。 )1、设计思路:开机后,TaskStart 初始化系统创建 4个任务Task0 、 Task1、Task2、Task3 ,并挂起Task2 ,Task3 和TakStart。Task0任务作为控制性任务从中央控制器中读取系统参数显示在屏幕上,完成后挂起。Task1任务监听键盘输入并设置信号量,根据中央控制器的

5、同步信号设置两个变量。其中一个变量用于记录是否是默认启动即修改后30秒内没输入,如果有则继续等待30秒,该变量清零;若无则唤醒Task2任务。 Task2任务向中央控制器提交信息。另一个变量用于唤醒Task0,每分钟从中央控制器读取系统状态参数。在车辆行时过程中,Task1只会唤醒Task0或对停止键做出响应,调用Task3 任务。Task3向中央控制器发出停止信号,并重置信号量和两个时间变量。2、功能划分:显示系统状态:开机后从中央控制器中读取系统参数并显示到屏幕上。静止时,显示修改结果和倒计时剩余时间;运行时,每分钟从中央控制器读取一次系统状态参数。监听功能:监听键盘输入并根据不同的输入修

6、改系统参数,并监听中央控制器发出的同步信号,以此作为时间计数器调度相应任务。启动功能:将修改后的系统参数提交给中央控制器。终止功能:向中央控制器发出停车信号,并重置倒计时和相关变量。软件学院 2005级实时系统设计与分析试验报告33、任务分配:1变量设置:# difine structure SystemParametersINT8U POS_DIRECTION_SPEED0; 0 到 6 级正向速度的等级INT8U NEG_DIRECTION_SPEED0; 0 到 6 级 负向速度的等级INT8U LEFT_NOZZLE_STATE=1; 左 喷头状态INT8U RIGHT_NOZZLE_

7、STATE=1; 右喷头状态INT8U START_DIRECTION; 启动方向,1 表示正向,2 为反向,0 为停止* 倒计时的时间。默认值是 30 分钟 *INT8U TIMING_HOUR=0;INT8U TIMING_MINITE=30; * 判断为何种确认情况:值为 0 表示按“确认” 、 “正向”或“反向”键的修改;值为 1 表示按默认启动的修改;值为 2 表示按“停止”键的修改 *INT8U START_WAY;# difine INT8U WAITINGTIME=0; 修改数据后的未再按键时间difine INT8U STATETIME=0; 记录时间每分钟唤醒 task0d

8、ifine INT8U WHETHER_RUNNING=0; 0 表示静止,1 表运行difine SystemParameters systemParameters ,ready;2分配任务:TaskStart 任务,优先级为 3,功能为初始化系统并创建其他应用任务后挂起。软件学院 2005级实时系统设计与分析试验报告4初始化系统创建 4 个任务挂起Task2、Task3挂起自身图-1 TaskStart 的流程图Task0 任务,优先级为 4,功能为显示系统的状态参数或将要被修改为的值,运行后被挂起。软件学院 2005级实时系统设计与分析试验报告5显示信号量中的信息挂起自身从中央控制器中读

9、取数据存入信号量中将信号量存入ready 变量中开始是否到一分钟是否图2 Task0 的流程图软件学院 2005级实时系统设计与分析试验报告6Task1 任务,优先级为 7,功能为监听是否有键盘输入并根据相应的输入修改与之相关的参数;接收由中央控制器发来的同步信号作为时钟。它是手持控制器的调度任务,分别根据同步信号的发来的次数和不同的键盘输入信号做出相应的调度来唤醒其他的任务。修改信号量唤醒 Task0判断是否有输入从 ready中恢复信号量的值有输入其他键判断输入的是什么唤醒 Task3确认、正向、反向、停止取消键30 秒内无输入开始图3 Task1 的流程图Task2 任务,优先级为 5,

10、功能为根据相应信号量,将带有参数的信号量提交给中央控制器,根据情况可对信号量添加必要的值,成后挂起。软件学院 2005级实时系统设计与分析试验报告7提交信号量中的信息到中央控制器挂起自身读取信号量的信息补全信息判断信息是否完整完整不完整图4 Task2 的流程图Task3 任务,优先级为 6,功能为向中央控制器发出停车信号并重置信号量,完成后挂起。软件学院 2005级实时系统设计与分析试验报告8重置信号量中的信息挂起自身发出停车信号图5 Task3 的流程图3相关函数:3.1 OSTaskCreate()建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理

11、程序中不能建立任务。一个任务可以为无限循环的结构。函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);参数说明:task 是指向任务代码首地址的指针。Pdata指向一个数据结构,该结构用来在建立任务时向任务传递参数。返回值:OSTaskCreate()的返回值为下述之一: OS_NO_ERR:函数调用成功。 OS_PRIO_EXIST:具有该优先级的任务已经存在。 OS_PRIO_INVALID:参数指定的优先级大于 OS_LOWEST_PRIO。 OS_NO_MORE_T

12、CB:系统中没有 OS_TCB可以分配给任务了。3.2 OSTaskSuspend()无条件挂起一个任务。调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身。当前任务挂起后,只有其他任务才能唤醒被挂起的任务。任务挂起后,系统会重新进行任务调度,运行下一个优先级最软件学院 2005级实时系统设计与分析试验报告9高的就绪任务。唤醒挂起任务需要调用函数 OSTaskResume() 。任务的挂起是可以叠加到其他操作上的。例如,任务被挂起时正在进行延时操作,那么任务的唤醒就需要两个条件:延时的结束以及其他任务的唤醒操作。又如,任务被挂起时正在等待信号量,当任务从信号量的等待对列中

13、清除后也不能立即运行,而必须等到被唤醒后。函数原型:INT8U OSTaskSuspend ( INT8U prio);参数说明:prio 为指定要获取挂起的任务优先级,也可以指定参数OS_PRIO_SELF,挂起任务本身。此时,下一个优先级最高的就绪任务将运行。返回值:OSTaskSuspend()的返回值为下述之一: OS_NO_ERR:函数调用成功。 OS_TASK_ SUSPEND_IDLE:试图挂起 C/OS-II 中的空闲任务(Idle task) 。此为非法操作。 OS_PRIO_INVALID:参数指定的优先级大于 OS_LOWEST_PRIO或没有设定OS_PRIO_SELF

14、的值。 OS_TASK_ SUSPEND _PRIO:要挂起的任务不存在。3.3 OSTaskResume()唤醒一个用 OSTaskSuspend()函数挂起的任务。OSTaskResume()也是唯一能“解挂”挂起任务的函数。函数原型:NT8U OSTaskResume ( INT8U prio);参数说明:prio 指定要唤醒任务的优先级。返回值:OSTaskResume ()的返回值为下述之一: OS_NO_ERR:函数调用成功。 OS_TASK_RESUME_PRIO:要唤醒的任务不存在。 OS_TASK_NOT_SUSPENDED:要唤醒的任务不在挂起状态。 OS_PRIO_INV

15、ALID:参数指定的优先级大于或等于 OS_LOWEST_PRIO。4任务调度:首先 TaskStart 运行初始化系统并创建其他四个任务Task0、Task1、Task2、Task3,挂起 Task2、Task3 和 TaskStart。Task0 从中央控制器中获得系统状态参数并显示到屏幕上之后挂起。此时 Task1 的优先级最高开始运行,它监听手持控制器是否有输入,如果有判断输入的是那个键以采取相应的操作修改信号量,并唤醒 Task0 显示修改后的值。如此往复,直到遇到执行按钮(“确认” , “正向” , “反向” , “停止” )或 30 秒内没有按键,Task1软件学院 2005级实时系统设计与分析试验报告10唤醒 Task2。 Task2 的优先级高于 Task1,Task2 运行。它先对信号量进行判断补全缺少的信息后,将信号量中的信息提取后发给中央控制器,修改系统状态后挂起。若喷灌机启动,系统处于运行状态,Task1 每过一分钟唤醒一次 Task0显示系统状态参数,Task1 继续对手持控制器进行监听但只对停止键响应。若按停止键,则 Task1 唤醒 Task3。Task3 将对中央控制器发出停车信号并重置信号量。三、实验结果:(结果分析,心得体会。 。 。 )

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报