搜索
bottom↓
回复: 7

关于中断服务函数中使用临界资源的思考,恳请指教

[复制链接]

出0入0汤圆

发表于 2017-8-24 14:38:47 | 显示全部楼层 |阅读模式
最近阅读了公司同事的代码,代码片段如下:

代码环境:裸机编程 stm32f103zet6 MDK5(ARMCC编译器)

代码内容:MENU_t是其中的核心结构体,Menu_t类型SysMenu1和SysMenu2是全局变量。

  1. void TIM6_IRQHandler(void)
  2. {
  3.         if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
  4.         {
  5.                 TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
  6.                 MenuProcess(&SysMenu1); /* 因为SysMenu1和SysMenu2的处理过程类似,所以将全局变量的指针作为形参带入函数中,而没有直接在函数内部使用全局变量 */
  7.         }
  8. }
复制代码


代码思考:

问题1:在ISR中调用MenuProcess(&SysMenu)一定会产生临界资源问题吗?

问题2:MenuProcess():是不可重入函数(按照我之前的理解,在函数内部使用全部变量是不可重入函数,那函数的实参是全局变量或者全局变量指针该怎么办?)?

问题3:我理解:所谓的临界资源,是担心数据在另外一个线程被“意外的”修改(ISR算是另外一个线程)。如果在MenuProcess(&SysMenu)中只是查看(&SysMenu)的一个成员变量,而没有进行任何赋值操作,那还会产生临界资源问题嘛(此时仅仅只有一个线程可以执行读/写操作)?

恳请大神指教,感谢。。。

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

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

出0入0汤圆

发表于 2017-8-24 14:45:44 | 显示全部楼层
原子操作没问题,但是很多是需要读->修改->写的,这就需要特殊处理了。

出0入0汤圆

发表于 2017-8-24 14:45:54 | 显示全部楼层
MenuProcess中如果加入全局中断 关 开 动作,应该不存在临界资源问题。无论读写,只要是可重入,就有可能会有错误结果产出。

出0入0汤圆

发表于 2017-8-24 15:29:58 | 显示全部楼层
能把这个问题解决得好,是成为高手的基础。
我对这个问题的解决思路是绕开它。
1,更换更高档的MCU。
2,不开中断,用查询法。

出40入42汤圆

发表于 2017-8-24 16:23:52 | 显示全部楼层
说一下个人理解,有误请指出:
答1:不一定。
如果调用MenuProcess(&SysMenu)的地方只有ISR,则不产生资源操作冲突问题;如果在大循环中有调用MenuProcess(&SysMenu),ISR也调用MenuProcess(&SysMenu),则操作不当会导致数据错乱。
话说,菜单处理就不要在ISR里整了,这样的设计不合理。

答2:可重入函数基本就是函数内没有使用全局或静态的变量。
如果入参是全局变量指针,并不影响该函数的可重入性,只是这样调用可能会产生资源操作冲突问题,属于调用不当。

答3:不会。
资源冲突一般都是多线程同时“操作”临界资源,“获取”一般不影响。原子操作会保证数据的完整性。

出0入0汤圆

 楼主| 发表于 2017-8-24 16:38:57 | 显示全部楼层
落叶知秋 发表于 2017-8-24 16:23
说一下个人理解,有误请指出:
答1:不一定。
如果调用MenuProcess(&SysMenu)的地方只有ISR,则不产生资源 ...

回答的真好,此处应该有掌声。。。

出0入0汤圆

发表于 2017-8-24 17:42:26 | 显示全部楼层
具体问题具体分析,看不到函数内部,不好下结论吧。用全局变量也不一定不可重入啊。

出0入89汤圆

发表于 2017-8-24 19:15:17 来自手机 | 显示全部楼层
原则是锁变量,不要锁函数!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 17:29

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

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