我有一个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
这是通过将地址变量移动到MEM_SCANNER()函数而不是将它们作为全局变量来解决的。