Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

а я у себя такой штукой пользуюсь

Отправлено ы 02 июля 2008 г. 16:28
В ответ на: Мне тут понадобилась битами жонглировать. Может, кому еще надо(+) отправлено <font color=gray>Quasy</font> 02 июля 2008 г. 16:17



#define MASK32_IN_SHIFT(in) \
(((in) & 0x00000001 ? 0ul:\
((in) & 0x00000002 ? 1ul:\
((in) & 0x00000004 ? 2ul:\
((in) & 0x00000008 ? 3ul:\
((in) & 0x00000010 ? 4ul:\
((in) & 0x00000020 ? 5ul:\
((in) & 0x00000040 ? 6ul:\
((in) & 0x00000080 ? 7ul:\
((in) & 0x00000100 ? 8ul:\
((in) & 0x00000200 ? 9ul:\
((in) & 0x00000400 ? 10ul:\
((in) & 0x00000800 ? 11ul:\
((in) & 0x00001000 ? 12ul:\
((in) & 0x00002000 ? 13ul:\
((in) & 0x00004000 ? 14ul:\
((in) & 0x00008000 ? 15ul:\
((in) & 0x00010000 ? 16ul:\
((in) & 0x00020000 ? 17ul:\
((in) & 0x00040000 ? 18ul:\
((in) & 0x00080000 ? 19ul:\
((in) & 0x00100000 ? 20ul:\
((in) & 0x00200000 ? 21ul:\
((in) & 0x00400000 ? 22ul:\
((in) & 0x00800000 ? 23ul:\
((in) & 0x01000000 ? 24ul:\
((in) & 0x02000000 ? 25ul:\
((in) & 0x04000000 ? 26ul:\
((in) & 0x08000000 ? 27ul:\
((in) & 0x10000000 ? 28ul:\
((in) & 0x20000000 ? 29ul:\
((in) & 0x40000000 ? 30ul:\
((in) & 0x80000000 ? 31ul:0)))))))))))))))))))))))))))))))))


#define MASK16_IN_SHIFT(in)\
(((in) & 0x0001 ? 0:\
((in) & 0x0002 ? 1:\
((in) & 0x0004 ? 2:\
((in) & 0x0008 ? 3:\
((in) & 0x0010 ? 4:\
((in) & 0x0020 ? 5:\
((in) & 0x0040 ? 6:\
((in) & 0x0080 ? 7:\
((in) & 0x0100 ? 8:\
((in) & 0x0200 ? 9:\
((in) & 0x0400 ? 10:\
((in) & 0x0800 ? 11:\
((in) & 0x1000 ? 12:\
((in) & 0x2000 ? 13:\
((in) & 0x4000 ? 14:\
((in) & 0x8000 ? 15:0)))))))))))))))))


#define MASK8_IN_SHIFT(in)\
(((in) & 0x01 ? 0:\
((in) & 0x02 ? 1:\
((in) & 0x04 ? 2:\
((in) & 0x08 ? 3:\
((in) & 0x10 ? 4:\
((in) & 0x20 ? 5:\
((in) & 0x40 ? 6:\
((in) & 0x80 ? 7:0)))))))))


#define GET_MASK_VAL(v,msk) (((v) & (msk)) >> MASK32_IN_SHIFT(msk))
#define SET_MASK_VAL(v,msk,n) ((v) = ((v) & ~(msk)) | (((u32_t)(n) << MASK32_IN_SHIFT(msk)) & (msk)))


и пример:

#define GSMAUD_RING_COUNT_MASK BIN32(00000000,00000000,00000000,00000111) /* ring count : max 8 */
#define GSMAUD_VOLUME_MASK BIN32(00000000,00000000,00000000,00111000) /* melody volume : max 8 */
#define GSMAUD_MELODY_MASK BIN32(00000000,00000000,00000011,11000000) /* melody ndx : max 16 */
#define GSMAUD_MIC_MASK BIN32(00000000,00000000,00011100,00000000) /* MIC sens */
#define GSMAUD_SPKVOL_MASK BIN32(00000000,00000000,11100000,00000000) /* Speaker volume */
#define GSMAUD_SIDETON_MASK BIN32(00000000,00000111,00000000,00000000) /* sidetone gain : 0 - dis */
#define GSMAUD_ECHO_MODE_MASK BIN32(00000000,00011000,00000000,00000000) /* echo algoritm : 0 - dis */



GET_MASK_VAL(gsm_audio,GSMAUD_SPKVOL_MASK)
è
SET_MASK_VAL(gsm_audio,GSMAUD_SPKVOL_MASK,3)





Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сколько миллиампер в одном ампере ?:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru