进临界区(关全局中断)是否会影响数据的接收?

在嵌入式的编程中,经常会使用嵌入式实时操作系统,比如FreeRTOS,RTT等。

而在使用这些操作系统时,会有一个临界区的概念,一般操作是

1,进入临界区;

2,操作不能被线程打断的语句;

3,退出临界区;

而进入临界区的具体操作往往就是关掉系统的所有可以关闭的中断。这里有一个问题,如果有一个外设刚刚要产生一个中断请求时,这时候恰好进入了临界区,disable所有中断,那么这个外设的中断会不会被丢弃,是不是会有数据丢失了呢?

比如串口的FIFO中断,我们设置成RXFIFO收到5个字时产生接收中断,那么上述情况发生时是不是这5个字就丢掉呢?

这个问题我想了一会儿,开始不太明白,后来想到了一个关键点,我觉得这数据不会丢失。因为中断产后往往需要被清除,如果不清除中断产生标志位的话,系统会一直有这个中断到来。当上述RXFIFO中断将要产生时,系统刚刚关了全局中断,那好这个串口中断没有产生请求,但是也没被清除中断标志位;于是,等临界区退出后,它会继续产生这个中断请求,之后进入相应中断处理函数接收FIFO中的数据,并清除中断,这样一来数据就成功的被接收到了;

这个过程也提示了两个注意点,一是进临界区的时候要尽量短,否则系统可能会漏掉新来的数据;

再是这个FIFO设置的不能太满,好让系统在退出临界区之前还可以接收一定数量的外设进来的数据.

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值