klen 1 16 мая, 2010 Опубликовано 16 мая, 2010 (изменено) · Жалоба здравствуйте. к сожалению С/C++ компиллеры не могут использовать все иструкции ядра, поскольку язык программирования (с/c++) - всетаки язык формального описания и не позволяет разработчику выразить на нем все свои желания, о которых о части позаботились разработчики ядра процессора. в свете сказанного очевидно что без применения асма в 'узких местах" - новый процессор тановится таким же ''старым" и мы получаем дядю Васю забивающего магнитофоном гвозди. осознание вышескзанного заставило наконецто залесть в мануал и потратить время на изучение СM3 - результат печальный. ниже приведен список команд - названи красивые и заманчивые, но мне непонятно как они работают, тоесть для чего они нужны. последняя вроде понятно как работет но непонятно кудаее можно прикрутить с максимальной пользой, в какихто алгоритмах же она заменит кучу кода - вопрос в каких. первые три особо загадочные, на них у меня большие надежды. просьба уже разобравшихся пролить свет. зарание спасибо. Data memory barrier DMB <c> Data synchronization barrier DSB <c> Instruction synchronization barrier ISB <c> Send event SEV <c> Load register exclusive calculates an address from a base register value and an immediate offset, loads a word from memory, writes it to a register LDREX<c> <Rt>,[<Rn>{,#<imm>}] STREX <c> <Rd>,<Rt>,[<Rn>{,#<imm>}] Clear exclusive clears the local record of the executing processor that an address has had a request for an exclusive access. CLREX <c> Table branch byte TBB [<Rn>, <Rm>] Table branch halfword TBH [<Rn>, <Rm>, LSL #1] Return number of leading zeros in register value CLZ.W <Rd>, <Rn> Изменено 16 ноября, 2022 пользователем haker_fox Тема интересная и полезная, добавил теги. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба последняя вроде понятно как работет но непонятно кудаее можно прикрутить с максимальной пользой, в какихто алгоритмах же она заменит кучу кода - вопрос в каких. Например, в scmRTOS clz используется в ф-ии GetHighPriority() - для получения наиболее приоритетного процесса из битовой маски готовых к выполнению процессов. Вот: OS_Target.h tbb вроде видел в листинге, используется при больших case. Про остальные не знаю:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bseyur 0 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Неплохое описание инструкций есть в юзер-мануалах на соответствующие чипы от NXP. Не смотрели их? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба 2_AHTOXA насчет CLZ я примерно так и предполагал 2_bseyur URL в студию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Неплохое описание инструкций есть в юзер-мануалах на соответствующие чипы от NXP. Не смотрели их? На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет. первые три особо загадочные, на них у меня большие надежды. Чем же они загадочны? DMB - будет требовать завершения текущих обращений к памяти до следующего обращения к памяти DSB - тоже самое, но до следующей инструкции ISB - пока pipeline не освободится. Ну как надежды? Оправдались? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет. Чем же они загадочны? DMB - будет требовать завершения текущих обращений к памяти до следующего обращения к памяти DSB - тоже самое, но до следующей инструкции ISB - пока pipeline не освободится. Ну как надежды? Оправдались? а черт его знает, пока непонятно, а в каких случаях это может пригодится? а можете привести ситуации когда без них становится нехорошо, что бы понятно стало а то както туго, инструкции есть а вставить куда не придумаю, значит непонимаю назначение. спасибо глянул книжку Joseph Yiu по диагонали - супер. аж перевести захотелось для таких как я, только времени на это нет. магазинам Нада не киты продавать а покупать лицензию на книгу переводить и продвать сначала ее, тогда китов наверно больше можно былобы продать. я бы так бизныс построил. я уверен что большинство программеров включая меня используют кортекс как armv4, да компиляторы тоже подкосили многих - зачем напрягатся - и так скомпилил и работает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bseyur 0 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет. Ну как же. Глава 34. Где в оригинальной документации ARM столь доходчиво приведено описание ядра М3? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба глянул книжку Joseph Yiu по диагонали - супер. аж перевести захотелось.... Надеюсь, второе издение? Оно лучше первого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
igorsk 0 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба TBB/TBH применяются нормальными компиляторами для реализации оператора switch. Большинство остальных инструкций используются для многопоточной синхронизации - семафоры, мьютексы, критические секции и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба TBB/TBH применяются нормальными компиляторами для реализации оператора switch. Большинство остальных инструкций используются для многопоточной синхронизации - семафоры, мьютексы, критические секции и т.п. вот я так и думал а что если синхронизация задач ускорить получится в FreeRTOS, только мне пока непонятно как это сделать да, действительно gcc генерит tbb для выбора ветки в switch/case если ключи case идут подряд или с малыми дырками, иначе компилер решает что размер таблицы неприемлем и начинает генерить условный выбор ветки НУ ВОТ!, я разобрасля с tbb теперь знаю как писать switch чтоб он быстро работал - ранее я избегал этой конструкции как класса, их у мен небыло вообще. лично для меня польза от этой ветки форума уже очевидна. спасибо. едем дальше... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба при помощи LDREX/STREX - реализуюется синхронизация, причем можно сразу довольно высокого уровня, не только простой мьютекс, но и conditional variable, семафоры и т.п. Всякие барьеры - вроде пока не пригодятся, на существюющих coretx-m3. Это задел под многоядерность и кеши, которых пока и нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Всякие барьеры - вроде пока не пригодятся, на существюющих coretx-m3. Ну ISB везде годится. Память тоже на внешней шине и ws-тов на ней может быть много. А кэши и ядра это уже другие кортексы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Ну ISB везде годится. Вот только интересен пример использования (зачем это на существующих чипах может понадобится) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба Вот только интересен пример использования (зачем это на существующих чипах может понадобится) Гарантированное приведение программы в однозначное состояние дабы с этого момента можно, например, было точно знать количество тактов. И не знаю, как там дела у M3 обстоят дела с отслеживанием модификации кода пред командой, но те-же AMD486 в свое время славно на этом лажались - приходилось JUMP фиктивный вставлять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 16 мая, 2010 Опубликовано 16 мая, 2010 · Жалоба при помощи LDREX/STREX - реализуюется синхронизация, причем можно сразу довольно высокого уровня, не только простой мьютекс, но и conditional variable, семафоры и т.п. и как это архитектурно должно выглядеть? в FreeRTOS семафоры реализованы ка и все на очередях - избыточно и не очень быстро. тут ченить усовершенствовать можно? собственно опятже вопрос что такое эксклюзивное чтение и запись применительно к этим командам Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться