Попытка выполнить итерацию по всему пространству памяти, слишком быстрый сброс переменной address

#c #memory #hex #microblaze

#c #память #шестнадцатеричный #microblaze

Вопрос:

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

В настоящее время основные подпрограммы находятся в цикле 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.Каковы типы, объявление и как инициализируются переменные: addr MEM_TOP_ADDR MEM_1_TOP_ADDR MEM_1_BASE_ADDR addr_1 ? Что такое MEM_SCANNER_1 и MEM_SCANNER() и LFSR_runtime() ? Опубликованный вами фрагмент кода содержит очень мало контекста.

2. Я вижу, насколько это пусто сейчас, все типы данных u32

Ответ №1:

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