从指向uint32的指针进行类型转换

时间:2018-05-29 09:44:01

标签: c++ pointers casting int linker-scripts

我浏览了一个链接描述符文件并找到了以下代码行,我无法理解这里使用的类型转换概念。

extern std::uintptr_t   __sROData_LMA[]; /* start of LOAD region for DATA */
uint32_t * p_src, * p_dest;
#ifdef XMC_BOOT
    // Copy the rodata segment initializers from ROM to RAM.
    // Note that all data segments are aligned by 4.
    p_src  = static_cast<uint32_t *>(static_cast<void*>(__sROData_LMA));
    p_dest = static_cast<uint32_t *>(static_cast<void*>(__sROData));
    while (p_dest < static_cast<uint32_t*>(static_cast<void*>(__eROData)))
    {
        *p_dest++ = *p_src++;
    }
#endif

该计划中的p_src = static_cast<uint32_t *>(static_cast<void*>(__sROData_LMA));行意味着什么?如何在这里完成类型转换?提前致谢。

1 个答案:

答案 0 :(得分:2)

问题是,你不能取消引用一个void指针,而是一个uint32_t指针。 代码本身用于Copy the rodata segment initializers from ROM to RAM.,这是ELF二进制文件所需的。 实际上,这是一个mempcy