- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VxWorks信号中断和定时概要
VxWorks应用设计 中科信软培训中心 六、VxWorks中断和定时器 6.1中断 设备向CPU发送中断,通知CPU发生了某些事件 加载用户自定义的程序,在中断到达时执行该程序 中断服务程序不是一个任务 设备上的板上定时器是一个常见的中断源,可以通过它来理解中断 中断处理举例 设置中断处理程序 VxWorks提供函数intConnect(), 它允许将指定的C函数与任意中断相联系 STATUS intConnect() { 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个入口参数 使用具有系统级调试的机制进行调试 –WDB Agent –emulator 6.2 定时器 系统时钟中断服务程序 看门狗定时器 辅助时钟 定时器 板上的定时器会周期性地中断CPU 定时器使得用户自定义的程序可以周期性地执行,这对下列情况非常有用 –轮询硬件 –检查系统错误 VxWorks提供对两种定时器的相同的接口 –系统时钟 –辅助时钟 系统时钟 系统时钟完成下列工作 –增加ticks计数(使用tickGet()获得计数值) –更新延时和超时计数器 –检查循环调度 默认的时钟频率是60Hz sysClkRateSet()设置时钟频率 sysClkRateGet()获得时钟频率 sysClkRateSet()通常在系统启动时进行设置(VxSim方式下可以随时设置) 辅助时钟 相关函数 sysAuxClkConnect() sysAuxClkRateGet() sysAuxClkRateSet() sysAuxClkEnable() sysAuxClkDisable() 看门狗定时器 系统时钟的一个用户接口 能够使C程序在一个给定延时后开始执行 一旦延时超时,指定的程序开始执行 作为系统ISR的一部分,要遵守ISR的编程要求 创建看门狗定时器 创建一个看门狗定时器 –WDOG_ID wdCreate() –返回wotchdogid或NULL或ERROR 启动(或重启)一个看门狗定时器 STATUS wdStart(wdId, delay, pRoutine, parameter ) wdId由wdCreate返回的watchdog Id delay要延时的ticks pRoutine当延时超时时,要调用的程序 parameter传递给程序的参数 wdStart()可以在超时时运行
文档评论(0)