У меня есть курсовая работа по разработке конечной машины на микропроцессоре Microblaze в C. Проблема заключается в том, что мне нужно изменить определенное изображение. Скажем, я нажимаю BTNL на FPGA; Я должен быть представлен пейзажной картиной в течение 5 секунд, и через определенные 3 секунды я должен сделать эту картинку вспышкой. В то же время на 7-сегментном дисплее должно отображаться время 5s -> 0s. Это тот случай, когда кнопка была обнаружена, и должен отображаться мигающий режим. Прерывание происходит каждые 0.004s , а часы микропроцессора 100 МГц.Обработка прерываний FPGA в C
for(j=0; j<=5secs; j++)
{
if(j>3secs)
{
if(counter == sec){
counter=0;
if(temp==white){ //white background
temp=background;
}
else temp=white;
}else counter++;
XGpio_DiscreteWrite(®ION[4],1,temp);
}
else XGpio_DiscreteWrite(®ION[4],1,temp);
if(j==5secs)
states = IDLE;
}
Основная проблема заключается в отображении номера на 7-сегментном дисплее. Когда я помещаю функцию displayNumber()
в корпус, вся вещь просто зависает, как только она переходит к линии displayNumber()
. Я знаю, что вложенные петли for
стоят много времени и энергии, и я думаю, что это может вызвать проблему, но я не могу найти рабочего решения. Любые мысли или советы действительно оценены.
Другое дело, что я пытался с флагом, но из-за обработки прерывания он не работает.
EDIT: Я не пытаюсь получить решение для копирования/вставки моей проблемы. Все это довольно массивно, я имею в виду проект verilog вместе с файлами для других функций, выполненных в c. Я не ожидал, что вы запустите код и воспроизведете все это, потому что мне был предоставлен проект Verilog в школе, поэтому вам нужно создать бит-поток, а затем загрузить и запустить все это на доске. Я здесь просто ищу предложение о том, как бы вы улучшили это, столкнулись с таким поведением с FPGA, любыми идеями.
Спасибо за потраченное время, чтобы прочитать вопрос!
Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. – Olaf
«Мой код dosn't work» не является ** конкретной ** проблемой. У нас нет вашего оборудования, поэтому вам нужно предоставить дополнительную информацию. Например. используйте отладчик. – Olaf
Вы делаете все это внутри обработчика прерываний? Если вам это нужно, вам нужно подумать о том, что произойдет, если произойдет другое прерывание. –