Вместо
for (j=0; i<5; i++)
напишите
for (j=0; j<5; j++)
Вы видите свою опечатку?
РЕДАКТИРОВАТЬ
Давайте посмотрим на ваш бесконечный цикл. Вы написали это так (я немного исправил пробелы):
while (1) {
GPIO_PORTN_DATA_R &= ~0X02; //turn led off
while (GPIO_PORTJ_AHB_DATA_R & 0X01) {
GPIO_PORTN_DATA_R |= 0X01; //turn led on
SysCtlDelay(2666666);
GPIO_PORTN_DATA_R &= ~0X01; //turn led off again
SysCtlDelay(2666666);
}
for (j = 0; j < 5; j++) {
GPIO_PORTN_DATA_R |= 0X01; //turn led on
SysCtlDelay(2666666);
GPIO_PORTN_DATA_R &= ~0X01; //turn led off again
SysCtlDelay(2666666);
}
GPIO_PORTN_DATA_R |= 0X02; //clear the interrupt flag before return
}
Сначала мы исправим последний комментарий и добавим номера светодиодов, основываясь на их битовой позиции. Тогда давайте заменим GPIO_PORTN_DATA_R |= 0x01
на SwitchLedOn(0)
и GPIO_PORTN_DATA_R &= ~0x01
на SwitchLedOff(0)
. И давайте сделаем то же самое с GPIO_PORTN_DATA_R
/ 0x02
и SwitchLedO*(1)
. Далее мы можем заменить GPIO_PORTJ_AHB_DATA_R & 0X01
на IsSwitchUp(0)
.
while (1) {
SwitchLedOff(1); //turn led 1 off
while (IsSwitchUp(0)) {
SwitchLedOn(0); //turn led 0 on
SysCtlDelay(2666666);
SwitchLedOff(0); //turn led 0 off again
SysCtlDelay(2666666);
}
for (j = 0; j < 5; j++) {
SwitchLedOn(0); //turn led 0 on
SysCtlDelay(2666666);
SwitchLedOff(0); //turn led 0 off again
SysCtlDelay(2666666);
}
SwitchLedOn(1); //turn led 1 on
}
Теперь все ясно. Когда источник записан, есть две равные последовательности операторов, которые мигают светодиодом 0 один раз. Внутренний while
-петль повторяет это до тех пор, пока переключатель 0 не нажат. Если выключатель нажимается после периода мигания, петля остается влево и начинается цикл for
. Это позволяет одному светодиоду мигать 5 раз. Затем включается светодиод 1. Но только на очень короткое время, потому что повторяется внешний while
-петль, который в самом начале выключает светодиод 1.
Если переключатель все еще нажат, внутренний while
-петль будет пропущенпрямо к for
-циклу. Если он больше не нажимается, внутренний while
-петль будет ждать следующего нажатия.
В любом случае, мы можем не видеть на светодиоде 0, где мы находимся в коде.