刚刚接触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位数捏。。。。。。。。 |
评分
查看全部评分
这个事情也颠覆了我的认识。
unsigned long Voltage;
Voltage = ADCData * 330;
在ADCData为838的时候,算出来的值应该是276540,但是监控发现算出来是14396。
276540 = 0x4383C
14396 = 0x383C。
也就是说,我只得到16位数。
long long显示是有点问题,其它的都可以
评分
查看全部评分
不管是16位编译器tc还是32位编译器vc都是4个字节。 int在14位编译器下是2,32位编译器下是4
评分
查看全部评分
仿真发现:
sizeof(unsigned long)等于4
sizeof(unsigned long long int)则显示无效
sizeof只是想让他测试一下字节数。
原则上C没有规定int和long具体是多少位,只是规定long不小于int
额,或者你能不能告诉我,在IAR里面有没有办法定义出来一个32位整数变量?我怎么折腾,都是16位。
stdint.h,了解一下?
使用uint32_t试试?
评分
查看全部评分