#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 () вместо того, чтобы использовать их в качестве глобальных переменных.