打印
[STM8]

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

[复制链接]
13296|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feilusia|  楼主 | 2013-10-29 19:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我的timeout明明定义为unsigneed int,并且赋值了0xffffffff,为何只有0xffff呢?
是不是说STM8的数据处理能力是8位,而位宽只有16位?求大神赐教

QQ截图20131029192657.jpg (21.89 KB )

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型!

使用特权

评论回复
5
feilusia|  楼主 | 2013-10-30 08:50 | 只看该作者
戈卫东 发表于 2013-10-29 20:30
咦~~~~它居然是u32,要是从这个名字来看它似乎是32位宽才对.
不过如果你的u32是从unsigned int经过typedef来 ...

我试了下还是不行,是我哪里写错了吗

QQ截图20131030084913.jpg (11.05 KB )

QQ截图20131030084913.jpg

使用特权

评论回复
6
feilusia|  楼主 | 2013-10-30 08:51 | 只看该作者
lee2k 发表于 2013-10-29 22:10
这是编译器的问题,如果编译器将int认为16位,那么在这个编译环境中就是16位,
如:Keil C和IAR中int都是16 ...

还是不行····

使用特权

评论回复
7
feilusia|  楼主 | 2013-10-30 08:54 | 只看该作者
我试了unsigned long int\unsigned int\unsigned long\long都不行,看来最多只能到16位了

使用特权

评论回复
8
游浪星| | 2013-10-30 09:40 | 只看该作者
unsigned long  int 都是16位的?不肯能吧。 一般short int 至少是16位,int 看编译环境,long int 至少32位啊

使用特权

评论回复
9
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位位宽

使用特权

评论回复
10
戈卫东| | 2013-10-30 10:14 | 只看该作者
unsigned long没有问题,

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

使用特权

评论回复
11
戈卫东| | 2013-10-30 10:16 | 只看该作者
或者是变量结束了生命期,在运行到timeout2--这一行之前,应该能看到它的.

使用特权

评论回复
12
feilusia|  楼主 | 2013-10-30 10:35 | 只看该作者
戈卫东 发表于 2013-10-30 10:14
unsigned long没有问题,

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

你用的编译器是什么?我用的是IAR FOR STM8

使用特权

评论回复
13
戈卫东| | 2013-10-30 10:37 | 只看该作者
我也是IAR FOR STM8----1.40.1好像....

使用特权

评论回复
14
feilusia|  楼主 | 2013-10-30 11:06 | 只看该作者
戈卫东 发表于 2013-10-30 10:37
我也是IAR FOR STM8----1.40.1好像....

我的是1.30的

使用特权

评论回复
15
戈卫东| | 2013-10-30 11:12 | 只看该作者
1.30也不会连long都不支持吧.....

使用特权

评论回复
16
戈卫东| | 2013-10-30 11:13 | 只看该作者
你在你的timeout2--那里放个断点看看......

使用特权

评论回复
17
feilusia|  楼主 | 2013-10-30 11:31 | 只看该作者
戈卫东 发表于 2013-10-30 11:13
你在你的timeout2--那里放个断点看看......

看来是IAR把用完的局部变量就优化掉了。IAR真牛X···

QQ截图20131030112754.jpg (10.31 KB )

QQ截图20131030112754.jpg

QQ截图20131030112740.jpg (8.66 KB )

QQ截图20131030112740.jpg

使用特权

评论回复
18
戈卫东| | 2013-10-30 11:37 | 只看该作者
这种优化很常见.......现在差不多所有编译都会这么做.
而已这很可能BEBUGGER的行为----在这一句之后,timeout2已经结束了它的生命期,为它分配的存储已经无效,DEBUGGER会给出"unavailable"信号.

使用特权

评论回复
19
feilusia|  楼主 | 2013-10-30 11:46 | 只看该作者
戈卫东 发表于 2013-10-30 11:37
这种优化很常见.......现在差不多所有编译都会这么做.
而已这很可能BEBUGGER的行为----在这一句之后,timeou ...

嗯,明白了,谢谢你们的回答,非常感谢

使用特权

评论回复
20
明月小厨| | 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

主题

1957

帖子

94

粉丝