实验5 计时器管理任务的设计_第1页
实验5 计时器管理任务的设计_第2页
实验5 计时器管理任务的设计_第3页
实验5 计时器管理任务的设计_第4页
实验5 计时器管理任务的设计_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验5计时器管理任务的设计实验目的(1)理解计时器的工作原理。(2)掌握定时器管理器模块的内部结构。(3)进一步掌握任务之间的信号量通信机制。实验任务(1)通过本实验掌握计时器模块在瓦/OS-II下的工作原理。(2)根据实验提示,使用计时器模块与LED模块在瓦/OS-II下进行任务的设计。(3)瓦/OS-II摁下规定好的按键,启动相应的计时器,同时在LED上显示所启动的计时器,计时器溢出时,通过串口将“Timer#?TimedOut!”发送给PC机。预习要求在本次试验之前应当充分掌握定时器管理器的基本功能和内部结构;参照《嵌入式构件》的第七章计时器管理器理解计时器的工作原理和编程方法,计时器的数据结构,各个函数的具体作用以及各函数的参数设置。实验提示计时器管理器的工作原理是计时器内部含有计数寄存器,首先要设定初值,然后启动计时器。这样计时器就从初值开始累计减少(增加),这样减少(增加)到一定的数值后,计时器模块就发生一个中断,然后根据计数模式跳到合适的值重新计数,循环往复。当启动一个操作,等待一定的时间,然后停止操作这样的场合,计时器有非常重要的作用。通常该过程如下:(1)启动一个操作(打开或关闭输出设备)。(2)启动计时器。(3)当计时器超过了所设定的时间后,停止操作(关闭或打开输出设备)。这时就能从超级终端和LED上观察输出效果。分析定时器模块内部结构如下图5.1所示:

应用程序接口Tmrlnit()TOC\o"1-5"\h\zTmrFnct()\TmrSetT();TmrSetMST()TmrStart()TmrStop()TmrReset()\TmrFormat()计时器管理器TmrCtrTmrEn图5.1计时器管理器模块的流程图计时器管理器TmrCtrTmrEn图5.1描述了计时器管理器模块的流程图,在此假设存在一个实时内核,该模块包括一个每0.1秒执行一次的简单任务,时钟脉冲ISR每经过0.1秒后就对计数信号发送一个信号。时钟脉冲就记录在信号中。在应用程序中,计时器管理器任务负责更新尽可能多的倒计数计时器(在TPM_MAX_TMR中定义),最多可有250个计时器。当执行计时器管理器任务时,对每个有效的计时器,它扫描TmrTbl[]中的所有元素。TmrTask()递减TmrTbl[I].TmrCtr。若计时器为0,则执行用户定义的函数。在负载小的系统中,计时器管理器模块可以维持精确的时间。如果有更高优先级的任务(和中断)的处理时间比一个定时周期更大,计时器管理器任务可能会丢失定时脉冲。也就是说在负载重的系统中,TmrTask()不能维持精确时间。为了解决这个问题,需要使用一个计数信号量,如图5.1所示。计时时钟脉冲数记录在信号量中,在处理器负载变轻时,计时器管理任务最终会追上来。计时器管理器模块提供的接口函数图5.2所示。

TmrInit()TmrSetFnct()计时器

计时器

管理器模块TmrSetMST()TmrStart()TmrStop()TmrReset()TmrFormat()图5.2计时器管理器模块接口函数函数TmrCfgFnct(INT8Un,void(*pfnct)(void*),void*arg)是溢出时执行的用户定义函数。为了使用这个特点,在计时器溢出时,必须指定要执行的函数的地址,这可以通过调用TmrCfgFnct()来实现。计时器任务的执行时间随着所有在计时器溢出后执行的函数的执行时间的增加而增加。有些应用程序在计时器超时后不需要执行函数,在这些情况下,不需调用TmrCfgFnct()。函数TmrChk(INT8Un)允许检查倒计数计时器的进度。函数返回剩余的时间(按一个时钟节拍的倍数计算),直到计时器溢出为止。若返回值为0,则计时器溢出。函数TmrFormat(INT8Un,char*s)用来将指定计时器的剩余时间转换为ASCII字符串。函数TmrInit(void)用于计时器管理器模块的初始化。TmrInit()负责对计时器模块变量进行初始化,并创建计时器管理器任务。函数TmrReset(INT8Un)可用初始值重新启动倒计数过程。函数TmrSetMST(INT8Un,INT8Umin,INT8Usec,INT8Utenths)允许指定分钟、秒和零点几秒来设置一个定时器。函数TmrSetT(INT8Un,INT16Utenths)允许用零点几秒设置计时器。函数TmrStart(INT8Un)初始化倒计数计时器。函数TmrStop(INT8Un)可挂起计时器的倒计时,此后可调用TmrStart()恢复倒计数。函数TmrTask(void*data)由TmrInit来创建,并且负责更新定时器。实验说明程序描述:将编译生成的.S19文件下载在核心板上运行后,LED显示哪几个计时器正在运行,通过超级终端显示“Timer#?TimedOut!”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论