关于锁的问题---cpu对同一硬件接口寄存器访问

nadleeh 2014-05-06 11:13:39
很多人可能都遇到过这样的情景:
1个设备,有一个按键,一个灯,一个外部io口,他们都是接到同一gpio组的不同位上的。
然后按键处于中断模式,可能随时被按下,需要cpu需要清除gpio的对应位。
灯一直按照遇到的频率闪烁,一般不会被改变。
外部io接口会在特定的情况切换gpio对应位的io模式。
3个线程独立控制3个设备。

好吧,问题来了,他们都属于同一组gpio,也就是说对cpu来说,3个设备在io空间内部这3个设备都是在同一个io空间,也就是说属于共享资源,但是属于该io空间的不同位上。每次操作都是各设各的位,互不影响。 这种情况下,多核cpu是否需要加锁,单核cpu是否需要禁抢占?
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵狗 2014-05-07
  • 打赏
  • 举报
回复
这相当于是一个原子操作,加锁或者是进入临界区,操作完成后,再解锁或者是退出临界区。
引用 楼主 nadleeh123 的回复:
很多人可能都遇到过这样的情景: 1个设备,有一个按键,一个灯,一个外部io口,他们都是接到同一gpio组的不同位上的。 然后按键处于中断模式,可能随时被按下,需要cpu需要清除gpio的对应位。 灯一直按照遇到的频率闪烁,一般不会被改变。 外部io接口会在特定的情况切换gpio对应位的io模式。 3个线程独立控制3个设备。 好吧,问题来了,他们都属于同一组gpio,也就是说对cpu来说,3个设备在io空间内部这3个设备都是在同一个io空间,也就是说属于共享资源,但是属于该io空间的不同位上。每次操作都是各设各的位,互不影响。 这种情况下,多核cpu是否需要加锁,单核cpu是否需要禁抢占?
shlvshe00 2014-05-07
  • 打赏
  • 举报
回复
nadleeh 2014-05-07
  • 打赏
  • 举报
回复
哦靠,难道赵老师要独吞200分了 来人啊!!!!!!!!
赵4老师 2014-05-06
  • 打赏
  • 举报
回复
要加锁或临时关闭中断

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧