您知道为什么可以完全忽略某些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”的原因:弄清楚问题出在哪里)。
上下文:
对我可以调查的内容有何想法?