|
uboot目录下有这样一个c文件common/env_flash.c,其中有这样一个函数
int env_init(void)
{
#ifdef CONFIG_OMAP2420H4
int flash_probe(void);
if(flash_probe() == 0)
goto bad_flash;
#endif
if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
gd->env_addr = (ulong)&(env_ptr->data);
gd->env_valid = 1;使用include/configs/smdk2410.h配置的环境变量则设置环境变量可用标志
return(0);
}
#ifdef CONFIG_OMAP2420H4
bad_flash:
#endif
gd->env_addr = (ulong)&default_environment[0];
gd->env_valid = 0; 使用默认的环境配置变量则设置环境变量不可用标志
return (0);
}
问题:上函数中有这样一句代码
gd->env_addr = (ulong)&(env_ptr->data);
小弟最觉得这句话有问题。env_ptr所指出的成员变量data是一个数组,所以前面不需要用&来取他的地址,env_ptr->data本身就已经是地址了。所以小弟以为改成如下:
gd->env_addr = (ulong)(env_ptr->data);
或
gd->env_addr = (ulong)&(env_ptr->data[0]);
就如同此函数中这样一句代码:
gd->env_addr = (ulong)&default_environment[0];
至于此uboot为什么能编译运行正确,个人觉得编译器也能认源码那种方式。
求c语言大学给予帮助!!!!!!!!!
谢谢!!!!
回头我自己也验证下!!!!
|
|