quark 48 9 января, 2023 Опубликовано 9 января, 2023 (изменено) · Жалоба 2 часа назад, vvppvv сказал: Тогда уж, для универсальности и кросс-платформенности, придётся какие-нибудь ifdef'ы дописать, сколько бит в байте (7 или 8), и куда совать бит четности, на позицию 7-го бита, или в отдельный байт... Вы же просили "конфетку" для 7-ми бит, Вам её и дали. 🙂 Но, пожалуй, Вы правы - пред и постобработку данных можно удалить, для "чистоты" идеи: char cSetParity (char cin, char cout) { cout = cin; cout += cin; cout ^= cin; cout &= 0xAA; cout += 0x66; cout &= 0x88; cout += 0x78; return cout; } Это "конфетка" для полных 8-ми бит. Остальное - сами... 🙂 Изменено 9 января, 2023 пользователем quark Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 10 января, 2023 Опубликовано 10 января, 2023 · Жалоба 22 hours ago, quark said: Это "конфетка" для полных 8-ми бит. Что-то специфическая конфетка получилась. ))) Не под изначальную задачу. Я, конечно, не большой специалист в теории языка Си, но зачем выходной результат вычислений функции (байт четности) передавать ей вначале, как аргумент? Туда что писать, ноль? Изначально задача была взять байт 0...0х7F и установить в нём старший бит таким образом, чтобы количество единиц в байте было чётным. Предыдущая "конфетка" - самое то. А вобще, была когда-то такая микросхема, 74LS280, которая это сама делала. Вот её и пришлось программно эмулировать. :)) P.S. нашёл даже её функциональную диаграму: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 10 января, 2023 Опубликовано 10 января, 2023 · Жалоба 1 час назад, vvppvv сказал: Я, конечно, не большой специалист в теории языка Си Аналогично. Поэтому написал: остальное - сами... ))) 1 час назад, vvppvv сказал: нашёл даже её функциональную диаграму Если вас интересует функциональная диаграмма "железного" аналога предложенной программы, то она будет выглядеть примерно так: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 30 июня, 2023 Опубликовано 30 июня, 2023 · Жалоба В 08.12.2022 в 09:16, vvppvv сказал: Возникла необходимость подсчитать паритет битов в байте, четность. Как в последовательном порту. Подниму тему. Тут случайно обнаружилась очень похожая задачка, связанная с перекодировкой битов в байте. Нужно сменить порядок следования битов в байте на обратный. Конечно, перекодировка по таблице - вне конкуренции по скорости. Но таблица занимает много места. Прямое, "лобовое" программное решение, без использования таблиц, выглядит примерно так: LSR R16 ROL R17 LSR R16 ROL R17 LSR R16 ROL R17 LSR R16 ROL R17 LSR R16 ROL R17 LSR R16 ROL R17 LSR R16 ROL R17 LSR R16 ROL R17 MOV R16,R17 Соответствующий "шайтан-алгоритм" выглядит немного короче: MOV R17,R16 ASR R17 ROR R16 ROL R17 ROL R17 ANDI R16,0xAA ANDI R17,0x55 OR R16,R17 MOV R17,R16 ANDI R16,0x99 ANDI R17,0x66 SWAP R17 OR R16,R17 Это вам для коллекции. Может когда пригодится... 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 7 2 июля, 2023 Опубликовано 2 июля, 2023 · Жалоба On 6/30/2023 at 10:51 PM, quark said: Это вам для коллекции. Может когда пригодится... А по сути, на 8-битнике, наверное получатся те же 17 тактов, не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 2 июля, 2023 Опубликовано 2 июля, 2023 · Жалоба 19 минут назад, girts сказал: А по сути, на 8-битнике, наверное получатся те же 17 тактов, не? Там все команды однотактные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 7 3 июля, 2023 Опубликовано 3 июля, 2023 (изменено) · Жалоба 18 hours ago, quark said: Там все команды однотактные. Ну.... типа ANDI R16,0xAA - оно же по сути 2 машинных слова, крутись как хочешь. Аа, ну да, тут AVR... А так - очень даже интересно и своеобразно! Изменено 3 июля, 2023 пользователем girts Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvppvv 0 6 июля, 2023 Опубликовано 6 июля, 2023 · Жалоба On 7/3/2023 at 6:54 PM, girts said: типа ANDI R16,0xAA - оно же по сути 2 машинных слова, крутись как хочешь. Да, в случае с AVR тут два байта но одно машинное слово. Содержащее и саму операцию, и источник, и получатель - всё в одном, и за 1 такт. )) On 6/30/2023 at 11:51 PM, quark said: Это вам для коллекции. Может когда пригодится... Спасибо! )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться