搜索
bottom↓
回复: 18

msp430修改IO的问题

[复制链接]

出0入0汤圆

发表于 2013-5-18 08:30:45 来自手机 | 显示全部楼层 |阅读模式
用的msp430,它不像stm的芯片那样有BRR寄存器,因此修改单个IO只能P1OUT &= ~BIT1。问题来了,如果主程序在读出端口的数值的时候,中断发生了,并且也修改该端口的另一个IO,那么回到主程序岂不又改回来了?
针对这类问题,除了关中断,还有办法吗?

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

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

出0入0汤圆

 楼主| 发表于 2013-5-18 10:59:06 来自手机 | 显示全部楼层
顶一下,大家看看

出0入0汤圆

发表于 2013-5-18 08:30:46 | 显示全部楼层
如果你的主程序和中断都有对同一个IO的读写,那就说明这个IO是互斥资源,按道理就应该使用互斥访问。这和访问一个变量没任何区别。而防止中断和主程序同时访问一个互斥资源的唯一方法就是关中断。

出0入85汤圆

发表于 2013-5-18 20:29:58 | 显示全部楼层
可以看看操作系统的书,例如UCOS,这个属于临界资源的访问,在操作系统中使用关中断或信号量解决

出0入0汤圆

 楼主| 发表于 2013-5-18 20:45:47 来自手机 | 显示全部楼层
关键是我没有用操作系统,而且在主函数里频繁用到那个端口,液晶显示,所以关中断影响太大

出0入0汤圆

 楼主| 发表于 2013-5-19 00:05:14 来自手机 | 显示全部楼层
MSP430有给变量单独置位清零的指令,所以,改变某个端口操作是原子的,不存在覆盖的问题了

出0入0汤圆

发表于 2013-5-19 00:45:22 | 显示全部楼层
不明白你这个岂不是又改回来了 的意思?

P1OUT &= ~BIT1

只影响P1.1啊  在中断改了P1.2 关P1.1什么事???


出0入4汤圆

发表于 2013-5-19 02:43:46 | 显示全部楼层
我在中断中只要不操作这个IO口,中断回来继续操作,不会影响结果的。
但是中断一般会时间很短,不会影响的呀。。。

出0入0汤圆

发表于 2013-5-19 08:10:10 | 显示全部楼层
marshallemon 发表于 2013-5-18 20:29
可以看看操作系统的书,例如UCOS,这个属于临界资源的访问,在操作系统中使用关中断或信号量解决 ...

他这个是中断抢占,信号量锁不住啊。

出0入0汤圆

 楼主| 发表于 2013-5-19 08:54:35 来自手机 | 显示全部楼层
laujc 发表于 2013-5-19 02:43
我在中断中只要不操作这个IO口,中断回来继续操作,不会影响结果的。
但是中断一般会时间很短,不会影响的 ...

不行的,我要求实时性非常高,回来后要到什么时候才操作那个端口都不知道

出0入0汤圆

 楼主| 发表于 2013-5-19 08:56:28 来自手机 | 显示全部楼层
信号量肯定锁不住,中断里不可能等待,也不可能跳过

出0入85汤圆

发表于 2013-5-19 09:36:50 | 显示全部楼层
jetlib 发表于 2013-5-19 08:10
他这个是中断抢占,信号量锁不住啊。

晕,所谓的信号量只是一个占用的标志,在操作系统中对付多任务共同访问的资源,其实前后台程序也可以认为是2个任务,对付中断一样有效的,设置一个标志位,访问资源前先判断此标志位,如果被占用则不访问此临界资源,如果没被占用,则设置此标志,使用完临界资源就清除此标志位。后台中也是一样,后台中如果觉得不保险,则在设置此标志时关中断,设置完成后开中断,这样开关中断的时间比较短,影响并不大

出0入85汤圆

发表于 2013-5-19 09:37:22 | 显示全部楼层
晕,所谓的信号量只是一个占用的标志,在操作系统中对付多任务共同访问的资源,其实前后台程序也可以认为是2个任务,对付中断一样有效的,设置一个标志位,访问资源前先判断此标志位,如果被占用则不访问此临界资源,如果没被占用,则设置此标志,使用完临界资源就清除此标志位。后台中也是一样,后台中如果觉得不保险,则在设置此标志时关中断,设置完成后开中断,这样开关中断的时间比较短,影响并不大

出0入0汤圆

 楼主| 发表于 2013-5-19 09:55:47 来自手机 | 显示全部楼层
楼上,中断不可能打断主函数,这是肯定的。所以只需在中断里查询信号量,假如发现被占用,怎么办?等待,那是不可能,不退出中断进不了主函数释放信号量,忽略,那就和没加信号量一回事了。

出0入4汤圆

发表于 2013-5-19 10:26:15 | 显示全部楼层
gold 发表于 2013-5-19 08:54
不行的,我要求实时性非常高,回来后要到什么时候才操作那个端口都不知道 ...

这种操作,看下汇编,可能P1OUT &= ~BIT1编译成了 P1OUT.1= 0了就不会出现这个问题了。。。

出0入0汤圆

 楼主| 发表于 2013-5-19 10:38:39 来自手机 | 显示全部楼层
laujc 发表于 2013-5-19 10:26
这种操作,看下汇编,可能P1OUT &= ~BIT1编译成了 P1OUT.1= 0了就不会出现这个问题了。。。
...

没错,汇编过后是AND.B 0x01 &P1OUT
一条指令搞定了,所以不会出问题了

出0入4汤圆

发表于 2013-5-20 10:48:19 | 显示全部楼层
gold 发表于 2013-5-19 10:38
没错,汇编过后是AND.B 0x01 &P1OUT
一条指令搞定了,所以不会出问题了


                                                                                       

出0入0汤圆

发表于 2013-5-23 18:21:20 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2013-5-29 07:35:33 | 显示全部楼层
个人认为,这个问题貌似是个问题,其实是个伪问题,和有没有BRR、BSRR毫无关系,真正的原因是资源访问调度方法问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-22 16:04

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

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