Попытка перебрать все пространство памяти, сбросить переменную адреса слишком рано - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть программа на C, которая должна сканировать память от 0xC0000000 до 0xC0001FFF. Перед началом цикла сканера есть подпрограмма, которая заполняет память 0xFFFFFFFF, и она успешно проходит через все пространство памяти. Однако когда начинается основной цикл, переменная addr сбрасывается в 0xC00003e0, а не в 0xC0001FFF. Есть идеи, почему это может происходить? Дайте мне знать, если мне нужно включить что-нибудь еще. Эта программа работает на FPGA Basys3 с использованием программного процессора Microblaze.

В настоящее время первичные подпрограммы находятся в цикле 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 завершается. Он должен считать до 0xC0001FFF перед выходом из цикла while

1 Ответ

0 голосов
/ 25 апреля 2019

Это было решено путем перемещения адресных переменных в функцию MEM_SCANNER () вместо того, чтобы иметь их в качестве глобальных переменных.

...