天脉(ACoreOS)操作系统培训第六章:异常、中断与定时器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
避免使用浮点操作
浮点操作速度较慢 用户必须自行保存和恢复浮点相关寄存器
尽可能将处理移交给任务处理
任务处理时间更长 16 时间要求更低
典型的中断服务
读和写存储器映射的I/O寄存器 与任务通信采用如下方式
写存储区 非阻塞形式写到消息队列 释放二进制信号量
17
中断服务调试
中断服务中采用logMsg()将信息输出到指定的控 制台(仅使用于配置VxWorks兼容包情形)
19
定时器
目标板的定时器周期性地中断CPU 定时器周期间隔到达时,可以执行用户连接处理
程序,可用于:
查询硬件状态 检查系统错误 避免不准确操作
操作系统提供通用的接口操作两个定时器
系统时钟 高精度时钟(如果可用)
如果目标板有其他的定时器,可以编写额外驱动
20
系统时钟
系统时钟中断服务为系统时钟脉冲,周期到达
不能够阻塞
不能够调用ACoreOs_semaphore_obtain()/semTake() 不能够调用malloc(内部使用信号量) 不能够调用I/O系统程序(如,printf())
参考指南给出了每个函数能否在中断服务程序 调用的限制说明
15
中断服务编制指南
尽可能保证中断服务程序简短
延迟低级别和同优先级的中断 延迟所有任务 调试困难
中断的工作原理
10
中断处理示例-PowerPC
11
中断处理示例说明
PowerPC有单独的外部中断引脚。板级支持包 (BSP)可以支持外部中断控制器实现中断嵌套。
中断表中中断入口数量取决于BSP中中断控制器的 能力。目前中断向量表最多可支持256个。
外部中断的处理流程
保存CPU寄存器 从中断控制器中读取中断号 调用用户连接的中断处理程序(用户关心) 清中断控制器状态 12 恢复CPU寄存器并返回
6
信号
信号机制建议使用于通常的任务间通信
信号可能以非常高的优先级被处理,如信号到达时, 任务正采用优先级继承或优先级天花板
打断任务正常执行流程(最好创建多个任务,而不采 用在一个任务内通过信号实现多种操作)
可能引入重入的问题,当任务执行的信号处理程序与 任务正常代码调用相同的接口时
任务通常采用信号量实现对临界区的互斥访问,假设 任务在临界区访问时接收信号,如果信号处理中获取 该互斥信号量,同样获取成功,但资源互斥访问可能 被破坏
7wk.baidu.com
注册一个信号
注册一个信号处理程序
signal(signo ,handler) signo 信号类型 handler 信号处理程序 返回先前安装的信号处理程序,或者返回SIG_ERR
8
提纲
异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器
9
中断
中断允许外部设备通知CPU特定事件发生 当发生外部中断时,用户安装的处理程序被执行 中断发生时占用中断时间,而不是任务执行时间 目标板定时器是常见中断源,可以辅助了解外部
第六章 异常、中断与定时器
提纲
异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器
2
异常处理概述
异常为CPU产生的正常执行流程外的事件。如,
trap和断点指令、零除、浮点或整形溢出、非法 指令或地址错等 异常将产生“内部”中断 操作系统在系统初始化阶段安装异常处理程序, 这些程序在异常发生时被调用,并可调用用户定 义的异常处理程序 异常处理程序通过发送信号与用户任务进行通信。
系统时钟的用户接口 在指定时间延时后执行C程序 在时间延时到达时,连接的程序执行
作为系统时钟ISR的一部分
满足中断服务的限制
22
看门狗定时器
以VxWorks兼容包提供看门定时器为例
创建看门狗定时器
WDOG_ID wdCreate (void) 创建成功返回看门狗ID,失败返回NULL。
启动(或)重启动看门定时器
STATUS wdStart (WDOG_ID wdId, int delay,
FUNCPTR pRoutine,int parameter )
wdId 看门狗ID,由创建wdCreate返回
delay 延时的tick值
pRoutine 延时时间到时调用程序
23 parameter
传递给调用程序的参数
看门狗定时器
wdStart()当指定延时时间达到时,可以执行一次 看门狗服务。为了周期执行,看门狗服务必须自 身调用wdStart()进行重启动
只有最近调用wdStart()启动的看门狗才能运行, 为了运行多个看门狗服务程序,必须使用多个看 门狗定时器
24
如何使用看门狗
使用看门狗周期执行
logMsg(“foo = %d\n”,foo,0,0,0,0,0);
发送请求给tLogTask执行printf()的功能 类似printf()功能,须注意如下事项:
参数必须是4个字节 格式外字符串和6个参数
采用系统级调试功能可以调试中断服务,任务 级不可以调试中断服务程序
18
提纲
异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器
3
异常处理概述
异常与不同体系结构相关,本培训教程仅讨论异
常的通用处理。不同体系结构相关处理,可参考 硬件手册。
4
信号
5
信号
信号类似一种软中断
信号发送给指定任务,用于通知发生某种异步事 件
任务在接收到指定信号后,执行相应的信号处理 信号处理完成后,正常任务执行被恢复(除非信
号引起异常发生)
中断和优先级
中断可以抢占最高优先级的任务
13
中断栈
系统使用独立中断栈 中断栈在系统初始化阶段分配 中断栈在生成操作系统时配置 系统支持中断嵌套,中断栈配置时应充分考虑嵌
套时最大栈使用情况
14
中断服务执行限制
任务只有中断服务执行完成后才能执行 中断服务中限制使用操作系统机制,特别是中断
增加tick计数 更新延迟和超时 检查时间片轮转调度
系统时钟到达时,可能引起系统重调度 系统时钟的频率可以配置,根据用况配置
sysClkRateSet() 设置时钟频率 int sysClkRateGet() 返回时钟频率
sysClkRateSet()不仅仅在系统初始化阶段调用
21
看门狗定时器
浮点操作速度较慢 用户必须自行保存和恢复浮点相关寄存器
尽可能将处理移交给任务处理
任务处理时间更长 16 时间要求更低
典型的中断服务
读和写存储器映射的I/O寄存器 与任务通信采用如下方式
写存储区 非阻塞形式写到消息队列 释放二进制信号量
17
中断服务调试
中断服务中采用logMsg()将信息输出到指定的控 制台(仅使用于配置VxWorks兼容包情形)
19
定时器
目标板的定时器周期性地中断CPU 定时器周期间隔到达时,可以执行用户连接处理
程序,可用于:
查询硬件状态 检查系统错误 避免不准确操作
操作系统提供通用的接口操作两个定时器
系统时钟 高精度时钟(如果可用)
如果目标板有其他的定时器,可以编写额外驱动
20
系统时钟
系统时钟中断服务为系统时钟脉冲,周期到达
不能够阻塞
不能够调用ACoreOs_semaphore_obtain()/semTake() 不能够调用malloc(内部使用信号量) 不能够调用I/O系统程序(如,printf())
参考指南给出了每个函数能否在中断服务程序 调用的限制说明
15
中断服务编制指南
尽可能保证中断服务程序简短
延迟低级别和同优先级的中断 延迟所有任务 调试困难
中断的工作原理
10
中断处理示例-PowerPC
11
中断处理示例说明
PowerPC有单独的外部中断引脚。板级支持包 (BSP)可以支持外部中断控制器实现中断嵌套。
中断表中中断入口数量取决于BSP中中断控制器的 能力。目前中断向量表最多可支持256个。
外部中断的处理流程
保存CPU寄存器 从中断控制器中读取中断号 调用用户连接的中断处理程序(用户关心) 清中断控制器状态 12 恢复CPU寄存器并返回
6
信号
信号机制建议使用于通常的任务间通信
信号可能以非常高的优先级被处理,如信号到达时, 任务正采用优先级继承或优先级天花板
打断任务正常执行流程(最好创建多个任务,而不采 用在一个任务内通过信号实现多种操作)
可能引入重入的问题,当任务执行的信号处理程序与 任务正常代码调用相同的接口时
任务通常采用信号量实现对临界区的互斥访问,假设 任务在临界区访问时接收信号,如果信号处理中获取 该互斥信号量,同样获取成功,但资源互斥访问可能 被破坏
7wk.baidu.com
注册一个信号
注册一个信号处理程序
signal(signo ,handler) signo 信号类型 handler 信号处理程序 返回先前安装的信号处理程序,或者返回SIG_ERR
8
提纲
异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器
9
中断
中断允许外部设备通知CPU特定事件发生 当发生外部中断时,用户安装的处理程序被执行 中断发生时占用中断时间,而不是任务执行时间 目标板定时器是常见中断源,可以辅助了解外部
第六章 异常、中断与定时器
提纲
异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器
2
异常处理概述
异常为CPU产生的正常执行流程外的事件。如,
trap和断点指令、零除、浮点或整形溢出、非法 指令或地址错等 异常将产生“内部”中断 操作系统在系统初始化阶段安装异常处理程序, 这些程序在异常发生时被调用,并可调用用户定 义的异常处理程序 异常处理程序通过发送信号与用户任务进行通信。
系统时钟的用户接口 在指定时间延时后执行C程序 在时间延时到达时,连接的程序执行
作为系统时钟ISR的一部分
满足中断服务的限制
22
看门狗定时器
以VxWorks兼容包提供看门定时器为例
创建看门狗定时器
WDOG_ID wdCreate (void) 创建成功返回看门狗ID,失败返回NULL。
启动(或)重启动看门定时器
STATUS wdStart (WDOG_ID wdId, int delay,
FUNCPTR pRoutine,int parameter )
wdId 看门狗ID,由创建wdCreate返回
delay 延时的tick值
pRoutine 延时时间到时调用程序
23 parameter
传递给调用程序的参数
看门狗定时器
wdStart()当指定延时时间达到时,可以执行一次 看门狗服务。为了周期执行,看门狗服务必须自 身调用wdStart()进行重启动
只有最近调用wdStart()启动的看门狗才能运行, 为了运行多个看门狗服务程序,必须使用多个看 门狗定时器
24
如何使用看门狗
使用看门狗周期执行
logMsg(“foo = %d\n”,foo,0,0,0,0,0);
发送请求给tLogTask执行printf()的功能 类似printf()功能,须注意如下事项:
参数必须是4个字节 格式外字符串和6个参数
采用系统级调试功能可以调试中断服务,任务 级不可以调试中断服务程序
18
提纲
异常处理与信号机制 中断服务程序 系统时钟、高精度时钟、看门狗定时器
3
异常处理概述
异常与不同体系结构相关,本培训教程仅讨论异
常的通用处理。不同体系结构相关处理,可参考 硬件手册。
4
信号
5
信号
信号类似一种软中断
信号发送给指定任务,用于通知发生某种异步事 件
任务在接收到指定信号后,执行相应的信号处理 信号处理完成后,正常任务执行被恢复(除非信
号引起异常发生)
中断和优先级
中断可以抢占最高优先级的任务
13
中断栈
系统使用独立中断栈 中断栈在系统初始化阶段分配 中断栈在生成操作系统时配置 系统支持中断嵌套,中断栈配置时应充分考虑嵌
套时最大栈使用情况
14
中断服务执行限制
任务只有中断服务执行完成后才能执行 中断服务中限制使用操作系统机制,特别是中断
增加tick计数 更新延迟和超时 检查时间片轮转调度
系统时钟到达时,可能引起系统重调度 系统时钟的频率可以配置,根据用况配置
sysClkRateSet() 设置时钟频率 int sysClkRateGet() 返回时钟频率
sysClkRateSet()不仅仅在系统初始化阶段调用
21
看门狗定时器