【灌水】硬件编程时中断优先级注意。
okingkoom2013/06/17软件综合 IP:美国
上个礼拜在用microchip编程,因为没有注意中断的优先级别,导致浪费1天的时间来分析定位,在此提示备注下。
背景条件:1,一个子程序使用 输入捕捉 功能 来计算频率,中断优先级是使用默认的最低优先级。用Timer2来做时钟源,Timer2中断关闭。当有输入时,将产生一个中断,该中断将读取Timer2的时刻,并计时。
2,另外要求是每秒钟调用一次频率计算子程序;由于单个Timer的计时长度只有16位,于是合并两个Timer4,Timer5来做计时。当Timer5每次溢出时,Timer4计数+1。Timer5的中断优先级较高,是5级,Timer4的优先级同样默认垫底。
出现的问题:由于编程的时候没有留意中断优先级问题,导致以下问题: 在每秒的计时周期里,Timer4+Timer5有中断产生,并开始调用 输入捕捉 子程序;但是输入捕捉子程序始终不能获得中断响应,程序挂死。

原因分析:Timer4+Timer5的整体中断优先级等同于 输入捕捉 的中断优先级;在Timer4+Timer5中调用子程序,则子程序不结束,Timer4+Timer5中断不能结束退出;该Timer4+Timer5中断的优先级不低于 输入捕获 子程序所必须的中断优先级,导致 输入捕获 不能产生中断,输入捕获挂死,整体程序挂死。

解决方法:在Timer4+Timer5的中断中设置一个定时到期的标志,通过主程序无限循环查询该标志位来判断是否到时间,以调用 输入捕捉 子程序,结果达到预期目标。
当然,还可以调整中断优先级,让Timer5的中断优先级不变;增加 输入捕捉 中断的优先级,使之高于Timer5),这样在运行Timer4的中断的过程中,可以响应 输入捕捉 的中断,从而达到预期目的。
来自:计算机科学 / 软件综合
0
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
okingkoom
学者 笔友
文章
23
回复
1462
学术分
1
2010/02/22注册,2年2个月前活动

家穷,人丑,爱喝小酒;

主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}