5409|16

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

I2C_IOControl 传一个数组出来,老不成功,郁闷死了 [复制链接]

BOOL I2C_IOControl(
        DWORD context, DWORD code, BYTE *pInBuffer, DWORD inSize, BYTE *pOutBuffer,
        DWORD outSize, DWORD *pOutSize
)

里面定义了一个BYTE *str;然后给他空间,也有值了,但不知道怎么传出去,我用的是pOutBuffer=str;
应用程序里是:DeviceIoControl(hI2c,IOCONTROL_I2C_RCVSTR,&getlen,sizeof(getlen),getstr,sizeof(getstr),&len,NULL);

getstr定义的是BYTE *getstr;

请高手速度帮下忙,急

怎么样才可以把那个串传出来

最新回复

MARK,学习。  详情 回复 发表于 2010-1-14 17:37
点赞 关注

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你这样操作应该是没有问题的,LZ多发点代码的细节吧 这样大家才能帮你
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
        case IOCONTROL_I2C_RCVSTR:
                {
                        MutexI2C *m_8836_READ = new MutexI2C(0xc5, 1000, MutexI2C::MES_I2C0, MutexI2C::I2CMasterMode);
                        m_8836_READ->Init(MutexI2C::TXCLKSRC_PCLK256, 6, 10);
                        U8 len=*pInBuffer;
                        str=(BYTE *)malloc(sizeof(BYTE)*len+1);
                        m_8836_READ->Read(str,len);
                        //*(str+len)=0;
                        for(int i=0;i                                 RETAILMSG(1, (L".........IOCONTROL_I2C_RCVSTR.....i2ciocontrol str[%d]=%x.....\r\n",i,*(str+i)));                                                               
                                                               
                        delete m_8836_READ;
                        pOutBuffer=str;
}
                break;

应用里面
if (hI2c)
        {
                value=DeviceIoControl(hI2c,IOCONTROL_I2C_RCVSTR,&getlen,sizeof(getlen),getstr,sizeof(getstr),&len,NULL);
        }
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
调用时pOutBuffer已经分配空间了吧
BYTE * str= (BYTE*)pOutBuffer;

pOutBuffer=str; 去掉

这样就OK了

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
BYTE *str=NULL;
我这样定义了全局,怎么也不行
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
改成在应用程序里面分配str空间
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
LZ是只传出来一个值,还是一个都传不出来啊?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
memcpy 才行啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
这种处理有两种方法,一种就是用memcpy,应用和驱动都申请一段空间,驱动中获取值后memcpy到应用传过来的Buffer里。
另外就是驱动里直接往应用传递过来的buffer中读,就用不着memcpy了。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
里面定义了一个BYTE *str;然后给他空间,也有值了,但不知道怎么传出去,我用的是pOutBuffer=str

*str是函数里的局部变量吧,存放在栈中。 这样的值当然无法传出来的啊。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
会不会是sizeof(getstr)的问题?
你的getstr定义的是BYTE *getstr.
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
什么都没有传出来,传出来一个就好改了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
上面哪个兄弟再帮我看一下啊
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

14
 
如果是想传出去这样是不行的,要用memcpy(pOutBuffer,str,sizeof(str));

pOutBuffer是个指针,形参,你把str送给它后调用这个IOCONTROL当然收不到,或者是使用*pOutBuffer=*str这种形式也是可以的
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 11 楼 veabol 的回复:
如果是想传出去这样是不行的,要用memcpy(pOutBuffer,str,sizeof(str));

pOutBuffer是个指针,形参,你把str送给它后调用这个IOCONTROL当然收不到,或者是使用*pOutBuffer=*str这种形式也是可以的


“pOutBuffer是个指针,形参。”
学习了。
“*pOutBuffer=*str这种形式也是可以的”,这个是怎么做的?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 13 楼 ljdtj 的回复:
引用 11 楼 veabol 的回复:
如果是想传出去这样是不行的,要用memcpy(pOutBuffer,str,sizeof(str));

pOutBuffer是个指针,形参,你把str送给它后调用这个IOCONTROL当然收不到,或者是使用*pOutBuffer=*str这种形式也是可以的


“pOutBuffer是个指针,形参。”
学习了。
“*pOutBuffer=*str这种形式也是可以的”,这个是怎么做的?

“*pOutBuffer=*str这种形式如果要传送的仅仅是char,short,long之类的变量比较方便,强制类型转换后再赋值。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
MARK,学习。
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表