找回密码
 注册
搜索
查看: 901|回复: 6

[讨论] 请高手指教一下代码

[复制链接]
发表于 2006-7-24 14:02:00 | 显示全部楼层 |阅读模式
extern void load_image(void) /*firmware loading*/
{
vuns_16 read_data1 = 0;
vuns_16 read_data2 = 0;
volatile unsigned long  *r_data;

int boot_size =FIRMWARE_SIZE;
int k;
if (( (unsigned long)((unsigned long *)r_data)= FIRMWARE_ADDR)== NULL) {
  printf ("## FIRMWARE ERROR ##\n");
  return ;
}
........
}
各位高人,上面代码是一个从FLASH ROM地址FIRMWARE_ADDR取固件的程序,想问一下if 语句中用的第一个unsigned long 做什么的?谢谢!
if (( (unsigned long)((unsigned long *)r_data)= FIRMWARE_ADDR)== NULL)
 楼主| 发表于 2006-7-24 16:41:00 | 显示全部楼层
怎么没有人遇到过这个用法吗?
点评回复

使用道具 举报

发表于 2006-7-24 17:08:00 | 显示全部楼层
是定义 ((unsigned long *)r_data) 这个指针所指的数据为  unsigned long 型。
点评回复

使用道具 举报

 楼主| 发表于 2006-7-24 17:42:00 | 显示全部楼层
我把((unsigned long *)r_data)中的unsigned long 认为是楼上这位所说的意义了,那还请解释一下这个(unsigned long)((unsigned long *)r_data)= FIRMWARE_ADDR,
谢谢!
点评回复

使用道具 举报

发表于 2006-7-26 15:10:00 | 显示全部楼层
(unsigned long)((unsigned long *)r_data)= FIRMWARE_ADDR
                        ~~~~~~~~~~~~~~~这部分是把指针格式化成unsigned long 类型的指针
~~~~~~~~~~~~~~~~~~~~~~~~~~再把这个指针的值(不是指针所指的内容)强制转化 成unsigned long以方便给FIRMWARE_ADDR赋值
点评回复

使用道具 举报

发表于 2006-8-1 15:36:00 | 显示全部楼层
FIRMWARE_ADDR的類型應該是unsigned long類型的.如果要把FIRMWARE_ADDR的值賦給r_data的話,編譯器就要求進行類型轉換:(unsigned long)(XXX)=FIRMWARE_ADDR.
点评回复

使用道具 举报

发表于 2006-8-1 22:03:00 | 显示全部楼层
5楼正解
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-2-24 07:24 , Processed in 0.050932 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表