9121|3

849

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

RT_THREAD中的异常与中断 [复制链接]

 

异常是导致处理器脱离正常运行转向执行特殊代码的任何事件,如果系统不及时处理,系统轻则
出错,重着导致系统毁灭性的瘫痪。所以正确地处理异常避免错误的发生是提高软件的鲁棒性
要的一方面,对于嵌入式系统更加如此。

异常可以分成两类,同步异常和异步异常。同步异常主要是指由于内部事件产生的异常,例如除
零错误。异步异常主要是指由于外部异常源产生的异常,例如按下设备某个按钮产生的事件。
中断,通常也叫做外部中断,中断属于异步异常。当中断源产生中断时,处理器也将同样陷入到
一个固定位置去执行指令。

当中断产生时,处理机将按如下的顺序执行:
• 保存当前处理机状态信息
• 载入异常或中断处理函数到PC寄存器
• 把控制权转交给处理函数并开始执行
• 当处理函数执行完成时,恢复处理器状态信息
• 从异常或中断中返回到前一个程序执行点

中断使得CPU可以在事件发生时才予以处理,而不必让微处理器连续不断地查询是否有相应事件
发生。通过两条特殊指令:关中断和开中断可以让处理器不响应或响应中断。在执行中断服务例
程过程中,如果有更高优先级别的中断源触发中断,由于当前处于中断处理上下文环境中,根据
不同的处理器构架可能有不同的处理方式:新的中断等待挂起直到当前中断处理离开或打断当前
中断处理过程,让处理器相应这个更高优先级的中断源。后面这种情况,一般称之为中断嵌套。
在硬实时环境中,前一种情况是不允许发生的,关闭中断响应的时间应尽量的短。在软件处理上,
RT-Thread允许中断嵌套,即在一个中断服务例程期间,处理器可以响应另外一个更重要的中断。

当正在执行一个中断服务例程(中断1)时,有更高的中断触发,将保存当前中断服务例程的上下
文环境,转向中断2的中断服务例程。当所有中断服务例程都运行完成时,才又恢复上下文环境转
回到中断1的中断服务例程中接着执行。

RT-Thread提供独立的系统栈,即中断发生时,中断的前期处理程序会将用户的堆栈指针更换为系
统事先留出的空间中,等中断退出时再恢复用户的堆栈指针。这样中断将不再占任务的堆栈空间,
提高了内存空间的利用率,且随着任务的增加,这种技术的效果也越明显。

 

中断的底半处理
RT不会对ISR的处理的时间做出任何的限制,但是RT与其它的RTOS或者是非RTOS一样,有一个要求是ISR的处理时间要尽量的短。

这样在发生中断嵌套,或屏蔽了相应中断源的
过程中,不会耽误了嵌套的其它中断处理过程,或自己中断源的下一次中断信号。

当一个中断信号发生时,ISR需要取得相应的硬件状态或者数据,如果ISR接下来要对状态或者数
据进行简单处理,比如CPU时钟脉冲中断,ISR只需增加一个系统时钟tick,然后就结束ISR。这
类中断往往所需的运行时间都比较短。对于另外一些中断,ISR在取得硬件状态或数据以后,还
需要进行一系列更耗时的处理过程,通常需要将该中断分割为两部分,即上半部分(Top Half)
和下半部分(Bottom Half)。在Top Half中,取得硬件状态和数据后,打开被屏蔽的中断,给相
关的某个thread发送一条通知(可以是RT-Thread所提供的任意一种IPC方式),然后结束ISR。而
接下来,相关的thread在接收到通知后,接着对状态或数据进行进一步的处理,这一过程称之
为Bottom Half。

 

关于bottom half的例程实现,在数据手册上面已经存在。请需要的朋友到官网上下载。。。

 

 

 

最新回复

RTT的ISR屏蔽和轮片配置很精妙,0.4加入pthread之后,更是眼花缭乱了。   详情 回复 发表于 2011-11-28 12:12
点赞 关注
个人签名只有想不到,没有做不到。

回复
举报

273

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
受教了
 
 

回复

92

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
目前RT-Thread的文档资料的确是比较缺乏的,如果能在学习过程中将学习心得写下来,那无疑对后来者会有不少帮助.
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

4
 
RTT的ISR屏蔽和轮片配置很精妙,0.4加入pthread之后,更是眼花缭乱了。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表