-
- Команд для эффективной работы с группами битов в у кортексов нет. Все врукопашную, через маски и сдвиги. Если нужно красиво работать с единичными битами - юзайте bitband - LightElf(24.11.2019 16:29)
- это чейто нету то сразу, я думаю всетаки что то есть - klen(24.11.2019 16:49, ссылка)
- Мой косяк, меньше надо на M0 сидеть ;) LightElf(33 знак., 24.11.2019 18:40 - 18:42)
- 3.8. Bitfield instructions klen(590 знак., 24.11.2019 16:52)
- это чейто нету то сразу, я думаю всетаки что то есть - klen(24.11.2019 16:49, ссылка)
- Юзай сайт RxTx(381 знак., 24.11.2019 13:24, ссылка)
- Интересно, что православный компилятор генерирует более многословный код даже в версии 8.2 Sergey_N(30 знак., 25.11.2019 11:11)
- Православному надо добавить -mcpu=cortex-m3 - AlexBi(25.11.2019 11:37)
- -Os тоже иногда помогает. - SciFi(25.11.2019 11:39)
- Православному надо добавить -mcpu=cortex-m3 - AlexBi(25.11.2019 11:37)
- Интересно, что православный компилятор генерирует более многословный код даже в версии 8.2 Sergey_N(30 знак., 25.11.2019 11:11)
- я постарался сразу убить у себя в голове работу с битами при переходе с 8-битного АСМ на 32-битный Си. При 96Кбайт ОЗУ решил не экономить. - Лагунов(24.11.2019 08:18)
- вот пример как оно есть.. klen(1529 знак., 24.11.2019 00:25)
- Спасибо. Похоже, мои опасения не напрасны. - VLLV(24.11.2019 10:02)
- Хороший пример. Надо было ещё с хексом, чтобы байты было видно. Там же инструкции переменной длины. ТСу предлагаю поколдовать с макросами и сделать код, который умеет работать с битовыми полями и без них. Собрать оба варианта и сравнить размеры. - SciFi(24.11.2019 08:25)
- а макросы нахуа? макросы зло злое. макросы ненужны, реальным пацанам нужны инлайн функции.. так что с битами не так? какие опасения оправдались? оправдались все плохо, или оправдались все хорошо? - klen(24.11.2019 11:44)
- Макросы - чтобы сделать для них 2 реализации, не трогая прикладной код. Потом сравнить выхлоп. - SciFi(24.11.2019 14:24)
- и...хде код на трепанацию? - klen(24.11.2019 16:30)
- ТС вполне способен самостоятельно. Может быть, подмастерья найдёт... - SciFi(24.11.2019 16:36)
- и...хде код на трепанацию? - klen(24.11.2019 16:30)
- Выглядит все плохо - куча каких- то команд. Нужно сравнивать более конкретно, совет выше верный. - VLLV(24.11.2019 12:22)
- Макросы - чтобы сделать для них 2 реализации, не трогая прикладной код. Потом сравнить выхлоп. - SciFi(24.11.2019 14:24)
- а макросы нахуа? макросы зло злое. макросы ненужны, реальным пацанам нужны инлайн функции.. так что с битами не так? какие опасения оправдались? оправдались все плохо, или оправдались все хорошо? - klen(24.11.2019 11:44)
- Да-да, и мне расскажите! :) В частности интересует сравнительный размер кода при работе с uint16_t и uint32_t - не станет ли код длиннее, если укоротить переменные с uint32_t до uint16_t? - Ксения(23.11.2019 21:38 - 21:43)
- пример "работы" в студию, все как всегда зависит от нюансов а не от того 16битные или 32бтные операнды, если писать грамотно и понимать компилятор - то он все раскидает квазиоптимальным способом. - klen(24.11.2019 13:17)
- Я в своем коде уже давно использую такой расклад: il-2(328 знак., 24.11.2019 08:43)
- Меня fastXX_t категорически не устраивает. Я не пишу код для абстрактной архитектуры, а у своего конкретного МК желаю точно знать, что для него fast, а что неfast, и в каких случаях. Не желаю позволять линкеру самому решать, каким быть размерам у Ксения(151 знак., 24.11.2019 12:12)
- Банальная логика подсказывает, что пока размер переменной меньше или равен разрядности процессора, быстродействие одинаково. - VLLV(24.11.2019 13:17)
- Солидарна с мнением fk0 из предыдущего сообщения, т.к. сама с этим ранее сталкивалась на x64, когда при работе с более короткими числами порой приходится добавлять команду расширения знака. Из-за этого прямые операции с памятью бывают затруднены - Ксения(157 знак., 24.11.2019 14:14)
- Не использую знаковую арифметику :) - VLLV(24.11.2019 17:33)
- Это правильно :) - Ксения(24.11.2019 17:34)
- Не использую знаковую арифметику :) - VLLV(24.11.2019 17:33)
- Банальная логика подсказывает, что работа с байтами на 32-битной машине требует массу лишних инструкций (знаковое или беззнаковое расширение байта до слова, маскировка слова до байта, если процессор не умеет загружать байты, или специальные fk0(36 знак., 24.11.2019 13:22)
- Если речь об ARM, то загружать байты и полуслова он может. - VLLV(24.11.2019 17:56)
- Солидарна с мнением fk0 из предыдущего сообщения, т.к. сама с этим ранее сталкивалась на x64, когда при работе с более короткими числами порой приходится добавлять команду расширения знака. Из-за этого прямые операции с памятью бывают затруднены - Ксения(157 знак., 24.11.2019 14:14)
- Ну что тут скажешь... Больше пишите сами, меньше читайте что пишут другие... - il-2(24.11.2019 13:10)
- Банальная логика подсказывает, что пока размер переменной меньше или равен разрядности процессора, быстродействие одинаково. - VLLV(24.11.2019 13:17)
- Глобальных переменных мало, там заморочки не нужны. Поэтому int. Массивы - отдельная история, конечно. - SciFi(24.11.2019 08:47)
- Меня fastXX_t категорически не устраивает. Я не пишу код для абстрактной архитектуры, а у своего конкретного МК желаю точно знать, что для него fast, а что неfast, и в каких случаях. Не желаю позволять линкеру самому решать, каким быть размерам у Ксения(151 знак., 24.11.2019 12:12)
- а у вас все переменные uint32 ??? - Aleksey_75(23.11.2019 21:53)
- Мне просто не нужны такие длинные, но есть опасение, что 32-разрядному контроллеру будет напряжно, если я стану считать арифметику на 16-разрядных числах. Растягивает ли он операнды до 32-х разрядов перед тем, как производить с ними операции, или Ксения(91 знак., 23.11.2019 22:14)
- Я приводил результаты своих замеров =>, но никто не мешает вам сделать свои. - йцукен(24.11.2019 11:17, ссылка)
- IMHO, контроллеру плевать - что загружено, то и выполнит. Компилятор/линкер могут родить более или менее оптимальный код. Считается, что нативный размер операндов завсегда не нагружает. Для оптимального обхода integer promotion и прочая существуют Vit(128 знак., 23.11.2019 23:32, ссылка)
- Если важна скорость, то указываете соответствующий тип из stdint.h, не одними uint16_t и uint32_t все исчерпывается. И выбор разрядности делается компилятором. "The fastest type holding at least a certain number of bits." - VLLV(23.11.2019 22:27 - 22:30)
- Мне просто не нужны такие длинные, но есть опасение, что 32-разрядному контроллеру будет напряжно, если я стану считать арифметику на 16-разрядных числах. Растягивает ли он операнды до 32-х разрядов перед тем, как производить с ними операции, или Ксения(91 знак., 23.11.2019 22:14)
- Давно надо было бы создать тему "Все что вы давно хотели узнать про STM32, но стеснялись спросить" для дурацких вопросов :). А то их у меня уже много накопилось. - Ксения(23.11.2019 21:41)
- пользую регулярно не заметил ни каких "перекосов" ) естественно нужно пользовать pragma pack, а то ничего не сэкономите ) - Aleksey_75(23.11.2019 21:37)
- От упаковки отказался, там с вложенностью структур были какие-то проблемы, не разобрался. - VLLV(23.11.2019 22:13)
- очень странно! ну тогда битовые поля теряют всякий смысл если конечно компилер их сам не упакует - Aleksey_75(23.11.2019 22:17)
- От упаковки отказался, там с вложенностью структур были какие-то проблемы, не разобрался. - VLLV(23.11.2019 22:13)
- Команд для эффективной работы с группами битов в у кортексов нет. Все врукопашную, через маски и сдвиги. Если нужно красиво работать с единичными битами - юзайте bitband - LightElf(24.11.2019 16:29)