记录.中断如何影响造成代码的运行异常

一、问题:

        有一个输入源、有一段对输入源做判断的代码,有一个输出。输入源为io的高低电平,基于该高低电平,当变化则进入中断,随后唤醒rtos的任务去执行,控制输出。代码执行,输出概率出现什么输出都没有。

二、溯源:

        输入源不稳定,在快速的时间多次发生io的变化,rtos的任务还没执行完毕就被打断,随后恢复的代码运行却根据新改变的输入去执行。导致概率性出现问题。

三、解决:

        中断判定后写入变量,并给这个变量加锁。

四、思考:

        看似无懈可击的代码,在不确定的输入时有完全难以预测的结果,通常这种问题发生在当前正在执行中或随后被唤醒的代码段与中断有耦合时,代码的运行就变得无法掌握。而不与之发生耦合的接下来唤醒或正在执行的代码段则不会有这种问题。这种耦合对代码破坏很大,比如在串口数据发送时中断打断、需要根据中断结果来响应输出时中断的快速连续进入。这种情况可以通过对资源进行加锁来改善,但是这只对第二个例子:“需要根据中断结果来响应输出时”有用,串口执行被中断打断是无法恢复的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值