打印

指针变量类型不相配,如何取值啊?

[复制链接]
2141|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzhenggen|  楼主 | 2007-6-18 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我前面使用ADC采样的值存贮到全局变量SumValue里面,但是我想把这个全局变量值存取到24C16里面去,但是指针变量类型不相配,如何取值??
uint IDATA SumValue;
void wri_n(uchar z,uchar * x,uchar y,byte ds)
/*z:24c64addr,x,rom or ram or xdata addrds:写进24c16的分区,
第1区256b,ds=0xa0;第2区256b,ds=0xa2
第3区256b,ds=0xa4;第4区256b,ds=0xa6
第5区256b,ds=0xa8;第6区256b,ds=0xaa
第7区256b,ds=0xac;第8区256b,ds=0xae*/
{
  uchar i;
  uchar a;
  for(i=0;i<y;i++)
  {
    a=*(x+i);
    I_addres_wri(ds,z+i,a);
  }
}
 rea_n(uchar z,uchar * x,uchar y,byte ds)
/*z:24c64addr,x,rom or ram or xdata addr*/
{
  uchar i;
  for(i=0;i<y;i++)
  {
    *(x+i)=I_addres_red(ds,z+i);
  }
}
main()
{
     wri_n(0,&SumValue,7,0xa8);
     rea_n(0,??,7,0xa8);
}

相关帖子

沙发
ayb_ice| | 2007-6-18 11:08 | 只看该作者

这有什么,搞清存储方式再写程序吧。。。

使用特权

评论回复
板凳
xzhenggen|  楼主 | 2007-6-18 11:22 | 只看该作者

我就想把全局变量存取到24C16里面。

全局变量是无符号整型,而24C16的子函数里面的形参自变量是无符号字符型。
而两者如何联结起来?

使用特权

评论回复
地板
xzhenggen|  楼主 | 2007-6-18 11:24 | 只看该作者

而24C16的子函数里面的形参自变量是无符号字符型(指针变量

使用特权

评论回复
5
guoqi| | 2007-6-18 13:04 | 只看该作者

这样。。。。。

把int型全局变量拆成两个char型不就得了。
uint IDATA SumValue;
char c_SumValue[2];
c_SumValue[0] = SumValue&0xff;
c_SumValue[1] = (SumValue&0xff00)>>8;
这样你可以用你已经写好的函数了!

使用特权

评论回复
6
xzhenggen|  楼主 | 2007-6-18 13:24 | 只看该作者

哦,多谢!定义两个字符型全局变量数组char c_SumValue[2];?

那我是不是在主函数里面首先赋值运算c_SumValue[0] = SumValue&0xff;
c_SumValue[1] = (SumValue&0xff00)>>8;
然后必须写两次,读两次24c16子程序?

使用特权

评论回复
7
computer00| | 2007-6-19 01:41 | 只看该作者

当然.你的整型有几个字节,就要分别写几个字节.读出来也是

使用特权

评论回复
8
jimoom| | 2007-6-19 09:51 | 只看该作者

定义一个联合,就可以单字节操作了。

uchar * px;
uint xx;
px=(uchar *)&xx;即指向xx的第一字节了,
px++;指向下一字节。

还可以定义一个联合,就可以单字节操作了。

使用特权

评论回复
9
xzhenggen|  楼主 | 2007-6-19 10:22 | 只看该作者

多谢!px=(uchar *)&xx;这样的语法还是第一次见到。

这种语法不会出问题吧?在此还有一事相求(问):在24C16子程序里面的读子程的slave的地址问题。就是在主函数里面调用24C16的读子函数地址。
void wri_n(uchar z,uchar * x,uchar y,byte ds)
/*z:24c64addr,x,rom or ram or xdata addrds:写进24c16的分区,
第1区256b,ds=0xa0;第2区256b,ds=0xa2
第3区256b,ds=0xa4;第4区256b,ds=0xa6
第5区256b,ds=0xa8;第6区256b,ds=0xaa
第7区256b,ds=0xac;第8区256b,ds=0xae*/
{
  uchar i;
  uchar a;
  for(i=0;i<y;i++)
  {
    a=*(x+i);
    I_addres_wri(ds,z+i,a);
  }
}
rea_n(uchar z,uchar * x,uchar y,byte ds)
/*z:24c64addr,x,rom or ram or xdata addr*/
{
  uchar i;
  for(i=0;i<y;i++)
  {
    *(x+i)=I_addres_red(ds,z+i);
  }
}
main()
{
     wri_n(0,0x8000,7,0xa8);
     rea_n(7,0x8000,7,0xa8);
}
上面的例程是读写在同一个绝对地址空间这样正确吗?为啥uchar z:24c16addr,
在调用读子程序时,z值变为了7,而不是跟写函数一样改为0?还有读写用同一个ram/rom空间(0x8000)这样行吗?不会出错?如果改为这面这个子程序可以吗?

main()
{
     wri_n(0,0x8000,7,0xa8);
     rea_n(0,0xa000,7,0xa8);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

529

帖子

1

粉丝