有个小问题不理解,想请大家帮忙下
这个是代码:
gd=(gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t));
gd->bd = (bd_t*)((char*)gd-sizeof(bd_t));
memset(gd->bd,0,sizeof(bd_t));
gd是结构体
typedef struct global_data
{
bd_t *bd;
unsigned long flags;
.....
}gd_t;
内存分布图
_armboot_start 指向0x33f8_0000
看这段代码的意思是想给结构体gd_t中db成员初始化,但是我不明白的是红色的那句,按照他的计算,怎么感觉 db都已经出了 gb区啊?
gd=(gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t));
执行完,gd应该指向gd和IRQ之间了吧,那么要访问gd->db 为什么是(bd_t*)((char*)gd-sizeof(bd_t))?这个一减 不是到IRQ区了啊?大家帮忙看看啊,谢谢了