misyachniy (11.03.2019 21:38, просмотров: 404) ответил rual на Всё ж не понятно, функция есть функция, обязан читать каждый раз.
Не видно описания констант и переменных 1)Компилятор мог заинлайнить функцию.
2) Кроме того мог сравнивнить 2 выражения
1 if (status != I2C2_MESSAGE_PENDING) return true;
else false;
2 while (!i2c_transaction_complite())
и получить while (status == I2C2_MESSAGE_PENDING)
Затем сравнив типы status и I2C2_MESSAGE_PENDING принять решение, о том что выражение
while (!i2c_transaction_complite()) всегда true.
Лучше писать выражение подлиннее используя регистр периферии в котором находится флаг.
Так как регистр всегда описывают как volatile.
Например:
while ((register_with_flag & I2C2_MESSAGE_PENDING ) == 0)