ajfan 发表于 2019-8-16 20:28:41

unsigned int + unsigned long int 输出结果异常

ADC 采样,采3次累加后取平均,用uart 传递过程数据 发现:
1. 首次传输unsigned long int (TotalData),此时该数据应为0,实际第3,4字节传递的是别的数据。
2. 第2次累加后unsigned long int (TotalData)原意为第一次累加后的值,实际值的高2字节也不对。

请问C语言高手
1. unsinged Int + unsigned Long Int 相加需要强制转换么?
2. 第3,4字节高位为什么会出现奇怪的数据?

kebaojun305 发表于 2019-8-16 20:53:16

int是几位long是几位?

lcw_swust 发表于 2019-8-16 22:07:31

建议发送多个数据之前先发一个固定的帧头,如 AA 55
如果TotalData第一次应当为0却不为0,则在函数开头定义变量之后马上发出来看看.

xml2028 发表于 2019-8-16 23:03:49

stm32的int是32位

ajfan 发表于 2019-8-16 23:43:00

c8051f,sizeof int 2位,long4位

t3486784401 发表于 2019-8-17 02:43:52

建议把uart发送的那几个函数也贴过来看看

ajfan 发表于 2019-8-17 11:04:00

t3486784401 发表于 2019-8-17 02:43
建议把uart发送的那几个函数也贴过来看看

Uart 的来了

t3486784401 发表于 2019-8-17 12:02:36

怀疑 KEIL 的局部堆栈有猫饼!把 ADS8685_Reads 里边那几个局部变量前边加 static 搞一下,一般能解决。

再解决不了你需要 sizeof(TotalData) 看一下是几了

wuha 发表于 2019-8-17 12:05:35

STM32 这种32位系统,long int跟int的位宽是一样的。都是32位。想用64位了,用 long long int。或者头文件定义的uint64_t

ajfan 发表于 2019-8-23 12:45:49

是8051F340

machao 发表于 2019-8-23 17:39:52

ad是几位的?

ilikemcu 发表于 2019-8-31 09:20:39

我有个习惯,2个不同类型的数据做加减乘除等等计算,都会把比较长的那个放前面,如果有浮点数参与,可能的话,比如加和乘,都会把浮点数变量放前面,有点强迫症哈,不过这样可以减少出错概率,特别是有时候,程序运行到某个特殊点才会出现的问题。
页: [1]
查看完整版本: unsigned int + unsigned long int 输出结果异常