四叶草vs守护者 发表于 2017-2-27 21:40:35

ucos + iic 读取不到数据

看了坛友的帖子,在读之前禁用任务调度,读完了再打开任务调度,我也是这样弄得,但是还是读取不到值,裸跑的时候是可以正常读取到数据的   。用的这个来打开和关闭OSIntEnter();OSSchedLock(); OSSchedUnlock(); OSIntExit();都试了不得行   ,在每个任务后面我给的是5ms的延时,我的时钟片是5ms的,我把这个延时改大也不得行

security 发表于 2017-2-28 15:38:47

OSIntEnter 和 OSIntExit 是用在 ISR 中的,用于标记目前处于中断环境。
单独用 OSSchedLock 和 OSSchedUnlock 试试吧。

四叶草vs守护者 发表于 2017-2-28 15:52:50

security 发表于 2017-2-28 15:38
OSIntEnter 和 OSIntExit 是用在 ISR 中的,用于标记目前处于中断环境。
单独用 OSSchedLock 和 OSSchedUnl ...

都试过,还是不得行

security 发表于 2017-2-28 16:02:04

四叶草vs守护者 发表于 2017-2-28 15:52
都试过,还是不得行

那你就要在排查了,你给你出信息量,我们也不足够看出所以然。
从理论上讲,I2C 总线,一般是不需要进入临界区的。

四叶草vs守护者 发表于 2017-2-28 16:07:08

security 发表于 2017-2-28 16:02
那你就要在排查了,你给你出信息量,我们也不足够看出所以然。
从理论上讲,I2C 总线,一般是不需要进入 ...

我那是一个for循环采集,采集一次有个5ms的延时,把采集到的值保存到一个数组中,但是现在这个数组的值为 零

security 发表于 2017-2-28 16:09:36

四叶草vs守护者 发表于 2017-2-28 16:07
我那是一个for循环采集,采集一次有个5ms的延时,把采集到的值保存到一个数组中,但是现在这个数组的值为 ...

信息量不够啊。
Talk is cheap, show me the code.

四叶草vs守护者 发表于 2017-2-28 16:37:09

security 发表于 2017-2-28 16:09
信息量不够啊。
Talk is cheap, show me the code.

security 发表于 2017-2-28 16:46:01

四叶草vs守护者 发表于 2017-2-28 16:37


延时请用操作系统提供的 api,不要使用自己的软件硬延时。
你这样的代码片段,仍是太少,我是看不出来,我不知道有木有人能看出个所以然。

四叶草vs守护者 发表于 2017-2-28 16:54:43

security 发表于 2017-2-28 16:46
延时请用操作系统提供的 api,不要使用自己的软件硬延时。
你这样的代码片段,仍是太少,我是看不出来, ...

这个延时用的原子的延时函数,应该没问题,代码就是这些,任务都一样

security 发表于 2017-2-28 17:03:54

本帖最后由 security 于 2017-2-28 17:06 编辑

四叶草vs守护者 发表于 2017-2-28 16:54
这个延时用的原子的延时函数,应该没问题,代码就是这些,任务都一样

不用系统的延时,你这个任务,如果能获得 CPU 所有权,将会一直都是 running,除非有更高级的任务就绪,针对 ucos-ii 而言。
我能说的就到这里了,我是看不出来了,楼主继续努力,找到问题,记得来分享一下。

四叶草vs守护者 发表于 2017-2-28 17:30:46

security 发表于 2017-2-28 17:03
不用系统的延时,你这个任务,如果能获得 CPU 所有权,将会一直都是 running,除非有更高级的任务就绪, ...

我在每个任务函数里面串口打印了一个固定的数,最后能打印出来,也是按照我设置的优先级走的,但是就是采集到的值为零,不加系统的时候采值没问题

ywlzh 发表于 2017-2-28 18:00:26

仔细检查IIC的start和stop函数,write_onebyte(),read_onebyte()函数,与数据手册上的到底一不一致,裸机奔跑很有可能是卡住在时间点,蒙混过关了,还有 你的IIC设备有没有说明一次读取与下次读取需要间隔多长的时间。

我遇到过一个情况,和楼主差不多,裸机能跑,上ucos就不行了,后来改好了,PCF8563 一个RTC时钟,也是IIC设备,写一个字节,能行,连续写7个就不行了,后来发现我的stop函数,没加那几个微妙的延时,结果就不行了,加上了就好了。

四叶草vs守护者 发表于 2017-2-28 19:56:59

ywlzh 发表于 2017-2-28 18:00
仔细检查IIC的start和stop函数,write_onebyte(),read_onebyte()函数,与数据手册上的到底一不一致,裸机奔 ...

加延时了的,其他几个函数都加了的

四叶草vs守护者 发表于 2017-2-28 20:09:48

ywlzh 发表于 2017-2-28 18:00
仔细检查IIC的start和stop函数,write_onebyte(),read_onebyte()函数,与数据手册上的到底一不一致,裸机奔 ...

有工程截图不

Ma-包 发表于 2017-3-27 19:50:02

楼主解决了没能分享下嘛

四叶草vs守护者 发表于 2017-3-28 15:09:50

Ma-包 发表于 2017-3-27 19:50
楼主解决了没能分享下嘛

你也遇到了 ucos+iic 的问题么
页: [1]
查看完整版本: ucos + iic 读取不到数据