C51的指针转换错误,请高手指正

2019-07-16 05:59发布

我写了一个X5045的写数据函数,在单个输入字符的时候,没有问题,想着连续写入3-8个字符的时候,出现错误,请帮忙指出错误原因,万分感谢,程序附下:
void x5045_byte_write(uchar addh,addl,dat_num,unsigned int *dat_add)   //写入系统参数
{
     uchar ah,i,k=0;
    if(addh==0)
    ah = 0x02;    //低128用0x02,高128用0x0a;
    else
    ah = 0x0a;
    stax();           //启动信号
    byte_in(0x06);//写指令
    stax();             //开始信号
    byte_in(ah);     //写入数据的高位地址      
    byte_in(addl);   //写入数据的低位地址
    for(i=dat_num;i>0;i--)      //循环写入指定个数的字节
     {
        byte_in(*(dat_add+k));
        k++;
     }
   endx();                               //结束
   status_ready();                   //查询总线状态
}

上面是子程序,子程序把循环写入指定个数的字节的部分改成直接写入某一个字节,主程序调用时好用的,但是想要连续写入3-8个字节时,在主程序中调用时是这样设想的:
x5045_dat[0] = 1;
x5045_dat[2] = 2;
x5045_dat[3] = 3;
p = x5045_dat;

x5045_byte_write(0,0x10,3,*p);

比如上例中,要在X5045的0X10,0X11,0X12中依次写入 1,2,3,程序报错
SINGLE_C.C(72): error C214: illegal pointer conversion
x5045_byte_write(0,0x10,3,*p);  本句错误;

请高手指明错误原因,以让俺对指针的理解更进一步,谢谢。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
怕碎的瓶子
1楼-- · 2019-07-16 08:10
感觉用汇编写好简单啊,用R0,R1,R2在加几个@R0的指令,做个循环,就OK了,现在写C感觉摸不到头脑啊,错了也不知道怎么错的。
怕碎的瓶子
2楼-- · 2019-07-16 11:13
 精彩回答 2  元偷偷看……
hexiaoxiao
3楼-- · 2019-07-16 15:56
本句错误那里,把P前面的*号去了,再编译一下。
怕碎的瓶子
4楼-- · 2019-07-16 18:29
hexiaoxiao 发表于 2012-4-24 13:00
本句错误那里,把P前面的*号去了,再编译一下。

非常感谢,就是在这个*这里。
也在这里给像我一样的初学者提醒一个,函数定义的形参如果是指针变量,那么实参传递的时候直接传递指针给形参的指针变量,就是hexiaoxiao帮我指出来的这个*去掉。再次谢谢哦。

一周热门 更多>