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

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

1,进入临界区;

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

3,退出临界区;

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

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

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

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

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

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

  1. 原子操作 临界区 关中断

    信号量 临界区 关中断 共享内存 什么是临界区 临界资源 1.临界资源 临界资源是一次仅允许一个进程使用的共享资源.各进程采取互斥的方式,实现共享的资源称作临界资源.属于临界资源的硬件有,打印机,磁带 ...

  2. 全局中断_实时性迷思(3)——80%时间屏蔽了中断,实时性还有救么?

    [写在前面的话] 在本系列的第一篇文章<实时性迷思(1)--快是优点么?>中,我们介绍了实时性的基本模型: 并得出两个重要的结论: 实时性只关注"是否能在实时性窗口内完成对应事件 ...

  3. 使用关指定中断解决资源冲突问题

    文章目录 1 使用关指定中断解决资源冲突问题 1 使用关指定中断解决资源冲突问题 代码如下: 要点说明: 仅用于任务与中断之间共享资源. 另外,我们还需要注意嵌套的问题: 参考资料: 手把手教你学用嵌 ...

  4. RT-Thread 入门学习笔记 - 熟悉全局中断的操作

    前言 在RT-Thread中,全局中断的操作很多,大家都知道全局中断的[disable]与[enable] 需要正确的理解全局中断的disable与enable. 如下,保证链表的正确操作,[中断保护 ...

  5. 能一次进临界区的时候,不要多次进入

    void func1{//加写锁//todo some thing//释放写锁 }void func2{//加写锁//todo some thing //释放写锁 }void func{func1() ...

  6. stm32的rxne和idle中断_STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

    历程详解 详解包括: 中断原理讲解 例程流程详解 库函数分析详解 对应寄存器介绍 对应函数介绍 对应注释详解 本篇文章提供两种方法: 一种是 :IDLE 接收空闲中断+DMA 一种是: IDLE 接收 ...

  7. 计算机处理数据几进制,计算机内部运行和处理的数据是几进制

    计算机内部运行和处理的数据是几进制 计算机内部运行和处理的数据是二进制.原因:1.计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用1和0表示:2.二进制中只使用 ...

  8. 基于51单片机的串口中断读头写尾法接收NMEA0183经纬度信息 1602显示(循环接收)

    51单片机 串口接收导航电文 设计方案 硬件构成 软件构成 测试情况 接收承载能力测试 传统接收方式测试 程序代码 传统程序中断部分代码 采用了读头写尾方法的程序 结论 传统的串口接收程序是采用设立中 ...

  9. java串口设备中断_利用DMA双缓冲或半完成中断实现串口不定长数据的接收

    在<HAL版本DMA循环模式串口数据收发>中介绍了利用DMA循环模式进行串口数据的收发,STM32F4xx的DMA还提供了双缓冲的功能,采用双缓冲模式,可以在一个DMA完成接收后,对其缓冲 ...

最新文章

  1. gcc/g++链接时.o文件及库的顺序问题
  2. 数据库几种连接方式的(左右union all)
  3. [BUUCTF-pwn]——[HarekazeCTF2019]baby_rop
  4. LVS DR模式搭建、keepalived+LVS
  5. 机器学习(九)——EM算法
  6. centos安装中文支持(转)
  7. JSP面试题都在这里 1
  8. php 万能密码,万能用户名和万能密码
  9. 电能终端服务器,抄表终端服务器设置教程
  10. 测试基础知识1 》》软件测试入门
  11. linux运维是做什么的
  12. 【题解】284E. Coin Troubles(dp+图论建模)
  13. nape.dynamics.InteractionFilter
  14. 项目:文件搜索助手(FileSeeker)
  15. 小学计算机社团活动总结,小学科技社团活动总结
  16. 【JUC高并发编程】—— 初见JUC
  17. 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现
  18. 【Educoder作业】冯·诺依曼体系结构及工作原理理解
  19. 干货 | Web前端优化及工具集锦
  20. 修复重新启动 Windows 时桌面图标布局未保存的问题

热门文章

  1. 认证模式之Basic模式
  2. [Codeforces 10E] Greedy Change
  3. BZOJ-1010 玩具装箱toy (斜率优化)
  4. 九度OJ 1019:简单计算器 (基础题、DP)
  5. doctype的种类
  6. 重要提醒--to 小爱
  7. android 点击图片事件,android图文混排点击事件
  8. 【STM32】FreeRTOS 中断配置和临界段
  9. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第5章-基于采样位置信息二阶多智能体系统的多一致
  10. PyTorch 实现经典模型6:RCNN (Fast RCNN, Faster RCNN)