В цикле while не срабатывает условие НЕ РАВНО

что то опять туплю или не понимаю, есть цикл


		unsigned char cardState;
		unsigned long waitState = 0x0FUL;
		do {
			if (!h743sendAndTestCMDtoSDcard(SD_CMD_SEND_STATUS, SDCard.RCA << 16, SD_WAITRESP_SHORT_CRC)) return false; // CMD13
			delay_ms(1UL);
			cardState = (((SDMMC1->RESP1) & SD_STATE_MASK) >> 9) & 0x000000FF; // Find out a card status
		} while ((cardState |= needState) && ((--waitState) != 0));
		if (cardState == needState) return true;
		if (waitState) return true;
		printf("-state %d to %d steps left %d wait %d-\r\n", (unsigned int)cardState, (unsigned int)needState, (unsigned int)repeatSteps, (unsigned int)waitState);

вывод:

  • -state 7 to 4 steps left 4 wait 0-
    -inited- 1

Все типа хорошо.

Комментирую строку 8 (которая и не нужна по факту)

//if (cardState == needState) return true;

и все ломается

-state 7 to 4 steps left 4 wait 0-
-state 4 to 4 steps left 3 wait 0-
-state 4 to 4 steps left 2 wait 0-
-state 4 to 4 steps left 1 wait 0-
-state 4 to 4 steps left 0 wait 0-

почему не отрабатывает условие?

(cardState |= needState)

А это не равно? Или имеется ввиду !=

2 лайка

вот я :man_facepalming:

спасибо!

невнимательность…..

1 лайк