ysp5318 发表于 2024-9-1 09:39:12

学习OLED12864,测试遇到的问题。|已解决

本帖最后由 芯征程 于 2024-11-13 09:21 编辑

学习OLED12864中,在用OledDrive程序实验测试时用STC8H系列C51生成hex文件没问题。但用STC32用251生成hex文件出现以下问题。



oled.c(115): warning C188: 'parameter 1': value truncated
oled.c(115): 警告 C188: “参数 1”: 值被截断

这个怎么解决。{:4_196:}

邮箱 发表于 2024-9-1 11:25:14

搬的

KEIL C251中的错误消息“warning C188:'parameter 2':value truncated”表示传递给函数的第二个参数被截断,因为它大于参数的数据类型。在这种情况下,当将第二个参数定义为uint8_t时,它是一个8位数据类型,它只能保持255(OxFF)的最大值,因此如果传递给函数的值超过255,它将被截断并导致此警告消息。

要解决此问题,您可以将第二个参数的数据类型更改为uint16_t,或者确保传递给函数的值不超过255的最大值。

ysp5318 发表于 2024-9-1 14:12:12

{:4_196:}谢谢指教。

浦江一水 发表于 2024-9-1 15:43:05

说说我对此话题的理解:
编译器C251和C51在语法检验的严格程度有所不同.
因此同样的语句在不同的编译环境下, 语法检查结果不同, 有的无警告, 有的有警告了...
不是因为传入了较大的数据类型. 而是因为传入的参数有可能超出定义的数据类型.
就以楼主实例看:
114oledWriteCmd(col & 0xf);
115oledWriteCmd(0x10 + (col >>4));
这是一个写命令字节的语句, 其中参数是一个字节(8位)数据类型,
114 句col参数是字节型的,它"与运算"0x0f 以后还是字节型, 所以这一句是不会警告的.
115 句col参数是字节型的,它右移4位以后还是字节型, 但是它再加上0x10(常数)以后, 就有可能超出字节类型, 所以会有警告出现.
如果同意是这样的道理的话, 那么解决的方法, 就不是改为较大的数据类型了.
而是应该是将参数经运算后的结果约束为一个函数原型中定义的类型即可.

就具体实例而言, 是将运算后的结果约束为字节类型,
则可改为:
115oledWriteCmd((unsigned char)(0x10 + (col >>4)));
应该是不警告了.
其中红色部分是新增的字符, 如果unsigned char之前已经有过宏定义, 比如已定义为u8, 那么括弧内就写u8即可...


个人理解,仅供参考...

ysp5318 发表于 2024-9-2 08:53:35

浦江一水 发表于 2024-9-1 15:43
说说我对此话题的理解:
编译器C251和C51在语法检验的严格程度有所不同.
因此同样的语句在不同的编译环境下 ...

谢谢,太谢谢了。{:4_196:}受教了。

ysp5318 发表于 2024-9-2 09:14:28

问题迎刃而解,即授人以鱼又授人以渔!{:4_196:}

21cnsound 发表于 2024-9-2 10:34:36

浦江一水 发表于 2024-9-1 15:43
说说我对此话题的理解:
编译器C251和C51在语法检验的严格程度有所不同.
因此同样的语句在不同的编译环境下 ...

同样的理解{:5_300:}
页: [1]
查看完整版本: 学习OLED12864,测试遇到的问题。|已解决