- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
天脉(ACoreOS)操作系统培训第六章异常中断与定时器
* 高精度时钟 对于高频率的查询,可采用高精度时钟 系统提供操作高精度时钟的服务 sysAuxClkConnect() 连接ISR到高精度时钟 sysAuxClkRateSet() 设置高精度时钟频率 sysAuxClkEnable() 启动高精度时钟 sysAuxClkDisable() 停止高精度时钟 一些目标板没有高精度时钟 * 综述 使用定时器进行查询 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 第六章异常、中断与定时器 异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器 * 提纲 异常处理概述 异常为CPU产生的正常执行流程外的事件。如,trap和断点指令、零除、浮点或整形溢出、非法指令或地址错等 异常将产生“内部”中断 操作系统在系统初始化阶段安装异常处理程序,这些程序在异常发生时被调用,并可调用用户定义的异常处理程序 异常处理程序通过发送信号与用户任务进行通信。 * 异常处理概述 异常与不同体系结构相关,本培训教程仅讨论异常的通用处理。不同体系结构相关处理,可参考硬件手册。 * 信号 * 信号 信号类似一种软中断 信号发送给指定任务,用于通知发生某种异步事件 任务在接收到指定信号后,执行相应的信号处理 信号处理完成后,正常任务执行被恢复(除非信号引起异常发生) * 信号 信号机制建议使用于通常的任务间通信 信号可能以非常高的优先级被处理,如信号到达时,任务正采用优先级继承或优先级天花板 打断任务正常执行流程(最好创建多个任务,而不采用在一个任务内通过信号实现多种操作) 可能引入重入的问题,当任务执行的信号处理程序与任务正常代码调用相同的接口时 任务通常采用信号量实现对临界区的互斥访问,假设任务在临界区访问时接收信号,如果信号处理中获取该互斥信号量,同样获取成功,但资源互斥访问可能被破坏 * 注册一个信号 注册一个信号处理程序 signal(signo ,handler) signo 信号类型 handler 信号处理程序 返回先前安装的信号处理程序,或者返回SIG_ERR * 异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器 * 提纲 中断 中断允许外部设备通知CPU特定事件发生 当发生外部中断时,用户安装的处理程序被执行 中断发生时占用中断时间,而不是任务执行时间 目标板定时器是常见中断源,可以辅助了解外部中断的工作原理 * 中断处理示例-PowerPC * 中断处理示例说明 PowerPC有单独的外部中断引脚。板级支持包(BSP)可以支持外部中断控制器实现中断嵌套。 中断表中中断入口数量取决于BSP中中断控制器的能力。目前中断向量表最多可支持256个。 外部中断的处理流程 保存CPU寄存器 从中断控制器中读取中断号 调用用户连接的中断处理程序(用户关心) 清中断控制器状态 恢复CPU寄存器并返回 * 中断和优先级 中断可以抢占最高优先级的任务 * 中断栈 系统使用独立中断栈 中断栈在系统初始化阶段分配 中断栈在生成操作系统时配置 系统支持中断嵌套,中断栈配置时应充分考虑嵌套时最大栈使用情况 * 中断服务执行限制 任务只有中断服务执行完成后才能执行 中断服务中限制使用操作系统机制,特别是中断不能够阻塞 不能够调用ACoreOs_semaphore_obtain()/semTake() 不能够调用malloc(内部使用信号量) 不能够调用I/O系统程序(如,printf()) 参考指南给出了每个函数能否在中断服务程序调用的限制说明 * 中断服务编制指南 尽可能保证中断服务程序简短 延迟低级别和同优先级的中断 延迟所有任务 调试困难 避免使用浮点操作 浮点操作速度较慢 用户必须自行保存和恢复浮点相关寄存器 尽可能将处理移交给任务处理 任务处理时间更长 时间要求更低 * 典型的中断服务 读和写存储器映射的I/O寄存器 与任务通信采用如下方式 写存储区 非阻塞形式写到消息队列 释放二进制信号量 * 中断服务调试 中断服务中采用logMsg()将信息输出到指定的控制台(仅使用于配置VxWorks兼容包情形) logMsg(“foo = %d\n”,foo,0,0,0,0,0); 发送请求给tLogTask执行printf()的功能 类似printf()功能,须注意如下事项: 参数必须是4个字节 格式外字符串和6个参数 采用系统级调试功能可以调试中断服务,任务级不可以调试中断服务程序 * 异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器 * 提纲 定时器 目标板的定时器周期性地中断CPU 定时器周期间隔到达时,可以执行用户连接处理
文档评论(0)