实时系统设计与分析
实
验
报
告
学 院 软件学院
年 级 20##级
班 级 三班
学 号 3005218077
姓 名 王尽宇
20##年 4月14日
目录
一、实验内容…………………………………………………………………………………….1
二、实验过程…………………………………………………………………………………….X
三、实验结果…………………………………………………………………………………….X
一、实验内容:
1、试验题目:普通型自动喷灌机(手持操作控制器部分)
2、试验要求:
自动喷灌机可以在种植大棚内的天车轨道上往复运行,在运行过程中通过喷水装置实现对一定面积内的农作物进行灌溉。
喷水装置共有左右两个喷管,每个喷管上各有十个喷头,控制系统应可以分别控制每个喷管的开闭,自动喷灌机停止时两个喷管都是关闭的,而自动喷灌机运行时可分别设定每个喷管的状态为:双向运行时均开启喷水、仅正向运行时开启喷水、仅反向运行时开启喷水、双向运行时均不喷水。
由于每个喷管的水流量是固定的,因此喷水量是靠喷灌机的行进速度来调节的,控制系统应可以预先设定喷灌机的运行速度,并且可以分别设定正向与反向运行时不同的运行速度。
自动喷灌机的喷灌工作模式有两种,手动启动和定时启动。其中手动启动又分为启动正向运行与启动反向运行;定时启动则是预先设定一个周期时间,喷灌机进行倒计时,时间到自动开始一次往复运行,并开始下一次倒计时,如此不断循环。
另外手动启动还可以通过遥控器实现,遥控器只有启动正向运行和停止两个功能。任何时刻可以通过停止操作停止喷灌机的运行。
按键需求:正向行进速度加减键2个
反向行进速度加减键2个
左右喷管工作状态选择键2个
定时喷灌的间隔时间设置键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字符)
操作方式:按键修改速度、时间、工作状态,修改后30秒不按取消键将自动确认,按确认或正向、反向、停止键立即确认并执行相应动作,另外按停止键可实现重新开始倒计时。
二、实验过程:
(设计思路,功能划分,任务分配,实验解决方案等等,具体要求请参考系统说明书。。。)
1、设计思路:
开机后,TaskStart初始化系统创建4个任务Task0、Task1、Task2、Task3,并挂起Task2,Task3和TakStart。Task0任务作为控制性任务从中央控制器中读取系统参数显示在屏幕上,完成后挂起。Task1任务监听键盘输入并设置信号量,根据中央控制器的同步信号设置两个变量。其中一个变量用于记录是否是默认启动即修改后30秒内没输入,如果有则继续等待30秒,该变量清零;若无则唤醒Task2任务。Task2任务向中央控制器提交信息。另一个变量用于唤醒Task0,每分钟从中央控制器读取系统状态参数。在车辆行时过程中,Task1只会唤醒Task0或对停止键做出响应,调用Task3任务。Task3向中央控制器发出停止信号,并重置信号量和两个时间变量。
2、功能划分:
显示系统状态:开机后从中央控制器中读取系统参数并显示到屏幕上。静止时,显示修改结果和倒计时剩余时间;运行时,每分钟从中央控制器读取一次系统状态参数。
监听功能:监听键盘输入并根据不同的输入修改系统参数,并监听中央控制器发出的同步信号,以此作为时间计数器调度相应任务。
启动功能:将修改后的系统参数提交给中央控制器。
终止功能:向中央控制器发出停车信号,并重置倒计时和相关变量。
3、任务分配:
1>变量设置:
# difine structure SystemParameters
{
INT8U POS_DIRECTION_SPEED=0; \\ 0到6级正向速度的等级
INT8U NEG_DIRECTION_SPEED=0; \\ 0到6级 负向速度的等级
INT8U LEFT_NOZZLE_STATE=1; \\左喷头状态
INT8U RIGHT_NOZZLE_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; \\ 记录时间每分钟唤醒task0
#difineINT8U WHETHER_RUNNING=0; \\ 0表示静止,1表运行
#difine SystemParameters systemParameters ,ready;
2>分配任务:
TaskStart任务,优先级为3,功能为初始化系统并创建其他应用任务后挂起。
图-1 TaskStart的流程图
Task0任务,优先级为4,功能为显示系统的状态参数或将要被修改为的值,运行后被挂起。
图-2 Task0的流程图
Task1任务,优先级为7,功能为监听是否有键盘输入并根据相应的输入修改与之相关的参数;接收由中央控制器发来的同步信号作为时钟。它是手持控制器的调度任务,分别根据同步信号的发来的次数和不同的键盘输入信号做出相应的调度来唤醒其他的任务。
图-3 Task1的流程图
Task2任务,优先级为5,功能为根据相应信号量,将带有参数的信号量提交给中央控制器,根据情况可对信号量添加必要的值,成后挂起。
图-4 Task2的流程图
Task3任务,优先级为6,功能为向中央控制器发出停车信号并重置信号量,完成后挂起。
图-5 Task3的流程图
3>相关函数:
3.1 OSTaskCreate()
建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务可以为无限循环的结构。
函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);
参数说明:task是指向任务代码首地址的指针。
Pdata指向一个数据结构,该结构用来在建立任务时向任务传递参数。
返回值:
OSTaskCreate()的返回值为下述之一:
l OS_NO_ERR:函数调用成功。
l OS_PRIO_EXIST:具有该优先级的任务已经存在。
l OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO。
l OS_NO_MORE_TCB:系统中没有OS_TCB可以分配给任务了。
3.2 OSTaskSuspend()
无条件挂起一个任务。调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身。当前任务挂起后,只有其他任务才能唤醒被挂起的任务。任务挂起后,系统会重新进行任务调度,运行下一个优先级最高的就绪任务。唤醒挂起任务需要调用函数OSTaskResume()。
任务的挂起是可以叠加到其他操作上的。例如,任务被挂起时正在进行延时操作,那么任务的唤醒就需要两个条件:延时的结束以及其他任务的唤醒操作。又如,任务被挂起时正在等待信号量,当任务从信号量的等待对列中清除后也不能立即运行,而必须等到被唤醒后。
函数原型:INT8U OSTaskSuspend ( INT8U prio);
参数说明:prio为指定要获取挂起的任务优先级,也可以指定参数OS_PRIO_SELF,挂起任务本身。此时,下一个优先级最高的就绪任务将运行。
返回值:
OSTaskSuspend()的返回值为下述之一:
l OS_NO_ERR:函数调用成功。
l OS_TASK_ SUSPEND_IDLE:试图挂起μC/OS-II中的空闲任务(Idle task)。此为非法操作。
l OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO或没有设定OS_PRIO_SELF的值。
l OS_TASK_ SUSPEND _PRIO:要挂起的任务不存在。
3.3 OSTaskResume()
唤醒一个用OSTaskSuspend()函数挂起的任务。OSTaskResume()也是唯一能“解挂”挂起任务的函数。
函数原型:NT8U OSTaskResume ( INT8U prio);
参数说明:prio指定要唤醒任务的优先级。
返回值:
OSTaskResume ()的返回值为下述之一:
l OS_NO_ERR:函数调用成功。
l OS_TASK_RESUME_PRIO:要唤醒的任务不存在。
l OS_TASK_NOT_SUSPENDED:要唤醒的任务不在挂起状态。
l OS_PRIO_INVALID:参数指定的优先级大于或等于OS_LOWEST_PRIO。
4>任务调度:
首先TaskStart运行初始化系统并创建其他四个任务Task0、Task1、Task2、Task3,挂起Task2、Task3和TaskStart。Task0从中央控制器中获得系统状态参数并显示到屏幕上之后挂起。此时Task1的优先级最高开始运行,它监听手持控制器是否有输入,如果有判断输入的是那个键以采取相应的操作修改信号量,并唤醒Task0显示修改后的值。如此往复,直到遇到执行按钮(“确认”,“正向”,“反向”,“停止”)或30秒内没有按键,Task1唤醒Task2。Task2的优先级高于Task1,Task2运行。它先对信号量进行判断补全缺少的信息后,将信号量中的信息提取后发给中央控制器,修改系统状态后挂起。若喷灌机启动,系统处于运行状态,Task1每过一分钟唤醒一次Task0显示系统状态参数,Task1继续对手持控制器进行监听但只对停止键响应。若按停止键,则Task1唤醒Task3。Task3将对中央控制器发出停车信号并重置信号量。
三、实验结果:(结果分析,心得体会。。。)
第二篇:系统设计报告模板
****系统设计报告
题目: 班级: 完成人学号: 完成人姓名: 指导教师: 完成日期:
一、系统设计目的
二、系统整体设计
三、系统详细设计
四、设计过程中遇到的问题及解决
五、设计小结
六、参考文献