- 
	- Ну ОК. Вроде работает. И уже достаточно изящно - не генерирует
лишнего кода.  Nikolay_Po(3007 знак., 01.07.2025 19:13)
			- Маленькое дополнение, вместо .En=1 писать .En=~0 что бы оно
работало независимо от размера в битах поля En - AlexBi(02.07.2025 11:44)
					- Спасибо. - Nikolay_Po(02.07.2025 13:49)
 
 
- Маленькое дополнение, вместо .En=1 писать .En=~0 что бы оно
работало независимо от размера в битах поля En - AlexBi(02.07.2025 11:44)
					
- Оставь как есть. Компилятор не дурак, перенесет все в одну охапку.
Вот если бы речь была про какой-нибудь регистр периферии
(объявленый через volatile), тогда да. Такую переменную надо
сначала присвоить локальной, а уже из локальной - переносить по
битику, там уже компилятор разберется как объединить. - il-2(01.07.2025 15:59)
			- У меня многое обрабатывается в прерываниях и потому, нередко, переменные именно volatile. Спасибо ТСу за вопрос - вроде как нашёл решение, см. выше. Nikolay_Po(1 знак., 01.07.2025 23:01, ссылка)
- И я того же мнения. Но хочется наверняка. - IBAH(01.07.2025 17:16)
					- >>>  SciFi(1 знак., 01.07.2025 17:28, ссылка)
							- Не грузиться... - IBAH(01.07.2025 18:12)
									- Там странный результат AlexBi(1 знак., 01.07.2025 18:20, картинка)
 
 
- Не грузиться... - IBAH(01.07.2025 18:12)
									
 
- >>>  SciFi(1 знак., 01.07.2025 17:28, ссылка)
							
- Компилятор можно проверить заглянув одним глазком в асм. И про ключи оптимизации не забыть. - =AlexD=(01.07.2025 16:09)
 
- Может, Compound literal?  Nikolay_Po(659 знак., 01.07.2025 13:52 - 13:59)
			- Так в это и вопрос. Как автоматически компилятору получить Mask на
основании битового поля - IBAH(01.07.2025 13:55)
					- да только нафига такое..  POV(1 знак., 01.07.2025 14:01, картинка)
							- Вот правильное решение, и автор уверяет что макрос считается на этапе компиляции, но я чего-то сомневаюсь. Поэтому поддерживаю "да только нафига такое.." IBAH(684 знак., 01.07.2025 15:09, ссылка)
- Чего-то какая-то лажа... чему sizeof равен? 0.5? А текстом нельзя вставить, лениво скобки считать - IBAH(01.07.2025 14:19)
 
- Через Compound Literal. Кто выбирает битовое поле? Парсер? - Nikolay_Po(01.07.2025 14:01)
- Откуда известно, какие параметры нужно копировать? Все ли они однобитовые? - Nikolay_Po(01.07.2025 14:00)
 
- да только нафига такое..  POV(1 знак., 01.07.2025 14:01, картинка)
							
 
- Так в это и вопрос. Как автоматически компилятору получить Mask на
основании битового поля - IBAH(01.07.2025 13:55)
					
- Ты спрашиваешь про маску, но выполняешь просто копирование. Врядли
оно может быть более эффективно написанного. - POV(01.07.2025 13:42)
			- ну если бы я знал маску, то что нибудь вроде RegSost =(RegSost |
(ModBusOutReg[0]&Mask))&(~(ModBusOutReg[0]&Mask)); - IBAH(01.07.2025 13:52)
					- См. Compound literal, пример выше. - Nikolay_Po(01.07.2025 13:54)
 
 
- ну если бы я знал маску, то что нибудь вроде RegSost =(RegSost |
(ModBusOutReg[0]&Mask))&(~(ModBusOutReg[0]&Mask)); - IBAH(01.07.2025 13:52)
					
- В каком смысле "эффективнее"? - SciFi(01.07.2025 13:40)
			- ну, например, за одну операцию. Вдруг я в следующий раз захочу 10
битов копировать, так что их все по одному... - IBAH(01.07.2025 13:44)
					- Баловство это всё. Но если непременно хочется битовых полей, то
можно объединить их (union) с обычным широким целым типом и
накладывать маски, как обычно. Это будет баловство в квадрате. - SciFi(01.07.2025 13:49)
							- Если нужно, почему нет? У AVR есть, например, "аппаратный юнион" -
регистр GPIOR0 с побитовой адресацией. Можно манипулировать как
отдельными битами, так и оптом, GPIOR0 = 0; - vpv.vpv(01.07.2025 15:02)
									- 1) На самом деле не нужно. 2) Почему нет - об этом весь этот топик. - SciFi(01.07.2025 15:12)
- ТС хочет за раз копировать несколько полей структуры. Битовая адресуемость памяти или регистров беполезна. - POV(01.07.2025 15:06)
 
 
- Если нужно, почему нет? У AVR есть, например, "аппаратный юнион" -
регистр GPIOR0 с побитовой адресацией. Можно манипулировать как
отдельными битами, так и оптом, GPIOR0 = 0; - vpv.vpv(01.07.2025 15:02)
									
 
- Баловство это всё. Но если непременно хочется битовых полей, то
можно объединить их (union) с обычным широким целым типом и
накладывать маски, как обычно. Это будет баловство в квадрате. - SciFi(01.07.2025 13:49)
							
 
- ну, например, за одну операцию. Вдруг я в следующий раз захочу 10
битов копировать, так что их все по одному... - IBAH(01.07.2025 13:44)
					
 
- Ну ОК. Вроде работает. И уже достаточно изящно - не генерирует
лишнего кода.  Nikolay_Po(3007 знак., 01.07.2025 19:13)