@progchip666

Каким образом избавиться от сообщения об неиспользуемых переменных?

В практике ембеддера достаточно часто приходится использовать переменую для считывания значения регистра. Причём сама считанная величина в дальнейшем не требуется, важен лишь сам факт считывания регистра в процессе которого происходит сброс служебных бит.
Всё бы ничего, но при этом возникают надоедливые сообщения о том, что переменная проинициализирована, но нигде не используется. Как в приведённом ниже примере случилось с переменной status.
Вопрос - можно ли с помощью хитрого объявления переменной исключить генерацию данных предупреждений? И да, речь идёт о языке ANSI С

void I2C1_EV_IRQHandler()//приём данных в режиме SLAVE
{
  uint16_t status;


  if (I2C_GetITStatus(I2C1, I2C_IT_ADDR) == SET)
   {//проверяем адрес устройства
    status = I2C1->SR1;
    status = I2C1->SR2;
    SlaveBufPos = 0;
   }


Ещё одно важное дополнение.
Очень хотелось бы также чтобы в результате изменения уровня оптимизации компилятор не "оптимизировал строчки"
status = I2C1->SR1;
    status = I2C1->SR2;
  • Вопрос задан
  • 351 просмотр
Пригласить эксперта
Ответы на вопрос 6
@vilgeforce
Раздолбай и программист
Запрет на "оптимизацию" возможно получится сделать объявив переменную volatile
Ответ написан
@MiiNiPaa
Попробуйте присвоить переменную самой себе. Нормальный компилятор эту операцию выкинет, а предупреждение не сгенерирует.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Тут всё зависит от конкретного компилятора, скажем в Visual Studio предупреждения можно отключать через #pragma по номеру.
Ответ написан
Adamos
@Adamos
void check_register( uint16_t status ) { status = status; }
или
uint16_t check_register( uint16_t status ) { return status; }
и вызывать
check_register(I2C1->SR1);
нормальный компилятор вызывать такую функцию не будет, но проигнорировать ее тоже не сможет ;)
Ответ написан
Комментировать
@Hydro
C#/.NET Developer
@progchip666 Автор вопроса
Изящный выход из положения, нужно будет попробовать!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы