Знаете ли вы, почему некоторые инструкции 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")вопрос: выяснить, в чем проблема)на процессоре PMU
Код, который я отлаживаю, является частью библиотеки XilFPGA версии 4.0.Исходные файлы можно загрузить из
этого репозитория git . Я использую Vivado SDK 2018.1 для компиляции прошивки PMU и, соответственно, репозиторий 2018.1 для исходного кода.Тем не менее, я попытался использовать другие версии, чтобы проверить, исчезает ли это странное поведение.Проблема все еще существует.
Есть идеи о том, что я могу исследовать?