OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 184|回复: 5

参数与类型的参数不兼容

[复制链接]

  离线 

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-20
在线时间
9 小时
发表于 2018-7-12 12:37:01 | 显示全部楼层 |阅读模式
10金钱
大家好,程序是从8位单片机移植上来的,错误指示为const u8与I2C_Write的指针u8*不匹配:请教一下怎么修改。错误信息:..\HARDWARE\MY9XX1\MY9XX1.c(104): error:  #167: argument of type "const u8 (*)[4]" is incompatible with parameter of type "u8 *"
          SX_I2C_Write(addr,&sx_reg_val[i-1]);  
错误的子函数程序:
void Init_SX(void)
    {

    u8 i;
    u8 addr;

        for(i=0;i<=INIT_FAIL_TIME;i++)//INIT_FAIL_TIME=20
        {
                delay_ms(20);
                SX_I2C_Read(0x10,reg_val);//ID
                if(reg_val[3] != SX_Chip_ID) continue;
                break;
        }

        if(reg_val[3] != SX_Chip_ID)return; //again
        
        for(i = 1;i <= 48; i++)
         {  
       if(i <= 12)
          addr = i-1;
       else if( i <= 16)
          addr = 3 + i;
       else if( i <= 27)
          addr = 8 + i;
       else if( i <= 32)
          addr = 9 + i;      
       else if( i <= 48)
          addr = 15 + i;      
        SX_I2C_Write(addr,&sx_reg_val[i-1]);  
    }

                        Write_SX_U_Band_RegVal();        
                        SX_Reset_Chip();
                        SX_Trigger();
}
另外一个子函数程序:
const u8 sx_reg_val[48][4] =
{
0xfC,0x4f,0x04,0x00,    //REG0                          

            .
            .
            .
0x00,0x0F,0x00,0x00,    //REG3F
}

SX_I2C_Write的子函数程序:
void SX_I2C_Write(u8 reg,u8 *pBuf)
{
        u8 i;

        if(reg <= 0x0b)      
    {
        analog_reg_val[reg][0] = pBuf[0];
        analog_reg_val[reg][1] = pBuf[1];
        analog_reg_val[reg][2] = pBuf[2];
        analog_reg_val[reg][3] = pBuf[3];
    }

        IIC_Start();
        IIC_Send_Byte(SX_Chip_ID);

        reg = reg<<1;
        IIC_Send_Byte(reg);

        for(i=0;i<4;i++)
        {
                IIC_Send_Byte(pBuf);
        }
        IIC_Stop();
               
}

最佳答案

查看完整内容[请看2#楼]

DWARE\MY9XX1\MY9XX1.c(104): error: #167: argument of type "const u8 (*)[4]" is incompatible with parameter of type "u8 *" SX_I2C_Write(addr,&sx_reg_val); 错误的子函数程序: void Init_SX(void) { u8 i; u8 addr; for(i=0;i
回复

使用道具 举报

  离线 

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-20
在线时间
9 小时
 楼主| 发表于 2018-7-12 12:37:02 | 显示全部楼层
TCX 发表于 2018-7-12 15:16
取地址后再前面增加(u8*)看看,SX_I2C_Write(addr, (u8*)&sx_reg_val);

DWARE\MY9XX1\MY9XX1.c(104): error:  #167: argument of type "const u8 (*)[4]" is incompatible with parameter of type "u8 *"
          SX_I2C_Write(addr,&sx_reg_val[i-1]);  
错误的子函数程序:
void Init_SX(void)
    {

    u8 i;
    u8 addr;

        for(i=0;i<=INIT_FAIL_TIME;i++)//INIT_FAIL_TIME=20
        {
                delay_ms(20);
                SX_I2C_Read(0x10,reg_val);//ID
                if(reg_val[3] != SX_Chip_ID) continue;
                break;
        }

        if(reg_val[3] != SX_Chip_ID)return; //again
        
        for(i = 1;i <= 48; i++)
         {  
       if(i <= 12)
          addr = i-1;
       else if( i <= 16)
          addr = 3 + i;
       else if( i <= 27)
          addr = 8 + i;
       else if( i <= 32)
          addr = 9 + i;      
       else if( i <= 48)
          addr = 15 + i;      
        SX_I2C_Write(addr,&sx_reg_val[i-1]);  
    }

                        Write_SX_U_Band_RegVal();        
                        SX_Reset_Chip();
                        SX_Trigger();
}
另外一个子函数程序:
const u8 sx_reg_val[48][4] =
{
0xfC,0x4f,0x04,0x00,    //REG0                          

            .
            .
            .
0x00,0x0F,0x00,0x00,    //REG3F
}

SX_I2C_Write的子函数程序:
void SX_I2C_Write(u8 reg,u8 *pBuf)
{
        u8 i;

        if(reg <= 0x0b)      
    {
        analog_reg_val[reg][0] = pBuf[0];
        analog_reg_val[reg][1] = pBuf[1];
        analog_reg_val[reg][2] = pBuf[2];
        analog_reg_val[reg][3] = pBuf[3];
    }

        IIC_Start();
        IIC_Send_Byte(SX_Chip_ID);

        reg = reg<<1;
        IIC_Send_Byte(reg);

        for(i=0;i<4;i++)
        {
                IIC_Send_Byte(pBuf);
        }
        IIC_Stop();
               
}
回复

使用道具 举报

  离线 

0

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
502
金钱
502
注册时间
2017-1-15
在线时间
87 小时
发表于 2018-7-12 13:37:59 | 显示全部楼层
感觉都看不清楚了 能不能重新发一下你的帖子
回复

使用道具 举报

  离线 

0

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
237
金钱
237
注册时间
2018-2-27
在线时间
28 小时
发表于 2018-7-12 15:16:43 | 显示全部楼层
取地址后再前面增加(u8*)看看,SX_I2C_Write(addr, (u8*)&sx_reg_val[i-1]);  
回复

使用道具 举报

  离线 

4

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-6-27
在线时间
18 小时
发表于 2018-7-12 17:53:45 | 显示全部楼层
用C语音的强制类型转换
回复

使用道具 举报

  离线 

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-20
在线时间
9 小时
 楼主| 发表于 2018-7-12 18:54:17 | 显示全部楼层
TCX 发表于 2018-7-12 15:16
取地址后再前面增加(u8*)看看,SX_I2C_Write(addr, (u8*)&sx_reg_val);

不报错了谢谢
回复

使用道具 举报

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

本版积分规则




关闭

必看,必学:"原子哥”力荐上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-9-21 12:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */