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

2018-09-11 05:38:32 +0000 李述铜

感谢同学 @gechangjian 的提问

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

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

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

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

rtos 无标签

推荐课程

  • 自己动手写嵌入式操作系统

    循序渐进,40余次迭代,写出不到2000行代码的嵌入式操作系统

  • 手把手教你学用嵌入式操作系统

    从实用角度出发,教你如何使用嵌入式操作系统

  • 深入理解ARM调试原理

    深入理解Jlink/Ulink等仿真调试工具背后工作的秘密

  • 轻松掌握Git & GitHub

    掌握当今最流行的版本管理工具,帮你找回过去任意时间的文件版本

  • 自己动手学用Keil(MDK)

    轻松掌握最主流的ARM开发工具Keil(MDK)