4119|5

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

waitForSingleObject(gI2cEvent,I2C_RW_TIMEOUT)问题 [复制链接]

在IIC驱动中
IIC_Read和IIC_Write函数中
都有ret = WaitForSingleObject(gI2CEvent, I2C_RW_TIMEOUT);
其中I2C_RW_TIMEOUT定义为: #define I2C_RW_TIMEOUT                2000
具体函数:
DWORD IIC_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
        UINT32 count, ret;
        uchar *pReadBuffer;

        if ((pBuffer == NULL) || (dwNumBytes <= 0))
                return 0;

        pReadBuffer = MapPtrToProcess(pBuffer, GetCallerProcess());

        // 设置从机地址及当前状态
        I2cCurSla = I2cSla | 0x01;
        I2cStatus = I2C_STATUS_SETADDR;
        StartI2C(I2cCurSla);

        ret = WaitForSingleObject(gI2CEvent, I2C_RW_TIMEOUT);                /* 挂起当前线程,直到IIC中断的产生 */   
        ResetEvent(gI2CEvent);       
        if ((IICError != I2C_ERROR_NO_ERR) || (ret != WAIT_OBJECT_0))
        {
                RETAILMSG(1, (TEXT("ERROR: IIC_Read: Send Slave Address fail! \r\n")));
                return 0;       
        }
       
        I2cStatus = I2C_STATUS_RECEIVE;                                                // 进入接收状态
        for (count = 0; count < dwNumBytes; count++)
        {
                if (count == (dwNumBytes - 1))
                        IIC_StartRecByteNA();
                else
                        IIC_StartRecByteA();       
               
                /* 挂起当前线程,直到IIC中断的产生 */
                ret = WaitForSingleObject(gI2CEvent, I2C_RW_TIMEOUT);                ResetEvent(gI2CEvent);
                if (ret != WAIT_OBJECT_0)
                {
                        if (ret == WAIT_TIMEOUT)
                                RETAILMSG(1, (TEXT("ERROR: IIC read data time out! \r\n")));
                        else
                                RETAILMSG(1, (TEXT("ERROR: IIC read data fail! \r\n")));
                       
                        return count;
                }
       
                *pReadBuffer = IIC_RecByte();       
                pReadBuffer++;

                if (IICError != I2C_ERROR_NO_ERR)
                {
                        RETAILMSG(1, (TEXT("ERROR: IIC_Read: Receive data fail! \r\n")));
                        break;       
                }
        }
       
        StopI2C(0);

        return count;
}

最新回复

thank u!接分!  详情 回复 发表于 2008-6-24 19:55
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ret = WaitForSingleObject(gI2CEvent, I2C_RW_TIMEOUT);
其中I2C_RW_TIMEOUT定义为: #define I2C_RW_TIMEOUT 2000

这样做的含义是什么呢,在整个IIC驱动中的作用和用意是什么呢?谢谢
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
含义是等待2秒了。

超时就返回错误。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
等待两秒进中断处理?
还是等待两秒发数据?
还是等待两秒触发中断时间产生啊??
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
等待gI2CEvent事件的发生,如果2秒后事件没有发生,就超时处理
如果gI2CEvent事件发生了,就马上wait返回,ret == WAIT_OBJECT_0
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
thank u!接分!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表