-
- Ну ОК. Вроде работает. И уже достаточно изящно - не генерирует
лишнего кода. 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)