尝试遍历整个内存空间,过早重置地址变量

时间:2019-04-25 00:16:45

标签: c memory hex microblaze

我有一个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

1 个答案:

答案 0 :(得分:0)

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