ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
20 мая
95724
Evgeny_CD (28.07.2007 18:23, просмотров: 2043)
Битовые макросы - развитие идей Начало темы http://caxapa.ru/94766.html Идея: создание системы макросов, чтобы можно было обращаться к регистрам управления как REGISTER.BIT_FIELD. При сохранении полной переносимости на любые платформы. Эдакая реализация куска С99 "ручками". Собственно, хочется решит две задачи: * полная незаивисимость от индианности проца (актуально для stand alone контроллеров) * отсутствие лишних сдвигов. Т.е. хочется вначале в хидер забить все описания регистров с их битовыми полями в каком-то понятном формате, оперируя какими-то специальными макросами, а потом в проге оперировать REGISTER.BIT_FIELD и не париться, где именно этот бит филд живет в регистре. Вопрос - а где можно посмотреть заготовки на тему? Едва ли я первый озаботился таким вопросом. Размышления о сдвигах. Несложно написать операции с битовыми полями через |=, &=, но это приводит к появлению дополнительной операции сдвига, котороя нужна только для удобства человека, но для аппаратуры является лишней. Для медленных кусков кода число сдвигов пофиг (ну кого волнует, за сколько тактов мы инициализируем UART при старте?), но вот при формировании битовых потоков в системах связи это далеко не пофиг - там каждый такт может быть на учете! Конечно, можно пойти по пути наименьшего сопротивления, и наасмачить кусок, но это не есть гут - завтра надо будет переносить на другой проц... Нужно совместить портируемость и эффективность, ибо, похоже, иной преграды, кроме разрухи в головах, для этого нет. Для констнантных операций (присвоение битовому полю значения константы и проверка поля на константу) по идее, компилер все сдвиги должен на этапе компиляции оптимизировать, и в коде будет одна операция с неизвестным на этапе компиляции содержимым регистра. Но вот если мы битовое поля соотносим с какой-либо реальной переменной - сдвиги неизбежны. Кстати, очень хорошо тема битовой арифметики разобрана в книге Algorithms for programmers http://www.jjj.de/fxt/#fxtbook Замечательный проект! Автор несколько лет пишет буку в открытом режиме, публикуя промежуточные версии для комментов. Завидую :)