[STM8] STM8定义unsigned int为何最多只有16位数据?

[复制链接]
14333|23
 楼主| feilusia 发表于 2013-10-29 19:29 | 显示全部楼层 |阅读模式
我的timeout明明定义为unsigneed int,并且赋值了0xffffffff,为何只有0xffff呢?
是不是说STM8的数据处理能力是8位,而位宽只有16位?求大神赐教
QQ截图20131029192657.jpg
戈卫东 发表于 2013-10-29 20:25 | 显示全部楼层
本来不就是16位么?
在很久很久以前,C语言才出现的时候,计算机的字宽是16位,int于是也就是16位.
后来出现了32位机的时候,int才有32位宽.不过在8位和16位的CPU上,int还是16位.
戈卫东 发表于 2013-10-29 20:30 | 显示全部楼层
咦~~~~它居然是u32,要是从这个名字来看它似乎是32位宽才对.
不过如果你的u32是从unsigned int经过typedef来的,那它还是16位.
试试typedef unsigned long u32看看?
lee2k 发表于 2013-10-29 22:10 | 显示全部楼层
这是编译器的问题,如果编译器将int认为16位,那么在这个编译环境中就是16位,
如:Keil C和IAR中int都是16位,但在VC或delphi中int就是32位的了!
要想用32位,就用long型!
 楼主| feilusia 发表于 2013-10-30 08:50 | 显示全部楼层
戈卫东 发表于 2013-10-29 20:30
咦~~~~它居然是u32,要是从这个名字来看它似乎是32位宽才对.
不过如果你的u32是从unsigned int经过typedef来 ...

我试了下还是不行,是我哪里写错了吗
QQ截图20131030084913.jpg
 楼主| feilusia 发表于 2013-10-30 08:51 | 显示全部楼层
lee2k 发表于 2013-10-29 22:10
这是编译器的问题,如果编译器将int认为16位,那么在这个编译环境中就是16位,
如:Keil C和IAR中int都是16 ...

还是不行····
 楼主| feilusia 发表于 2013-10-30 08:54 | 显示全部楼层
我试了unsigned long int\unsigned int\unsigned long\long都不行,看来最多只能到16位了
游浪星 发表于 2013-10-30 09:40 | 显示全部楼层
unsigned long  int 都是16位的?不肯能吧。 一般short int 至少是16位,int 看编译环境,long int 至少32位啊
 楼主| feilusia 发表于 2013-10-30 09:46 | 显示全部楼层
游浪星 发表于 2013-10-30 09:40
unsigned long  int 都是16位的?不肯能吧。 一般short int 至少是16位,int 看编译环境,long int 至少32 ...

我的编译环境是IAR FOR STM8。不知道是编译器问题还是STM8本身只能16位位宽
戈卫东 发表于 2013-10-30 10:14 | 显示全部楼层
unsigned long没有问题,
s0023.jpg
你那个unavailable是编译器优化掉了...
戈卫东 发表于 2013-10-30 10:16 | 显示全部楼层
或者是变量结束了生命期,在运行到timeout2--这一行之前,应该能看到它的.
 楼主| feilusia 发表于 2013-10-30 10:35 | 显示全部楼层
戈卫东 发表于 2013-10-30 10:14
unsigned long没有问题,

你那个unavailable是编译器优化掉了...

你用的编译器是什么?我用的是IAR FOR STM8
戈卫东 发表于 2013-10-30 10:37 | 显示全部楼层
我也是IAR FOR STM8----1.40.1好像....
 楼主| feilusia 发表于 2013-10-30 11:06 | 显示全部楼层
戈卫东 发表于 2013-10-30 10:37
我也是IAR FOR STM8----1.40.1好像....

我的是1.30的
戈卫东 发表于 2013-10-30 11:12 | 显示全部楼层
1.30也不会连long都不支持吧.....
戈卫东 发表于 2013-10-30 11:13 | 显示全部楼层
你在你的timeout2--那里放个断点看看......
 楼主| feilusia 发表于 2013-10-30 11:31 | 显示全部楼层
戈卫东 发表于 2013-10-30 11:13
你在你的timeout2--那里放个断点看看......

看来是IAR把用完的局部变量就优化掉了。IAR真牛X···
QQ截图20131030112740.jpg
QQ截图20131030112754.jpg
戈卫东 发表于 2013-10-30 11:37 | 显示全部楼层
这种优化很常见.......现在差不多所有编译都会这么做.
而已这很可能BEBUGGER的行为----在这一句之后,timeout2已经结束了它的生命期,为它分配的存储已经无效,DEBUGGER会给出"unavailable"信号.
 楼主| feilusia 发表于 2013-10-30 11:46 | 显示全部楼层
戈卫东 发表于 2013-10-30 11:37
这种优化很常见.......现在差不多所有编译都会这么做.
而已这很可能BEBUGGER的行为----在这一句之后,timeou ...

嗯,明白了,谢谢你们的回答,非常感谢
明月小厨 发表于 2013-10-30 18:36 | 显示全部楼层
最好定义为全局变量然后观察,不然,有可能被优化掉了,什么也看不到;
int型通常就是16位;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:1、博客:http://blog.csdn.net/feilusia 2、QQ群:STM8/STM32群(164311667);职场交流群(450154342);CC2640R2F群(557278427) 3、淘宝店:https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

135

主题

1967

帖子

95

粉丝
快速回复 在线客服 返回列表 返回顶部