0

我有一个 C 程序需要扫描从 0xC0000000 到 0xC0001FFF 的内存。在扫描器循环开始之前,有一个子程序用 0xFFFFFFFF 填充内存,这成功地通过了整个内存空间。然而,当主循环开始时,addr 变量在 0xC00003e0 而不是 0xC0001FFF 处重置。任何想法为什么会发生这种情况?让我知道是否需要包含其他内容。该程序使用 Microblaze 软处理器在 Basys3 FPGA 上运行。

目前主要的子程序存在于一个 while 循环中,while(addr <= MEM_TOP_ADDR)[检查 addr 是否小于或等于地址空间的末尾]。我以前的方法是if(addr >= MEM_TOP_ADDR),这两种方法都会导致相同的行为。

while(1){ //The main loop

        while(addr <= MEM_TOP_ADDR){
        LFSR_runtime();
        MEM_SCANNER();
        MEM_SCANNER_1();
        addr += 4;
        addr_1 += 4;
        if(addr_1 >= MEM_1_TOP_ADDR){
            addr_1 = MEM_1_BASE_ADDR;
        }
        }
        addr = MEM_BASE_ADDR;

    }
addr = MEM_BASE_ADDR;

在程序当前空间中,最多可以数到0xC00003e0,然后退出while循环。在退出 while 循环之前,它应该计数到 0xC0001FFF

4

1 回答 1

0

这是通过将地址变量移动到 MEM_SCANNER() 函数而不是将它们作为全局变量来解决的。

于 2019-04-25T00:47:58.600 回答