关于一个变量的定义

ddoeddoe 2009-04-17 02:16:01
Uint16 *souraddr;
souraddr = (Uint16 *)0x400000;

在程序里面有这样的变量定义
souraddr是16位地址的,可0x400000 是24位,可以赋值么?
...全文
34 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liaifeilove 2009-04-17
支持楼上的,补充一下
这种转换在编译器编译的时候就确定下来了.
你如果是16位系统,编译器将会将底16位强制转换,赋给souraddr ,也就是souraddr 指向0地址
回复
paul_chao 2009-04-17
souraddr 是 指向 16 位地址 的指標 (Pointer), 其大小與機器有關.

在不同的機器上, pointer 的最大值會有所不同, 16-bits CPU, 其值為 0x0000 ~ 0xFFFF, 32-bits CPU, 其值為 0x00000000 ~ 0xFFFFFFFF.

所以本題應為與你的機器 (或曰 compiler) 相關, 不一定.

Paul, Chao @ Techware
回复
ddoeddoe 2009-04-17
会有什么问题?
一般情况怎么赋值?
还有,我们经常看到: #define EXTINT (*((volatile unsigned char *) 0xE01FC140)) 把一个32位地址转成16位的?
回复
91program 2009-04-17
可以

但有问题
回复
相关推荐
发帖
嵌入开发(WinCE)
创建于2007-09-28

1.9w+

社区成员

硬件/嵌入开发 嵌入开发(WinCE)
申请成为版主
帖子事件
创建了帖子
2009-04-17 02:16
社区公告
暂无公告