Беда в том, что у меня нет уверенности, что в дэйташите и в *.h файлах константы называются одинаково. По крайней мере, я уже встречался с ситуацией, что в разных *.h файлах одни и те же константы могут называться по-разному.
Кроме того, бывает, что некоторые параметры представлены не одним, а 2-3-4 битами, а то и вообще целиком служит для хранения какого-либо значения. Тогда сразу возникает неопределенность, какие константы получаются путем сдвига, а какие - нет.
у меня тоже нет такой уверенности, поскольку это зависит от добросовестности автора этих файлов
Использование именованных макросов для номеров битов в регистрах МК - стандарт как минимум для АВР. Если автор библиотеки придерживается этого стандарта - все будет хорошо.
А за всех мы отвечать не можем
Если в stm32cubeide открыть файл с определениями регистр, то там есть как и маска, так и позиция битов.
Что программисту удобнее, тем он и пользуется.
Спор ни о чем…
D:\Arduino\ard-1.8.19\portable\sketchbook\sketch_oct27a\sketch_oct27a.ino: In function 'void setup()':
sketch_oct27a:3:30: error: 'CMS1' was not declared in this scope
TIMER1_BASE->CR1 |= 1<<CMS1 | 1<<CMS0; //
^
sketch_oct27a:3:40: error: 'CMS0' was not declared in this scope
TIMER1_BASE->CR1 |= 1<<CMS1 | 1<<CMS0; //
^
exit status 1
'CMS1' was not declared in this scope
Похоже на то.
Вот и я о том: намного проще использовать числовую константу, чем для каждой конкретной архитектуры копаться в куче заголовочных файлов, чтобы выяснить, как писать “правильно”.
При этом простого способа “писать правильно” НЕ СУЩЕСТВУЕТ.
D:\Arduino\ard-1.8.19\portable\sketchbook\sketch_oct27a\sketch_oct27a.ino: In function 'void setup()':
sketch_oct27a:3:31: error: 'CMS1' was not declared in this scope
TIMER1_BASE->CR1 |= (1<<CMS1) | (1<<CMS0); //
^
sketch_oct27a:3:43: error: 'CMS0' was not declared in this scope
TIMER1_BASE->CR1 |= (1<<CMS1) | (1<<CMS0); //
^
exit status 1
'CMS1' was not declared in this scope
Среда разработки, естественно, Arduino IDE.
А какая разница, какой МК? Я хочу понять, как можно писать “правильно” (т.е. в виде TCCR0B |= (1 << CS00) | (1<<CS01);) без непропорциональных непроизводительных затрат времени на ковыряние в куче заголовочных файлов. Это либо работает на любом МК, либо не работает вообще.
Так это самое главное: либо существует способ писать подобные константы, пользуясь только дэйташитом, либо - не существует.
А когда тут “я знаю”, а тут - “я не знаю”, то это значит: “все должны писать так, чтобы удобно читать было именно мне”.