sunwah 发表于 2018-8-1 14:50:23

在IAR里面,为啥unsigned long只有16位数?

刚刚接触STM8,使用的环境是IAR For STM8 V1.301。
里面定义了一个unsigned long的变量,实际运行的时候发现数据类型是16位的,造成溢出。
unsigned int,unsigned long long,unsigned long,发现都是16位的,这个怎么破?
在选项里面各种尝试都试过,没有解决问题。

额,对于STM8来说,我是个小菜鸟。不过单片机这玩意儿我已经玩了10多年了,虽然不是专职的。
51,PIC,MSP430都用的挺多的,STM32也用过。

按照我的理解,unsigned long就是32位整数。但是为啥这里死活就是只得16位数捏。。。。。。。。

toofree 发表于 2018-8-1 15:44:36

你的怎么试的?unsigned long long型,必须不可能是16位。

sunwah 发表于 2018-8-1 15:52:40

toofree 发表于 2018-8-1 15:44
你的怎么试的?unsigned long long型,必须不可能是16位。

这个事情也颠覆了我的认识。
unsigned longVoltage;

Voltage = ADCData * 330;
在ADCData为838的时候,算出来的值应该是276540,但是监控发现算出来是14396。
276540 = 0x4383C
14396 = 0x383C。
也就是说,我只得到16位数。

toofree 发表于 2018-8-1 16:55:33

本帖最后由 toofree 于 2018-8-1 17:05 编辑

long long显示是有点问题,其它的都可以

stm1024 发表于 2018-8-1 18:41:10

sizeof(unsigned long)等于多少?

feixiang20 发表于 2018-8-2 01:44:33

stm1024 发表于 2018-8-1 18:41
sizeof(unsigned long)等于多少?

不管是16位编译器tc还是32位编译器vc都是4个字节。 int在14位编译器下是2,32位编译器下是4

sunwah 发表于 2018-8-2 09:07:54

stm1024 发表于 2018-8-1 18:41
sizeof(unsigned long)等于多少?

仿真发现:
sizeof(unsigned long)等于4
sizeof(unsigned long long int)则显示无效
:funk:

stm1024 发表于 2018-8-2 09:40:56

feixiang20 发表于 2018-8-2 01:44
不管是16位编译器tc还是32位编译器vc都是4个字节。 int在14位编译器下是2,32位编译器下是4 ...

sizeof只是想让他测试一下字节数。
原则上C没有规定int和long具体是多少位,只是规定long不小于int

sunwah 发表于 2018-8-2 10:02:32

stm1024 发表于 2018-8-2 09:40
sizeof只是想让他测试一下字节数。
原则上C没有规定int和long具体是多少位,只是规定long不小于int ...

额,或者你能不能告诉我,在IAR里面有没有办法定义出来一个32位整数变量?我怎么折腾,都是16位。

stm1024 发表于 2018-8-2 11:44:29

本帖最后由 stm1024 于 2018-8-2 11:46 编辑

sunwah 发表于 2018-8-2 10:02
额,或者你能不能告诉我,在IAR里面有没有办法定义出来一个32位整数变量?我怎么折腾,都是16位。 ...
stdint.h,了解一下?
使用uint32_t试试?
页: [1] 2
查看完整版本: 在IAR里面,为啥unsigned long只有16位数?