dyx811 发表于 2025-12-20 12:29:13

KEIL编译提示warning C188: 'parameter 1': value truncated

我用AI8051U-32Bit芯片指令,且头文件选择“AI8051U.H”编译时有些函数语句会始终提示

warning C188: 'parameter 1': value truncated,
但用STC89C52RC芯片指令,头文件选择“REG51.h”编译则一切正常。
附上出现该提示时的语句,麻烦各位大佬帮忙分析一下,看该如何操作才能避免这样子的错误警告。

//u8已经宏定义
#defineu8 unsigned char
#defineu16 unsigned int
#defineu32 unsigned int


提示框:
USER\oled.c(101): warning C188: 'parameter 1': value truncated

定位到的语句:
void OLED_Set_Pos(u8 x, u8 y)         //坐标设置
{
    x+=2;
    OLED_WR_Byte(0xb0+y,OLED_CMD);   <<<<<<这里就是定位到的出错语句
    OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
    OLED_WR_Byte((x&0x0f),OLED_CMD);
}

和其相关的函数:
void OLED_WR_Byte(u8 dat,u8 cmd)    //写入函数
{   
    u8 i;            
    if(cmd)            //发送命令/数据
      OLED_DC_Set();    //发送数据
    else
      OLED_DC_Clr();    //发送指令      
    OLED_CS_Clr();      //片选选中状态
    for(i=0;i<8;i++)    //发送8位一字节的数据
    {            
      OLED_SCL_Clr();      //时钟线置0,准备写入数据
      if(dat&0x80)      //获得高位数据
      {
         OLED_SDA_Set();    //高位为1,数据线置1
      }
      else
      {
         OLED_SDA_Clr();    //高位不为1,数据线置0
      }
      OLED_SCL_Set();      //时钟线置1,写入数据
      dat<<=1;         //将数据左移至最高位
    }      



另外该程序一共出现了多处相同的警告,都是跟有运算的参数相关。最终也能正常下载运行
".\Objects\SPI-7-AI8051U-32Bit" - 0 Error(s), 9 Warning(s).

希望大家帮我解答下这个困惑的问题,谢谢


ercircle 发表于 2025-12-20 13:14:07

OLED_CMD 应该是个超过u8位宽的定义所以告警?

Ayb_ice 发表于 2025-12-20 13:30:30

数据被截断了,OLED_CMD如果定义成了枚举,或是16位的

haiger 发表于 2025-12-20 15:38:12

定义的变量存在超出范围的风险,改成16位就可以
void OLED_Set_Pos(u16 x, u16 y)         //坐标设置

health 发表于 2025-12-20 16:34:58

void OLED_WR_Byte(u8 dat,u8 cmd)    //写入函数
函数定义 参数dat是u8类型。

调用是传入的是u16类型。
OLED_WR_Byte(0xb0+y,OLED_CMD);

0xb0+y默认是int类型。
如果确定不超范围的话,可以强制转换
OLED_WR_Byte((u8)0xb0+y,OLED_CMD);

dyx811 发表于 2025-12-21 01:06:56

它提示的是参数1,也就是语句“OLED_WR_Byte(0xb0+y,OLED_CMD)”中的“0xb0+y”这个变量有问题,
我只能揣测它是担心数据计算后溢出而出现问题,因为定义的“y”是8位的,而“0xb0”也是8位,相加结果确实有超过256的可能。
如果真的这样,这软件设计还真挺贴心的。
最后我按照楼上hea老师的方法,强制转换成了u8,
弄成这样“OLED_WR_Byte((u8)(0xb0+y),OLED_CMD);”彻底没有提示了。
最后,谢谢老师们的热心帮助。
还有几天就要跨年2026了,希望大家撸起袖子加油干!收获满满,完美收官。
页: [1]
查看完整版本: KEIL编译提示warning C188: 'parameter 1': value truncated