Знаете ли вы, почему некоторые инструкции C могут быть полностью проигнорированы? - PullRequest
0 голосов
/ 18 октября 2018

Знаете ли вы, почему некоторые инструкции 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 для исходного кода.Тем не менее, я попытался использовать другие версии, чтобы проверить, исчезает ли это странное поведение.Проблема все еще существует.

Есть идеи о том, что я могу исследовать?

...