搜索
bottom↓
回复: 40

uCOSIII 中能否建立一个IO模拟IIC的任务。

[复制链接]

出0入0汤圆

发表于 2017-1-10 08:35:41 | 显示全部楼层 |阅读模式
如题,现在产品中使用到uCOSIII,但要读IIC ,SPI,用的是普通IO,不知能否实现。

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

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入8汤圆

发表于 2017-1-10 08:55:12 | 显示全部楼层
可以,你有什么疑虑吗?

出25入84汤圆

发表于 2017-1-10 09:09:44 | 显示全部楼层
没冲突啊,一个是操作系统 一个是接口协议 IO口模拟IIC完全可以

出0入0汤圆

发表于 2017-1-10 09:11:18 | 显示全部楼层
用接口的时候不调度就行了。

出0入0汤圆

发表于 2017-1-10 09:27:53 | 显示全部楼层
完全没有问题

出0入0汤圆

发表于 2017-1-10 09:39:32 | 显示全部楼层
模拟的IO操作用操作系统更合适因为等待的时候可以切别的任务

出20入70汤圆

发表于 2017-1-10 09:53:01 | 显示全部楼层
nanfang2000 发表于 2017-1-10 09:39
模拟的IO操作用操作系统更合适因为等待的时候可以切别的任务

不可能,系统级的等待延时较长且不准确!

出0入0汤圆

发表于 2017-1-10 09:55:19 | 显示全部楼层
楼上,I2C, 400K的频率, 每个时钟2.5us,  2.5us的时间还去切换任务,忙的过来吗

出0入0汤圆

 楼主| 发表于 2017-1-10 09:57:32 | 显示全部楼层
看了一上野火的STM32F429中 电容屏IIC就是IO模拟的,并且是ucos3 ,因该可以,再仔细看一下,

出0入8汤圆

发表于 2017-1-10 10:01:23 | 显示全部楼层
nanfang2000 发表于 2017-1-10 09:39
模拟的IO操作用操作系统更合适因为等待的时候可以切别的任务


模拟的 IIC 的延时,是要用软件硬延时的,没法切换任务的,系统的 tick 没法做到那么快,要做到那么快的话,系统的负担会加大。

出0入8汤圆

发表于 2017-1-10 10:09:33 | 显示全部楼层
黄晨0410 发表于 2017-1-10 09:57
看了一上野火的STM32F429中 电容屏IIC就是IO模拟的,并且是ucos3 ,因该可以,再仔细看一下, ...

这个跟用不用 RTOS 没有必然的联系。
我想你担心的是,模拟 IIC,时序会不会被 RTOS 的多任务中断,而导致错误。
你放心吧,模拟 IIC 之类的,这些是由 master 主动打时钟节拍的,slave 是听 master 的指挥的。
master 的时钟被中断一会儿,是没事的,只要不中断过久,例如几秒级别的(有的 slave 器件,对时间有要求,这需要看规格书的说明),slave 还是会乖乖听话的。
话说回来,master 会中断几秒吗?多数是不会的,如果会的话,你的 RTOS 的方案,就要考虑去掉 RT 字样了。

出0入0汤圆

发表于 2017-1-10 10:21:07 来自手机 | 显示全部楼层
有这个疑惑的一般是用作从,做主没一点问题,做从我认为不行

出0入0汤圆

发表于 2017-1-10 10:25:30 | 显示全部楼层
还不如搞个定时器驱动更准,你每个总线时钟都在死等,把cpu性能浪费掉,  除非你的CPU不用干活

出0入0汤圆

发表于 2017-1-10 10:36:38 | 显示全部楼层
以下我要说的是以楼主想要 IO模拟IIC 为前提的,在这个前提下
如果系统没用中断 就是tick用了中断 那么
//关调度
OSSchedLock(&err);
IO模拟IIC的操作();                                                       
OSSchedUnlock(&err);   
//开调度
这样os系统就不会影响IO模拟IIC的操作了

当然如果系统 中断应用了很多 那就得关中断来屏蔽
关中断还是关调度 要看楼主的实际应用
                                       

出0入0汤圆

发表于 2017-1-10 12:12:20 | 显示全部楼层
dwj0 发表于 2017-1-10 09:55
楼上,I2C, 400K的频率, 每个时钟2.5us,  2.5us的时间还去切换任务,忙的过来吗 ...

我说的不是这个,是外设的等待时间,比如擦除等费时间操作

出0入0汤圆

发表于 2017-1-10 12:29:07 来自手机 | 显示全部楼层
我项目就是这样

出0入0汤圆

发表于 2017-1-10 12:43:07 | 显示全部楼层
security 发表于 2017-1-10 10:09
这个跟用不用 RTOS 没有必然的联系。
我想你担心的是,模拟 IIC,时序会不会被 RTOS 的多任务中断,而导 ...

分析的十分到位。

出0入8汤圆

发表于 2017-1-10 13:30:48 | 显示全部楼层
gagaguojia 发表于 2017-1-10 10:36
以下我要说的是以楼主想要 IO模拟IIC 为前提的,在这个前提下
如果系统没用中断 就是tick用了中断 那么
// ...


对于同步总线而言,时间是不敏感的,一般不需要进入临界区,不论是硬件还是调度临界区。模拟的 IIC 属于此类。
对于异步总线而言,时间是敏感的,需要进入临界区。

出0入0汤圆

 楼主| 发表于 2017-1-10 14:45:24 | 显示全部楼层
security 发表于 2017-1-10 10:09
这个跟用不用 RTOS 没有必然的联系。
我想你担心的是,模拟 IIC,时序会不会被 RTOS 的多任务中断,而导 ...

谢谢,那请问模拟SPI 是不是也可以

出0入8汤圆

发表于 2017-1-10 14:51:18 | 显示全部楼层
黄晨0410 发表于 2017-1-10 14:45
谢谢,那请问模拟SPI 是不是也可以

是的,SPI 也是同步总线。

出0入0汤圆

发表于 2017-2-17 11:03:51 | 显示全部楼层
stm32的IIC比较麻烦

出20入25汤圆

发表于 2017-2-17 13:31:07 来自手机 | 显示全部楼层
security 发表于 2017-1-10 13:30
对于同步总线而言,时间是不敏感的,一般不需要进入临界区,不论是硬件还是调度临界区。模拟的 IIC 属于 ...

比如18B20就麻烦的多

出0入0汤圆

发表于 2018-9-8 15:34:40 | 显示全部楼层
黄晨0410 发表于 2017-1-10 09:57
看了一上野火的STM32F429中 电容屏IIC就是IO模拟的,并且是ucos3 ,因该可以,再仔细看一下, ...

哪个例子能发过连接吗

出0入0汤圆

发表于 2018-9-8 15:39:38 | 显示全部楼层

这样? 用RTOS 系统,i2c 运行时候,是禁止任务的调度吗

出0入8汤圆

发表于 2018-9-8 21:17:19 | 显示全部楼层
禁止任务调度会禁止中断吗?

出0入0汤圆

发表于 2018-9-8 23:58:05 | 显示全部楼层
gagaguojia描述的很清楚,赞!~

出0入0汤圆

发表于 2018-9-9 00:16:32 | 显示全部楼层
因为IIC 和SPI都是SCK同步数据的,和常见的软件模拟IIC SPI一样给中断打断,所以不会有影响的

出0入0汤圆

发表于 2018-9-10 08:28:43 | 显示全部楼层
jiangzhimin 发表于 2018-9-8 15:39
这样? 用RTOS 系统,i2c 运行时候,是禁止任务的调度吗

i2c专门见了一任务读写。。。。

出0入0汤圆

发表于 2018-9-10 08:30:01 | 显示全部楼层
jiangzhimin 发表于 2018-9-8 15:39
这样? 用RTOS 系统,i2c 运行时候,是禁止任务的调度吗

模拟I2C的,不是硬件的,可以建一个任务读,或者写。延时长。

出0入0汤圆

发表于 2018-9-10 09:22:22 | 显示全部楼层
Excellence 发表于 2018-9-10 08:28
i2c专门见了一任务读写。。。。

i2c 专门的一个读写任务 也是用到delay()函数啊, 用系统的的延时吗,
“或者写。延时长”没太明白 您的将的详细点吗?

出0入0汤圆

发表于 2018-9-10 09:36:37 | 显示全部楼层
两个方案
1.锁调度+延时模拟总线信号
2.定时器+中断模拟总线信号

出0入0汤圆

发表于 2018-9-10 10:16:42 | 显示全部楼层
nanfang2000 发表于 2017-1-10 09:39
模拟的IO操作用操作系统更合适因为等待的时候可以切别的任务

有些对时序要求严格的时候,要增加代码临界段,防止被高优先级的任务打断,导致总线超时的问题发生

出0入0汤圆

发表于 2018-9-10 10:32:15 | 显示全部楼层
jiangzhimin 发表于 2018-9-10 09:22
i2c 专门的一个读写任务 也是用到delay()函数啊, 用系统的的延时吗,
“或者写。延时长”没太明白 您 ...

就是用UCOSIII的延时程序。读的速度快,写的慢。注意延时的长度。

出0入0汤圆

发表于 2018-9-10 10:41:00 | 显示全部楼层
模拟IIC带CLOCK的,对时序要求不严格吧

出0入0汤圆

发表于 2018-9-10 11:05:06 | 显示全部楼层
security 发表于 2017-1-10 10:09
这个跟用不用 RTOS 没有必然的联系。
我想你担心的是,模拟 IIC,时序会不会被 RTOS 的多任务中断,而导 ...

怕打断的时候,加代码临界就可以了

出0入0汤圆

发表于 2018-9-10 14:32:59 | 显示全部楼层
日日♂夜夜 发表于 2018-9-10 09:36
两个方案
1.锁调度+延时模拟总线信号
2.定时器+中断模拟总线信号

这种形式?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-9-10 15:10:11 | 显示全部楼层

如果锁的话应该锁整条逻辑,这样保证这条逻辑内部时钟频率是稳定的
.....
lock
i2c_read
unlock
.....
lock
i2c_write
unlock
.....

出0入0汤圆

发表于 2018-9-13 13:52:56 | 显示全部楼层
当然可以

出0入0汤圆

发表于 2018-11-22 21:14:18 | 显示全部楼层
MARK

出5入8汤圆

发表于 2018-11-23 08:33:44 | 显示全部楼层
不用写到系统里面吧, 直接用一个定时中断不好吗?

出0入0汤圆

发表于 2018-11-23 12:14:57 | 显示全部楼层
security 发表于 2017-1-10 10:09
这个跟用不用 RTOS 没有必然的联系。
我想你担心的是,模拟 IIC,时序会不会被 RTOS 的多任务中断,而导 ...

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

本版积分规则

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

GMT+8, 2024-9-21 12:48

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

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