Если я владею более оптимальным методом, то о какой трате времени
речь? Вот простой пример. Эти два выражения делают одно и то же, а
код во втором случае получается более оптимальным. GPIOA->BSRR = 1<<16;
*((volatile uint16_t *)&GPIOA->BSRR+1) = 1;
Много я потрачу времени, применяя это знание? А если оберну это в класс и поручу применять эту оптимизацию компилятору? Он это делает без устали и траты моего времени. Можно дальше развить идею.
template<uint32_t PM=PinsMask>
static inline void Clear()
{
if constexpr (PM == 0xFFFF)
base()->ODR = 0;
else if constexpr (PM == 0x00FF)
*pVU8(&base()->ODR) = 0;
else if constexpr (PM == 0xFF00)
*(pVU8(&base()->ODR) + 1) = 0;
else if constexpr((PM & 0xFF)==0)
*(pVU8(&base()->BSRR)+3) = PM>>8;
else
*(pVU16(&base()->BSRR)+1) = PM;
}
Трата времени в конечном итоге будет экономией. Потому что вместо первого выражения я буду писать
PA0::Clear();