我有特定的代码来自u-boot,bootloader,其中地址被强制转换为函数指针但不确定是什么目的正在进行
void (*kernel)(bd_t *, ulong r4, ulong r5, ulong r6,ulong r7, ulong r8, ulong r9);//prototype
kernel = (void (*)(bd_t *, ulong, ulong, ulong,ulong, ulong, ulong))images->ep;
当第一个语句寄存器r4,r5,r6,r7,r8,r9在后来的函数被调用时被初始化??
其中images-> ep是存储器的地址,bd_t是bord信息结构。
任何人都可以告诉我将套管地址输入函数指针的目的。
答案 0 :(得分:3)
好吧,大概他们会在某个时候将该指针称为函数。原始结构条目名称为ep
的事实告诉我们 - 这可能代表“入口点”。是否有类似的东西:
kernel(....) // appropriate arguments inserted
或
(*kernel)(....)
稍后在代码中找到?
正如你所提到的,images->ep
是一个“内存地址”,这可能意味着它是某种指针类型。在标准C中,指针类型之间的转换需要显式转换(除非其中一个是void *
)。