VxWorks信号中断和定时_第1页
VxWorks信号中断和定时_第2页
VxWorks信号中断和定时_第3页
VxWorks信号中断和定时_第4页
VxWorks信号中断和定时_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

VxWorks应用设计中科信软培训中心六、VxWorks中断和定时器6.1中断设备向CPU发送中断,通知CPU发生了某些事件加载用户自定义的程序,在中断到达时执行该程序中断服务程序不是一个任务设备上的板上定时器是一个常见的中断源,可以通过它来理解中断

中断处理举例

中断向量表handler中断号硬件中断↗ISR包装代码Handler:SaveregistercallroutineRestoreregisterRET↗用户ISRmyISR(){…}↗

设置中断处理程序VxWorks提供函数intConnect(),它允许将指定的C函数与任意中断相联系STATUSintConnect(){VOIDFUNCPTR*vector;/*要联系的中断向量*/VOIDFUNCPTR*routine;/*中断发生时要调用的函数*/intparameter;/*传递给中断处理函数的参数*/}该函数将指定的C函数与指定的中断向量相联系,函数的地址存放在这个中断向量中。当发生中断时,系统调用该函数。

中断堆栈大多数体系结构的CPU的ISR使用相同的中断堆栈中断堆栈在系统启动时分配堆栈大小由宏ISR_STACK_SIZE控制,默认值在configAll.h中定义堆栈必须足够大,以保证能够处理系统最坏情况下的中断嵌套ISR没有任务控制块(TCB),并且所有的ISR共享一个堆栈

VxWorks中断处理流程保存CPU寄存器从中断控制器读中断向量号顺序调用该中断服务程序通知中断控制器中断服务程序结束恢复CPU寄存器返回

中断和优先级

ISR的使用限制ISR执行完成之前,其它任务不能执行ISR中不能调用某些VxWorks函数,尤其是,ISR不能被阻塞–不能调用semTake()–不能调用malloc(),free()–不能调用I/O系统函数(如printf())–不能调用使用浮点协处理器的程序非法指令或总线错导致硬件异常时,该任务被挂起,其他任务继续执行如果ISR没有context被挂起,vxworks将在低端内存保存对异常的描述,并重启系统

如何使用ISR保持ISR尽量短,因为ISR–会延迟低或相同优先级的中断–延迟所有的任务–调试起来比较困难避免在ISR中使用浮点指针操作尽量将有些工作放到任务中去完成–持续时间长的工作–不是非常重要的工作

中断与任务间的通信共享存储器和环缓冲区–ISR与任务共享变量、存储器和环缓冲区信号量–ISR释放信号量,任务等待接收信号量消息队列–ISR发送消息,任务等待接收消息,如果消息队列满,该消息被丢弃管道–ISR向管道写消息,任务读消息

调试中断中断处理程序可以调用logMsg()向系统输出诊断信息logMsg(“foo=%d\n”,foo,2,3,4,5,6)向tLogTask发送请求为我们实现printf()的功能和printf()相似,但必须注意–参数必须为4字节–函数有6个入口参数使用具有系统级调试的机制进行调试–WDBAgent–emulator6.2定时器系统时钟中断服务程序看门狗定时器辅助时钟定时器板上的定时器会周期性地中断CPU定时器使得用户自定义的程序可以周期性地执行,这对下列情况非常有用–轮询硬件–检查系统错误VxWorks提供对两种定时器的相同的接口–系统时钟–辅助时钟

系统时钟系统时钟完成下列工作–增加ticks计数(使用tickGet()获得计数值)–更新延时和超时计数器–检查循环调度默认的时钟频率是60HzsysClkRateSet()设置时钟频率sysClkRateGet()获得时钟频率sysClkRateSet()通常在系统启动时进行设置(VxSim方式下可以随时设置)辅助时钟相关函数sysAuxClkConnect()sysAuxClkRateGet()sysAuxClkRateSet()sysAuxClkEnable()sysAuxClkDisable()

看门狗定时器系统时钟的一个用户接口能够使C程序在一个给定延时后开始执行一旦延时超时,指定的程序开始执行作为系统ISR的一部分,要遵守ISR的编程要求

创建看门狗定时器创建一个看门狗定时器–WDOG_IDwdCreate()–返回wotchdogid或NULL或ERROR启动(或重启)一个看门狗定时器STATUSwdStart(wdId,delay,pRoutine,parameter)wdId由wdCreate返回的watchdogIddelay要延时的tickspRoutine当延时超时时,要调用的程序parameter传递给程序的参数wdStart()可以在超时时运行看门狗程序,要想周期性执行,看门狗程序必须调用wdStart()自己重新启动

使用看门狗定时器使用看门狗定时器可以使一段程序周期性地执行wdId=wdCreate();wdStart(wdId,DELAY_PERIOD,myWdIsr,0);voidmyWdIsr(param){doit(param);wdStart(wdId,DELAY_PERIOD,myWdIsr,0);}doit程序可以–轮询某些硬件设备–解锁某些任务–检查系统是否出现错误

停止看门狗定时器要取消原来已经启动的看门狗定时器STATUSwdCancel(wdId)要删除一个看门狗定时器(并取消原先启动的定时器)STATUSwdDelete(wdId)轮询的实现任务级轮询的实现

taskD

温馨提示

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

评论

0/150

提交评论