C语言中的内存问题(51单片机应用中出现的问题)

来源:互联网 发布:淘宝怎么交电费 编辑:程序博客网 时间:2024/05/29 19:40
这几天跟同学一起做模电大作业,有一次用到久违的单片机,使用C语言编写单片机控制程序,有一块用到数模转换物体重量并显示到lcd1602上,其中出现了一个小问题,代码如下
void ValueToString(unsigned char *str, unsigned char val){    unsigned long int sum;    sum = (val*500) / 255;    str[0] = (sum/100) + '0';     str[1] = (sum/10%10) + '0';     str[2] = '.';    str[3]=(sum%10)+'0';    str[4] = 'k';     str[5]='g';    str[6] = '\0'; }

先解释一下代码,我希望将PCF8591检测到的电压值乘5后保留一位小数输出,按理来说最多应该输出50kg,但每次都会出现在25.6kg以后不能正常输出,开始时很困扰,我明明将sum定义位unsigned long int 类型的了,应该没有理由会溢出呀,难道1602有毒,卧槽,好绝望……
躺在床上突然觉得哪里不对,8591是8位ADC,也就是说val最大是255,那val*500的中间结果是127500,这个结果会放在哪里呢,肯定是放在val的内存空间呀,而val是char 型,只有255个空间,这肯定溢出啊,所以我们应该在最初时就将val扩容,

`unsigned long int sum=val;

这样就可以了。

原创粉丝点击