硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4915|回复: 2
收起左侧

[有问必答] 串口FIFO中的临界区操作是否有必要

[复制链接]

38

主题

82

回帖

196

积分

初级会员

积分
196
发表于 2016-3-27 01:55:56 | 显示全部楼层 |阅读模式
    DISABLE_INT();
    usCount = _pUart->usRxCount;
    ENABLE_INT();
1. 我觉得没必要, 接收中断函数里面可能会修改usCount没错, 但一旦真的进入了那个函数(irq在DISABLE_INT之前刚发生), 就会跟普通函数一样执行完, 关不关中断没有作用.
2. 另外, 我们只是读一下usCount, 并不存在同时写usCount的情况, 所以还是觉得没必要.
2. 即使有必要, 可以只写成只关闭这个串口管道的中断吧, 全局中断都关了会不会影响到其他功能呢, 例如定时或者其他的接收中断.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2016-3-27 10:36:56 | 显示全部楼层
感谢楼主分享自己的看法。
这里其实改成定义usRxCount时,前面加上volatile 即可。在多线程或者前后台系统,即裸机时一个任务是写,其余都是读的话,加上volatile 就行。
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2016-3-27 20:14:24 | 显示全部楼层

回 eric2013 的帖子

eric2013:感谢楼主分享自己的看法。
这里其实改成定义usRxCount时,前面加上volatile 即可。在多线程或者前后台系统,即裸机时一个任务是写,其余都是读的话,加上volatile 就行。 (2016-03-27 10:36) 
对的  多读一写用volatil就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 21:12 , Processed in 0.173725 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表