demiurg_spb 0 20 июня, 2010 Опубликовано 20 июня, 2010 · Жалоба А зачем приплетать всуе слова "критическая секция". Эта сущность в общем случае совершенно отдельная. Если Вы не задумываясь щедрой рукой разбрасываете volatile да critical, и знаете только одну систему команд, то это не значит, что все должны следовать Вашему "примеру" и разбрасываться ресурсами :(.Пусть хоть один флаг волатилен, он и всех собратьев (из одного байта) сделает таковыми. Оно надо? Да я даю реально упрощающий жизнь пример. Когда не надо помнить ни про волатильность ни про то что особо умный и жадный программист разделил волатильные флаги от неволатильных, а потом забыл об этом ненароком он сам или наследники его таланта. Зачем закладывать грабли когда можно и нужно без них обходиться. Просто. Надёжно. Без геморроя. Быстро и не требует лишней писанины (я об описании через дефайны мути в виде масок, что вообще применимо лишь для описании периферии). Хочется воскликнуть: Ау! мы пишем на Си а не на я языке препроцессора в конце то концов... А Вы всё о какой-то мифической экономии ресурсов печётесь. Не здесь блох ловить стоит 20 байт озу и 5-20 тиков тактовой. Не мне Вам объяснять где. Вы сами прекрасно знаете про вынесение из цикла всякой чуши, про их разворачивание, про правильный (нативный) выбор типов данных и про уместное использование volatile да и вообще о культуре программирования. А то право смешно даже становится как Вы упираетесь и особо смешно, что даже немного грустно, от того что Ваша привычка домысливать и додумывать об умениях и интеллекте Ваших собеседников крепчает с годами... Радует что пока до обсуждения ближайших родственников оппонентов дело не доходит... Совершенно зря, у Cortex есть фича упрощающая работу с битами называется она "Bit Banding" Все ваши флаги можно было упаковать в одно слово, а там работай хоть через маски хоть через Bit Banding. Это отлично! Через пару месяцев ему потребуется портировать проект под процессор XXX с адресным пространством чуть меньшим чем 4Gb без Bit Banding... "О сколько нам открытий чудных готовит просвещения дух!" - это я не к тому чтобы не использовать новую полезную фичу, а к тому что и старая даёт сопоставимый результат. Ну нет в Си полноценного типа данных меньшего чем uint_fast8_t! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Это отлично! Через пару месяцев ему потребуется портировать проект под процессор XXX и какие проблемы ? Все зависит как вы опишете Bit Banding, так вы его и портируете. Использовать 8-битный тип для флагов это двойной геморой, первое это расход памяти, второе это компилятор всегда расширяет 8 бит до 32 бит, а это для кортекса 1 лишняя команда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Да я даю реально упрощающий жизнь пример. Когда не надо помнить ни.... Если не хочется помнить, знать, отвечать, то надо идти в дворники, ну или программисты 1C - там всякие бездумные действия порядке вещей. и про уместное использование volatile да и вообще о культуре программирования. Вот именно по этой причине меня и задевает пропаганда "реально упрощающий жизнь пример. Когда не надо помнить" подход к программированию :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Компилятор сам не дурак, решит, где удобнее маску наложить, где подвигать, а где битовые команды (если они есть) использовать. Таким образом, надо писать так, как удобнее. Поэтому предлагаю описать так: struct { FLAG( D0 ); FLAG( D1 ); ... }stFlags; , где FLAG можно описать макросом #define FLAG(FlagName) unsigned char FlagName : 1 либо #define FLAG(FlagName) unsigned char FlagName либо #define FLAG(FlagName) FlagType FlagName Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Если не хочется помнить, знать, отвечать, то надо идти в дворники, ну или программисты 1C - там всякие бездумные действия порядке вещей.Опять 25... Обобщаем обобщаемое... Еще забыли сказать, что всю Россию пропили... А моих доводов ЗА так и не увидели. Я ваш единственный довод об увеличении производительности парировал своими доводами. А Вы всё юлите и в общемировые проблемы уходите и проблемы частного индивида. Вот именно по этой причине меня и задевает пропаганда "реально упрощающий жизнь пример. Когда не надо помнить" подход к программированию :(.Ну не хотите Вы понять что прозрачно написанная программа это благо как ни крути. А любое привнесённое - это муть в чистой воде. Все я с Вами в такой манере больше не желаю общаться. И на том спасибо! и какие проблемы ? Все зависит как вы опишете Bit Banding, так вы его и портируете.Никаких проблем нет. Также как и явных преимуществ перед нативным типом. И тем что надо портировать и описывать.Использовать 8-битный тип для флагов это двойной геморой, первое это расход памяти, второе это компилятор всегда расширяет 8 бит до 32 бит, а это для кортекса 1 лишняя команда. Где вы увидели что я предлагал использовать "жёсткий" 8-ми битный тип? Да будет перерасход памяти. Это действительно плохо и ужасно. Сколько сейчас в среднем ставят на кортексах 8, 16К? Для ликбеза: как там в кортексе устроен механизм записи 32-битного регистра в ОЗУ атомарно? И бывает ли иначе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Ну не хотите Вы понять что прозрачно написанная программа... Оценка степени прозрачности программ прежде всего зависит от количества мути в голове оценивающего :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба А я вот... делаю и так и эдак. Если быстро флаги (семафоры) не нужны, пакую, а если быстро - то не экономлю. Спор этот напоминает... тупоконечников и остроконечников... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Поэтому предлагаю описать так: , где FLAG можно описать макросом Много букв:-) Но для мсп430 с его "огромным" ОЗУ иногда и так может сгодиться или "даже хуже": просто битовое поле или просто байты с масками. А я вот... делаю и так и эдак. Если быстро флаги (семафоры) не нужны, пакую, а если быстро - то не экономлю. И правильно делаете. Спор этот напоминает... тупоконечников и остроконечников...Не будем уточнять кто есть кто:) Оценка степени прозрачности программ прежде всего зависит от количества мути в голове оценивающего :(.Критерий один - отсутствие мути. Муть в данном случае буковки. Много буковок. ООООчень много буковок и макросов и разделений на своих и чужих. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 6 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Ну нет в Си полноценного типа данных меньшего чем uint_fast8_t! Простите, что влезаю в интеллигентный разговор, но я в С не видел такого типа. Наверное, речь не об ANSI C? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба stdint.h часть С99 http://en.wikipedia.org/wiki/C_library Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Если определить несколько переменных типа bool, компилятор не объединит их в один байт/слово... ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Если определить несколько переменных типа bool, компилятор не объединит их в один байт/слово... ?Сам по себе - нет. Тип bool в C99 макросом преобразуется в _Bool, который в свою очередь имеет размерность int. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 6 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба stdint.h часть С99 http://en.wikipedia.org/wiki/C_library ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба ? Не читайте советских газет перед обедом не ориентируйтесь на Википедию как на истину в последней инстанции. Справляйтесь у оригинала стандарта ISO/IEC 9899:1999 (E). 7.18.1.3 Fastest minimum-width integer types 1Each of the following types designates an integer type that is usually fastest 216) to operate with among all integer types that have atleast the specified width. 2The typedef name int_fastN_t designates the fastest signed integer type with a width of at least N.The typedef name uint_fastN_t designates the fastest unsigned integer type with a width of at least N. 3The following types are required: int_fast8_t int_fast16_t int_fast32_t int_fast64_t uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t All other types of this form are optional. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба стандарта ISO/IEC 9899:1999 (E) Ну свежие драфты не забывать ISO/IEC 9899:201x Крайний August 11, 2008. В них тоже уже изменений накопилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться