реклама на сайте
подробности

 
 
> Кто как работает с битами?
amost
сообщение Jun 19 2010, 09:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 28-10-05
Из: Ukraine, Khmelnitsky
Пользователь №: 10 246



avr-gcc

раньше объявлял одну/несколько байтовых переменных, дефайнами называл их биты. обращаясь к биту, использовал имя переменной, и соответствующее имя бита. очевидно, вариант неудобен при наличии большого кол-ва битовых переменных, нужно же помнить какой бит в каком байте.

может наверняка есть какой-то более удобный метод. макрос, определяющий имя байта с флагами по имени бита, что-ли.

Сообщение отредактировал amost - Jun 19 2010, 09:19
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jun 19 2010, 10:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (amost @ Jun 19 2010, 11:18) *
avr-gcc
раньше....

Как Вам уже сказал Dog Pawlowa - так и продолжайте, только добавьте имя регистра. Типа:
CODE
#define SIS5_LIG(x)    (((x)&0x3)<<6)
#define SIS5_LIM        BIT5
#define SIS5_MCG(x)    (((x)&0x3)<<3)
#define SIS5_MCM        BIT2
#define SIS5_HIM        BIT1
#define SIS5_IIR        BIT0

......
    si_write( SIS5, SIS5_LIG(LIG_20DB)|SIS5_MCG(0)|SIS5_MCM|SIS5_HIM);    // Line Gain +20dB
    si_write( SIS6, SIS6_RXG(RXG_0DB)|SIS6_LO_ON);             // RX 0dB Line Out Active

......
void si_write( int reg, bint data )
{
    if( ( reg >= SIS1 )&&( reg <= SIS9 ) )
    {
        if( !xIsTimeout( si3000_time ) )
            vSmartDelay( 1 );
        fpga_cmd( FCMD_SI3000|FCMD_WR, (reg<<8)|(BYTE)data );
        si_reg[reg] = (BYTE)data;
        si3000_time = xGetTimeout( 1 );
    }
    else
        xprintf( "SI:Invalid REG:%2X\r", reg );
}

Проверено на собственной шкуре многими годами поисков и применения разных "извратов".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 19 2010, 11:27
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



На платформах, не имеющих атомарного битового доступа к ОЗУ,
использовать битовые переменные нерационально если:
1. они volatile
2. их достаточно мало (не стоит жмотиться и выиграть аж целых 20-50 байт ОЗУ)
3. они не расположены в sfr области (см п.1).

Я в 99% случаев под флаги использую целую ячейку памяти (байт или даже крупнее) и в ус не дую...

Оптимизация ресурсов ОЗУ не должна быть самоцелью...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 19 2010, 12:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg_spb @ Jun 19 2010, 13:27) *
Я в 99% случаев под флаги использую целую ячейку памяти (байт или даже крупнее) и в ус не дую...

Ну и зря, в тех-же 99 случаях флаги не используются отдельно, а "кучкуются" и лазить за каждым флагом в память, вместо работы с этими флагами в единожды загруженном одном регистре это уже не только растраты памяти, но и производительности. Естественно, случаи бывают разными. И железо бывает разным.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 20 2010, 10:30
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(zltigo @ Jun 19 2010, 16:00) *
Ну и зря, в тех-же 99 случаях флаги не используются отдельно, а "кучкуются" и лазить за каждым флагом в память, вместо работы с этими флагами в единожды загруженном одном регистре это уже не только растраты памяти, но и производительности. Естественно, случаи бывают разными. И железо бывает разным.

Конечно, они могут и кучковаться, а могут и нет. Это меня даже не сильно заботит.
Меня во всей этой ситуации всегда напрягала необходимость использования критической секции.
И даже если они (флаги) обрабатываются пачками по 3-5 штук ещё не известно что будет оптимальнее прочитать 3-5 байт из ОЗУ или вкрячить критичекую секцию, добавив при этом лишнюю латентность (пусть даже и копеечную).
Мне всегда ближе наиболее простой вариант. И код не засорён лишними временными промежуточными переменными.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 20 2010, 10:49
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg_spb @ Jun 20 2010, 12:30) *
И даже если они (флаги) обрабатываются пачками по 3-5 штук ещё не известно что будет оптимальнее прочитать 3-5 байт из ОЗУ или вкрячить критичекую секцию, добавив при этом лишнюю латентность (пусть даже и копеечную).

А зачем приплетать всуе слова "критическая секция". Эта сущность в общем случае совершенно отдельная. Если Вы не задумываясь щедрой рукой разбрасываете volatile да critical, и знаете только одну систему команд, то это не значит, что все должны следовать Вашему "примеру" и разбрасываться ресурсами sad.gif.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 20 2010, 22:44
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(zltigo @ Jun 20 2010, 14:49) *
А зачем приплетать всуе слова "критическая секция". Эта сущность в общем случае совершенно отдельная. Если Вы не задумываясь щедрой рукой разбрасываете volatile да critical, и знаете только одну систему команд, то это не значит, что все должны следовать Вашему "примеру" и разбрасываться ресурсами sad.gif.
Пусть хоть один флаг волатилен, он и всех собратьев (из одного байта) сделает таковыми.
Оно надо? Да я даю реально упрощающий жизнь пример. Когда не надо помнить ни про волатильность ни про то что особо умный и жадный программист разделил волатильные флаги от неволатильных, а потом забыл об этом ненароком он сам или наследники его таланта.
Зачем закладывать грабли когда можно и нужно без них обходиться.
Просто. Надёжно. Без геморроя. Быстро и не требует лишней писанины (я об описании через дефайны мути в виде масок, что вообще применимо лишь для описании периферии). Хочется воскликнуть: Ау! мы пишем на Си а не на я языке препроцессора в конце то концов...

А Вы всё о какой-то мифической экономии ресурсов печётесь.
Не здесь блох ловить стоит 20 байт озу и 5-20 тиков тактовой.
Не мне Вам объяснять где. Вы сами прекрасно знаете про вынесение из цикла всякой чуши, про их разворачивание, про правильный (нативный) выбор типов данных и про уместное использование volatile да и вообще о культуре программирования.

А то право смешно даже становится как Вы упираетесь и особо смешно, что даже немного грустно,
от того что Ваша привычка домысливать и додумывать об умениях и интеллекте Ваших собеседников крепчает с годами...
Радует что пока до обсуждения ближайших родственников оппонентов дело не доходит...

Цитата(MALLOY2 @ Jun 20 2010, 20:34) *
Совершенно зря, у Cortex есть фича упрощающая работу с битами называется она "Bit Banding"
Все ваши флаги можно было упаковать в одно слово, а там работай хоть через маски хоть через Bit Banding.
Это отлично! Через пару месяцев ему потребуется портировать проект под процессор XXX с адресным пространством чуть меньшим чем 4Gb без Bit Banding... "О сколько нам открытий чудных готовит просвещения дух!" - это я не к тому чтобы не использовать новую полезную фичу, а к тому что и старая даёт сопоставимый результат.

Ну нет в Си полноценного типа данных меньшего чем uint_fast8_t!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amost   Кто как работает с битами?   Jun 19 2010, 09:18
- - Dog Pawlowa   Цитата(amost @ Jun 19 2010, 12:18) может ...   Jun 19 2010, 09:27
|- - M_Andrey   Код</P><P>union char_by_bit { st...   Jun 19 2010, 09:54
|- - MrYuran   Цитата(zltigo @ Jun 19 2010, 16:00) Естес...   Jun 19 2010, 13:40
||- - rezident   Цитата(MrYuran @ Jun 19 2010, 19:40) Или,...   Jun 19 2010, 15:20
||- - zltigo   QUOTE (MrYuran @ Jun 19 2010, 15:40) А ес...   Jun 19 2010, 17:08
||- - Serj78   Цитата(zltigo @ Jun 19 2010, 21:08) Вы хо...   Jun 19 2010, 18:03
|||- - zltigo   QUOTE (Serj78 @ Jun 19 2010, 20:03) Я не ...   Jun 19 2010, 19:15
||- - MrYuran   Цитата(zltigo @ Jun 19 2010, 21:08) Вы хо...   Jun 20 2010, 08:11
||- - MrYuran   Цитата(MrYuran @ Jun 20 2010, 12:11) Комп...   Jun 21 2010, 06:25
||- - demiurg_spb   Цитата(MrYuran @ Jun 21 2010, 10:25) Поэт...   Jun 21 2010, 08:50
|- - zltigo   QUOTE (demiurg_spb @ Jun 21 2010, 00:44) ...   Jun 21 2010, 06:09
||- - demiurg_spb   Цитата(zltigo @ Jun 21 2010, 10:09) Если ...   Jun 21 2010, 08:09
||- - zltigo   QUOTE (demiurg_spb @ Jun 21 2010, 10:09) ...   Jun 21 2010, 08:19
||- - Tanya   А я вот... делаю и так и эдак. Если быстро флаги (...   Jun 21 2010, 08:37
|- - Herz   Цитата(demiurg_spb @ Jun 21 2010, 01:44) ...   Jun 21 2010, 09:06
|- - demiurg_spb   stdint.h часть С99 http://en.wikipedia.org/wiki/C...   Jun 21 2010, 11:14
|- - Herz   Цитата(demiurg_spb @ Jun 21 2010, 14:14) ...   Jun 21 2010, 15:03
|- - rezident   Цитата(Herz @ Jun 21 2010, 21:03) ?Не чит...   Jun 21 2010, 15:14
|- - zltigo   QUOTE (rezident @ Jun 21 2010, 18:14) ста...   Jun 21 2010, 16:51
- - MALLOY2   ЦитатаЯ при переносе проекта на STM32 с avr решил ...   Jun 20 2010, 16:34
- - MALLOY2   ЦитатаЭто отлично! Через пару месяцев ему потр...   Jun 21 2010, 05:49
|- - Serj78   Цитата(MALLOY2 @ Jun 21 2010, 09:49) и ка...   Jun 21 2010, 17:39
|- - romez777   QUOTE (Serj78 @ Jun 21 2010, 21:39) А мож...   Jun 22 2010, 00:03
- - ViKo   Если определить несколько переменных типа bool, ко...   Jun 21 2010, 13:20
|- - rezident   Цитата(ViKo @ Jun 21 2010, 19:20) Если оп...   Jun 21 2010, 14:48
- - Herz   Ясно, спасибо. Но вроде как и int8_t, и uint8_t га...   Jun 21 2010, 17:02
|- - demiurg_spb   Цитата(Herz @ Jun 21 2010, 21:02) Ясно, с...   Jun 22 2010, 09:08
- - MALLOY2   ЦитатаА можно по подробнее, КАК он расширяет? Ког...   Jun 22 2010, 08:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.08663 секунд с 7
ELECTRONIX ©2004-2016