搜索
bottom↓
回复: 23

记录一下:共享资源互斥的问题

[复制链接]

出0入8汤圆

发表于 2019-5-18 05:38:04 | 显示全部楼层 |阅读模式
        最近在调试程序,串口缓冲区 偶尔会有漏一字节的情况。最终确认下来是没有考虑变量的互斥。
即:在主循环中读数据的时候,应当把中断关闭,避免共享资源被中断改变。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入296汤圆

发表于 2019-5-19 06:52:02 来自手机 | 显示全部楼层
建议楼主看一看操作系统的基础知识,注意不是让你去学如何写操作系统,而是了解操作系统环境下的一些经典问题。比如,哲学家就餐问题,饿死是怎么回事,信号量怎么用,等等。重点是使用。

出0入25汤圆

发表于 2019-5-19 09:31:25 来自手机 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-19 06:52
建议楼主看一看操作系统的基础知识,注意不是让你去学如何写操作系统,而是了解操作系统环境下的一些经典问 ...

给个pdf 或者 给个网址。或者给个书名吧。正要学习这些

出0入0汤圆

发表于 2019-5-19 10:12:03 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-19 06:52
建议楼主看一看操作系统的基础知识,注意不是让你去学如何写操作系统,而是了解操作系统环境下的一些经典问 ...

Gorgon_Meducer 大哥有什么好的推荐书籍?

出0入0汤圆

发表于 2019-5-19 20:23:01 来自手机 | 显示全部楼层
大家有什么比较系统性的书吗?讲设计思维和模式的。谢谢。

出0入296汤圆

发表于 2019-5-19 20:37:27 来自手机 | 显示全部楼层
我大学的时候看的是影印版的《Operating System 》,前面几个章节用很浅显的语言介绍操作系统的很多基本概念。不知道现在有没有中文版。

出0入296汤圆

发表于 2019-5-19 20:38:06 来自手机 | 显示全部楼层
darkness27 发表于 2019-5-19 20:23
大家有什么比较系统性的书吗?讲设计思维和模式的。谢谢。

纯软件的设计思维和模式的话,看《设计模式之禅》

出200入657汤圆

发表于 2019-5-19 21:03:42 | 显示全部楼层
Gorgon_Meducer 大牛我觉得楼主的帖子非常有意义,虽然你推荐的资料非常经典,但是对于没有基础的人来讲根本就是天书太过于抽象,学习的投入产出比很低很低!!!
楼主讲的这个问题非常非常典型,这让我知道了为什么自己编写的包括协议的复杂的单片机程序的串口通信为什么会有万分之几的错误率。其实问题就在于,在主循环读取串口数据和其控制变量的过程中,依然有可能发生串口中断,而中断具有更好优先级,所以可能数据、控制变量读了一半被串口中断给中断了,串口中断会改变这些数据和变量,当中断退出后,主循环继续读这些数据和变量时,会出现获得的数据、变量可能一部分是中断之前的、一部分是中断之后的,破坏了数据和变量的完整性和一致性,导致后续程序出错。
解决的方案当然比较明显:设置这些数据和变量的主循环副本,为了尽量不影响中断相应,可以在需要读串口数据及其控制变量时,关掉中断,将数据和变量拷贝至副本,然后马上开启中断。中循环使用这些完整一致的副本数据。
“哲学家就餐问题,饿死是怎么回事,信号量怎么用”——这些问题其实偏向顶层的软件设计,比如我用C#的时候就考虑的很多,单片机下面基本很少使用,linux C用的一些,但是没有顶层软件用的多,我想大部分情况下就是这样子。

出20入25汤圆

发表于 2019-5-19 22:38:00 | 显示全部楼层
ziruo2002ab 发表于 2019-5-19 21:03
Gorgon_Meducer 大牛我觉得楼主的帖子非常有意义,虽然你推荐的资料非常经典,但是对于没有基础的人来讲根 ...

那就是你的问题了,如果使用FIFO这样,处理好原子操作,是可以解决你说的这个问题的

出95入100汤圆

发表于 2019-5-19 23:05:55 | 显示全部楼层
周航慈的书有讲,是数据的生产和消费问题

出0入14汤圆

发表于 2019-5-20 09:44:28 | 显示全部楼层
串口数据我一般是开缓存,然后再处理

出0入0汤圆

发表于 2019-5-20 11:08:09 | 显示全部楼层
串口我也是开个循环缓冲,主循环定时去查询缓冲是否为空,两次查询之间的时间要保证缓冲区不会爆掉,省的处理缓冲溢出问题

出0入8汤圆

 楼主| 发表于 2019-5-20 11:27:33 来自手机 | 显示全部楼层
ziruo2002ab 发表于 2019-5-19 21:03
Gorgon_Meducer 大牛我觉得楼主的帖子非常有意义,虽然你推荐的资料非常经典,但是对于没有基础的人来讲根 ...

10楼有书

出40入42汤圆

发表于 2019-5-20 11:39:17 | 显示全部楼层
这个问题在论坛里面看过不下5次了

出0入296汤圆

发表于 2019-5-20 17:00:04 | 显示全部楼层
其实问题已经很明显了……大家要么是没时间去阅读经典理论,要么是根本不重视。
这就难怪很多人还是重复发明轮子了……不读这些经典理论,实际上是自己给自己加了技术上限。

如果这只是个人问题,我想想也就算了。但考虑到人数众多,结合当下的背景,说要技术中国,如果不从自己点滴做起,只考虑
能用就行或者不求甚解,或者浪费宝贵的时间每次都自己探索而不是认真学习前人的方法论和理论分析,“技术中国”真的是一句
空谈。

氛围就是靠每个人的点滴行为汇聚而成的。美国人当然希望你中国人都不求甚解,会用就行了……呵呵

出200入657汤圆

发表于 2019-5-20 17:31:14 | 显示全部楼层
不是光读书那么简单的,书要是能解决所有问题的话,那大家读大学干嘛?每个人都拼死拼活靠清华北大气是不是都是傻X,买一屋子的书不就得了。
书只有需要的时候再看在研究,没用到那个层次读那个书干嘛?浪费时间浪费生命。有些人可能在大企业做专家级人物,研究的很专很精,更多的人只是为了解决产品设计的工程上的问题而已,也许这个问题占不到产品设计考虑的1%不是重点,花几个月把书都读完花儿都谢了。按照深入研究这个理论,那么可以继续去研究编译原理啊,研究cpu的指令集设计啊,没有这些东西还不是在别人建好的台子上表演。况且书与工程经历应该结合起来,没有工程经历的书根本就是一堆抽象的指令,无法深入理解,这就是为什么会有论坛,大家把工程问题经理和考虑分享出来一起分析,这个比纯粹的啃书本在某些层面上高效的多实用的多。

出0入4汤圆

发表于 2019-5-20 21:31:08 | 显示全部楼层
傻孩子讲的就是思路或是思想,有了这个概念然后再具体化才是解决方案。编程序为什么要学高数、离散数学、数据结构、软件工程,不是直接解决问题,而是要有解决问题的思路和方向

出0入8汤圆

 楼主| 发表于 2019-5-20 22:11:48 来自手机 | 显示全部楼层
ziruo2002ab 发表于 2019-5-20 17:31
不是光读书那么简单的,书要是能解决所有问题的话,那大家读大学干嘛?每个人都拼死拼活靠清华北大气是不是 ...

好,我决定抽空阅读经典。

出0入0汤圆

发表于 2019-5-23 21:08:09 | 显示全部楼层
12tangyang12 发表于 2019-5-20 22:11
好,我决定抽空阅读经典。

需要结合实际才看的快

出0入296汤圆

发表于 2019-5-24 18:19:00 | 显示全部楼层
ziruo2002ab 发表于 2019-5-20 17:31
不是光读书那么简单的,书要是能解决所有问题的话,那大家读大学干嘛?每个人都拼死拼活靠清华北大气是不是 ...

很遗憾的是,至少这个帖子里面探讨的操作系统的问题,很基础,很第一线……不是什么高大上的东西。

出200入657汤圆

发表于 2019-5-24 19:06:36 | 显示全部楼层
Gorgon_Meducer 发表于 2019-5-24 18:19
很遗憾的是,至少这个帖子里面探讨的操作系统的问题,很基础,很第一线……不是什么高大上的东西。 ...

第一线接地气嘛,并不是所有的时候都要用到那么高深的东西。
大师的你的  《玩转嵌入式多任务程序设计》 好像 找不到完整版的?

出0入296汤圆

发表于 2019-5-24 20:15:51 | 显示全部楼层
ziruo2002ab 发表于 2019-5-24 19:06
第一线接地气嘛,并不是所有的时候都要用到那么高深的东西。
大师的你的  《玩转嵌入式多任务程序设计》  ...


真的不高深……也不是让你读所有内容,往往就开头几个章节内容就够了……就好比数据结构,学到基本的线性表+栈和队列也就够了……

书还没写完。

出0入0汤圆

发表于 2019-5-24 23:40:48 | 显示全部楼层
本帖最后由 RAMILE 于 2019-5-24 23:43 编辑

遇到学习曲线有点陡的情况,爬上去就不觉得陡了

我啃了一点linux后,就是这个感觉

出0入0汤圆

发表于 2019-5-26 10:52:23 来自手机 | 显示全部楼层
简单问题复杂化,就是一个串口接收的问题,裸奔搞个环形buf足够,使用rtos就处理好中断的队列操作。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 15:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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