OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6836|回复: 9

这个IIC 算是 临界资源吧???、

[复制链接]

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
发表于 2017-5-23 09:54:57 | 显示全部楼层 |阅读模式
1金钱

最佳答案

查看完整内容[请看2#楼]

我们可以这样理解 每一个任务都是一个"CPU". 内核/操作系统本身是一个"CPU" 如果这个资源只会在一个"CPU"中运行. 因为它的IIC我让他确认了,不会在中断中调用,所以只会被一个CPU调用,自然就不会有临界资源问题 你的就不一样,有2个"CPU",并且2个"CPU"都有可能在同一时刻使用这个资源,当然是临界资源. 这里有2个条件 1>多个CPU都需要访问/修改这个资源. 2>多个CPU可能会在同一时刻进行访问/修改(如果有逻辑/时间上的先后顺 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2017-5-23 09:54:58 | 显示全部楼层
heqinhan 发表于 2017-5-23 15:24
他问的可能是IIC的时序会被打扰。
我想问另一种情况,假如现在有两款IC M和N都共用一个SPI接口,任务A里 ...

我们可以这样理解
每一个任务都是一个"CPU".
内核/操作系统本身是一个"CPU"
如果这个资源只会在一个"CPU"中运行.
因为它的IIC我让他确认了,不会在中断中调用,所以只会被一个CPU调用,自然就不会有临界资源问题
你的就不一样,有2个"CPU",并且2个"CPU"都有可能在同一时刻使用这个资源,当然是临界资源.
这里有2个条件
1>多个CPU都需要访问/修改这个资源.
2>多个CPU可能会在同一时刻进行访问/修改(如果有逻辑/时间上的先后顺序,那仍然不是临界资源).
电子爱好者
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2017-5-23 10:06:26 | 显示全部楼层
//LED0任务
void LED0_task(void *p_arg)
{
        OS_ERR err;
        u16  Wind_press = 0;
       
        while(1)
        {   
                LED0 = !LED0;
                Get_Real_date(buff); //得到 年 月 日  buf 为3元素数字首地址
               Get_Real_time(buff+3); //得到 时 分 秒  buf 为3元素数字首地址
                //时时刻刻显示自己风压  
                buff[6] = Rresssensor_Read(); //取值四舍五入       
        OSQPost((OS_Q*)&Wind_PressQ, (void*)buff, (OS_MSG_SIZE)8,(OS_OPT)OS_OPT_P  OST_FIFO,(OS_ERR*)&err);
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);//延时1s
        }
}





              Get_Real_date(buff);       (1)
               Get_Real_time(buff+3); (2)
                buff[6] = Rresssensor_Read(); (3)


(1)  (2)  (3)   均为IIC读取器件 , 那么问题来了? 他们会被 SysTICK 中断所影响么? 我是不是应该在此处加上  临界资源保护???
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2017-5-23 10:49:08 | 显示全部楼层
我觉得最好加 iic涉及时序操作
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-5-23 10:50:25 | 显示全部楼层
IIC最好加上,IIC的时序要求严格,算是临界区资源了。
开往春天的手扶拖拉机
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2017-5-23 10:55:01 | 显示全部楼层
zuozhongkai 发表于 2017-5-23 10:50
IIC最好加上,IIC的时序要求严格,算是临界区资源了。

怎么加哈?  能给个例子么?
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2017-5-23 11:27:40 | 显示全部楼层
如果你上面使用(1)(2)(3)全部都是在一个任务中,并且中断中没有调用IIC函数,那它根本就不算临界资源.因为不存在"竞争"关系.
电子爱好者
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2017-5-23 12:48:25 | 显示全部楼层
liuchang 发表于 2017-5-23 11:27
如果你上面使用(1)(2)(3)全部都是在一个任务中,并且中断中没有调用IIC函数,那它根本就不算临界资源.因为不 ...

那 我正在读IIC 的时候, 中断发生了, 这个时候不会打扰么?
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2017-5-23 14:50:08 | 显示全部楼层
灰太狼小灰兔 发表于 2017-5-23 12:48
那 我正在读IIC 的时候, 中断发生了, 这个时候不会打扰么?

如果你在中断中不调用IIC函数,就不存在"竞争"关系.
因为没有另外的"CPU"在当前"CPU"不知情的情况下"意外的"修改当前值...
就算此时发生中断,凭借编译器的"机智",它当然会在进入中断之前"保护犯罪现场".这个不需要我们操心...
所以还是先考虑需不需要,再考虑如何保护吧
电子爱好者
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-17
在线时间
22 小时
发表于 2017-5-23 15:24:48 | 显示全部楼层
liuchang 发表于 2017-5-23 14:50
如果你在中断中不调用IIC函数,就不存在"竞争"关系.
因为没有另外的"CPU"在当前"CPU"不知情的情况下"意外 ...

他问的可能是IIC的时序会被打扰。
我想问另一种情况,假如现在有两款IC M和N都共用一个SPI接口,任务A里面会对M进行操作,任务B和C会对N进行操作。那么,不管是任务A还是B、C,只要是使用SPI的时候,是不是就算进入临界区,只有当前任务使用完SPI后,下一个任务才能用SPI
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 16:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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