您知道为什么某些C指令可以完全忽略吗?

时间:2018-10-18 14:27:35

标签: c microprocessors

您知道为什么可以完全忽略某些C指令吗?如何避免这种奇怪的行为?

复制错误或了解问题出现位置的详细信息

执行此功能时:

static u32 XFpga_GetBitstreamInfo(UINTPTR WrAddr,
                u32 *BitstreamAddress,
                u32 *BitstreamSize) {
    xil_printf("------1----Inside XFpga_GetBitstreamInfo------\r\n");
    u32 Status = XFPGA_SUCCESS;
    u32 PartHeaderOffset;
    u32 BitstreamOffset;

    xil_printf("------2----Before PartHeaderOffset------\r\n");
    PartHeaderOffset = *((UINTPTR *)(WrAddr + PARTATION_HEADER_OFFSET));
    xil_printf("------3----Before BitstreamOffset------\r\n");
    xil_printf("------ART----(WrAddr + PartHeaderOffset + BITSTREAM_PARTATION_OFFSET)=%p------\r\n",(WrAddr + PartHeaderOffset + BITSTREAM_PARTATION_OFFSET));
    xil_printf("------ART----*((UINTPTR *)(WrAddr + PartHeaderOffset + BITSTREAM_PARTATION_OFFSET)) = %u ------\r\n", *((UINTPTR *)(WrAddr + PartHeaderOffset + BITSTREAM_PARTATION_OFFSET)));
    BitstreamOffset = *((UINTPTR *)(WrAddr + PartHeaderOffset + BITSTREAM_PARTATION_OFFSET));
    xil_printf("------4.1----Before *BitstreamAddress------\r\n");
    xil_printf("------4.2----Before *BitstreamAddress------\r\n");
    xil_printf("------4.3----Before *BitstreamAddress------\r\n");
    *BitstreamAddress = (BitstreamOffset * WORD_LEN) + WrAddr;
    xil_printf("------5.1----Before *BitstreamSize------\r\n");
    xil_printf("------5.1----Before *BitstreamSize------\r\n");
    *BitstreamSize = *((UINTPTR *)(WrAddr + PartHeaderOffset)) * WORD_LEN;

    return Status;
}

输出为

------1----Inside XFpga_GetBitstreamInfo------
------2----Before PartHeaderOffset------
------3----Before BitstreamOffset------
------ART----(WrAddr + PartHeaderOffset + BITSTREAM_PARTATION_OFFSET)=7030001F------
------4.2----Before *BitstreamAddress------
------4.3----Before *BitstreamAddress------
------5.1----Before *BitstreamSize------
------5.1----Before *BitstreamSize------

如您所见,*BitstreamAddress = (BitstreamOffset * WORD_LEN) + WrAddr;行周围的所有指令都被完全忽略(这就是为什么我在此问题中提出的代码中有这么多“ printf”的原因:弄清楚问题出在哪里)。

上下文:

  • 使用Xilinx开发的zcu102板
  • 在PMU处理器上运行编译的代码
  • 我正在调试的代码是XilFPGA库4.0版的一部分。可以从this git repository下载源文件。
  • 我正在使用Vivado SDK 2018.1编译PMU固件,并一致地编译源代码的存储库2018.1。但是,我尝试使用其他版本来验证这种奇怪的行为是否消失。问题仍然存在。

对我可以调查的内容有何想法?

0 个答案:

没有答案