搜索
bottom↓
回复: 15

ucos + iic 读取不到数据

[复制链接]

出0入0汤圆

发表于 2017-2-27 21:40:35 | 显示全部楼层 |阅读模式
看了坛友的帖子,在读之前禁用任务调度,读完了再打开任务调度,我也是这样弄得,但是还是读取不到值,裸跑的时候是可以正常读取到数据的   。  用的这个来打开和关闭OSIntEnter();  OSSchedLock(); OSSchedUnlock(); OSIntExit();  都试了不得行   ,在每个任务后面我给的是5ms的延时,我的时钟片是5ms的,我把这个延时改大也不得行

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入8汤圆

发表于 2017-2-28 15:38:47 | 显示全部楼层
OSIntEnter 和 OSIntExit 是用在 ISR 中的,用于标记目前处于中断环境。
单独用 OSSchedLock 和 OSSchedUnlock 试试吧。

出0入0汤圆

 楼主| 发表于 2017-2-28 15:52:50 | 显示全部楼层
security 发表于 2017-2-28 15:38
OSIntEnter 和 OSIntExit 是用在 ISR 中的,用于标记目前处于中断环境。
单独用 OSSchedLock 和 OSSchedUnl ...

都试过,还是不得行

出0入8汤圆

发表于 2017-2-28 16:02:04 | 显示全部楼层

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

出0入0汤圆

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

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

出0入8汤圆

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

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

出0入0汤圆

 楼主| 发表于 2017-2-28 16:37:09 | 显示全部楼层
security 发表于 2017-2-28 16:09
信息量不够啊。
Talk is cheap, show me the code.

本帖子中包含更多资源

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

x

出0入8汤圆

发表于 2017-2-28 16:46:01 | 显示全部楼层

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

出0入0汤圆

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

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

出0入8汤圆

发表于 2017-2-28 17:03:54 | 显示全部楼层
本帖最后由 security 于 2017-2-28 17:06 编辑
四叶草vs守护者 发表于 2017-2-28 16:54
这个延时用的原子的延时函数,应该没问题,代码就是这些,任务都一样


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

出0入0汤圆

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

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

出0入0汤圆

发表于 2017-2-28 18:00:26 | 显示全部楼层
仔细检查IIC的start和stop函数,write_onebyte(),read_onebyte()函数,与数据手册上的到底一不一致,裸机奔跑很有可能是卡住在时间点,蒙混过关了,还有 你的IIC设备有没有说明一次读取与下次读取需要间隔多长的时间。

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

出0入0汤圆

 楼主| 发表于 2017-2-28 19:56:59 | 显示全部楼层
ywlzh 发表于 2017-2-28 18:00
仔细检查IIC的start和stop函数,write_onebyte(),read_onebyte()函数,与数据手册上的到底一不一致,裸机奔 ...

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

出0入0汤圆

 楼主| 发表于 2017-2-28 20:09:48 | 显示全部楼层
ywlzh 发表于 2017-2-28 18:00
仔细检查IIC的start和stop函数,write_onebyte(),read_onebyte()函数,与数据手册上的到底一不一致,裸机奔 ...

有工程截图不

出0入0汤圆

发表于 2017-3-27 19:50:02 | 显示全部楼层
楼主解决了没  能分享下嘛

出0入0汤圆

 楼主| 发表于 2017-3-28 15:09:50 | 显示全部楼层
Ma-包 发表于 2017-3-27 19:50
楼主解决了没  能分享下嘛

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

本版积分规则

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

GMT+8, 2024-4-25 20:54

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

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