打印

PIC16F630 指针的问题,加一,指向二!

[复制链接]
2420|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yeweizhou|  楼主 | 2012-4-28 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在一个IIC发送函数中用指针查表,但是最后用显波器一看,指针加一,但是指向了后一个地址去了。查了两天。才知是这里问题,有没有高手知什么问题???
void  IICPageWrite(unsigned char SubAddr,unsigned char RamAddr,int *SendRegister,unsigned char  Counter)
{
IICStartCommod();
IICSendData(SubAddr);
IICSendData(RamAddr);
  for(;Counter;Counter--)
  {
  IICSendData(*SendRegister);
    SendRegister++;
  }  
IICStopCommod();
}

上面就是一个IIC的页发送程序。请指教,谢谢!
沙发
NE5532| | 2012-4-28 16:54 | 只看该作者
从只发一个数据对不对找起。

使用特权

评论回复
板凳
Light_David| | 2012-4-28 19:24 | 只看该作者
int *SendRegister

改为 char  *SendRegister
看看吧.
发送都是8bits的怎么用int指针呢? int是16bits类型的,指针加1就等于8bits的char型加2了.

使用特权

评论回复
地板
Ryanhsiung| | 2012-4-29 08:40 | 只看该作者
传进来的指针指向对吗??我怀疑进来就不对了

使用特权

评论回复
5
yeweizhou|  楼主 | 2012-4-29 14:17 | 只看该作者
4# Ryanhsiung

我试过了,不是这个问题。现在数据是
unsigned char const S7102_NTSC_AV[]={
//0x10~0x1f
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x1A,
0x1B,0x1C,0x70,0x80,0x00,0x00,0x00,0x00,
}

我发上面的S7102_NTSC_AV[0X06]开始发送。本来应该是:0X04,0x1A,
0x1B,0x1C,0x70,0x80,用显波器看到的发送数据是 0x04, 0x1B,0x70,0X00这样跳过去,变成发地址是1,3,5,7,9

使用特权

评论回复
6
yeweizhou|  楼主 | 2012-4-29 14:21 | 只看该作者
3# Light_David
但是那个数据表是保存在程序ROM里,用CHAR只有255啊,ROM有1024啊。那表放在后面,不就指针指不到了?

使用特权

评论回复
7
yeweizhou|  楼主 | 2012-4-29 14:22 | 只看该作者
2# NE5532
发一个对。指针加一,变成地址指到3了。

使用特权

评论回复
8
Wayner| | 2012-4-29 14:55 | 只看该作者
你的函数参数为 int *SendRegister错了,应该是unsigned char * SendRegister

使用特权

评论回复
9
Light_David| | 2012-4-29 18:03 | 只看该作者
3# Light_David  
但是那个数据表是保存在程序ROM里,用CHAR只有255啊,ROM有1024啊。那表放在后面,不就指针指不到了?
yeweizhou 发表于 2012-4-29 14:21


你有试着改改看吗?
不知道你是怎么将Rom位宽联系到这里了;真令人费解。

使用特权

评论回复
10
NE5532| | 2012-4-29 21:22 | 只看该作者
2# NE5532  
发一个对。指针加一,变成地址指到3了。
yeweizhou 发表于 2012-4-29 14:22


那就再发2个、3个、4个,直到不对了为止,然后来想一下个数会导致什么区别。

使用特权

评论回复
11
Ryanhsiung| | 2012-4-30 13:04 | 只看该作者
没注意看,一看就知道错了
你的指针用错了,用了int *,应该用char*.
LZ应该先把4L的东东传上来,没传上来让我们瞎折腾。

使用特权

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

本版积分规则

2

主题

8

帖子

1

粉丝