自己动手从0到1学写RTOS学习指南

  1. 主页
  2. 自己动手从0到1学写RTOS学习指南
  3. 常见问题FAQ汇总
  4. 退出临界区后为什么直接进入 SysTick中断了?

退出临界区后为什么直接进入 SysTick中断了?

内容纲要

感谢同学 @gechangjian 的提问

Q:退出临界区后 为什么下一步会直接就进入 SysTick中断了? 按理说应该是在退出临界区后 执行下一步的代码 然后到了中断的时间10ms 才会中断的吧 但是我调试结果 一步一步走 发现 退出临界区后 瞬间就进入了中断 这是为什么?

A:中间有个for循环,里面时间较长,应该是在执行这中间的代码时候,产生了定时中断请求。不过由于进入临界区,中断被屏蔽了,所以中断暂时无法响应。等后面退出时,一开中断,系统就可以响应中断,进入sysTick。

注意,不管有没有响应中断。systick都是一直在计数的。它是一个自动减1的计数器,减到0后会自动加载最大的值,再继续减。那这样的话 会出现下面的情况:把中断开启后 此时去响应中断了 但是此时计数器的值不是从新开始递减计数的
很可能计数器的值已经 减到了一半 那么此时就不是标准的10ms 响应一次中断了

所以,临界区中的代码,应当尽可能的短小。如果你的应用中,需要保护的代码执行时间长,那么就得用信号量之类的保护机制。

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注