ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
1037061 Топик полностью
SciFi (16.09.2020 14:06, просмотров: 766) ответил teap0t на Вопрос на самом деле возник из-за того, что при компиляции появляется туча отметок "Remark[Pa091]: operator operates on value promoted to int (with possibly unexpected result)" возле кода вида
Нужно так: 
uint16_t tmpccer = 0,
tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP);

Лишние приведения к uint16_t ни к чему. Перед оператором | выполняется приведение к int. Перед & также tmpccer приводится к int. Ну а перед присваиванием int приводится к uint16_t, но в старших разрядах нули, поэтому пофиг.

Поправка. Перед оператором | выполняется приведение к int, если TIM_CCER_CC4P и TIM_CCER_CCNP имеют тип меньше, чем int (uint16_t, например). Можно себе представить, что TIM_CCER_CC4P и TIM_CCER_CCNP имеют тип uint32_t (я в хедеры не заглядывал), в этом случае перед & также tmpccer будет приводится к uint32_t.

ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้