Перейти к содержанию
    

иструкции cortex-m3 DMB/DSB/ISB/LDREX/CLREX/TBB

здравствуйте.

к сожалению С/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>

Изменено пользователем haker_fox
Тема интересная и полезная, добавил теги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Например, в scmRTOS clz используется в ф-ии GetHighPriority() - для получения наиболее приоритетного процесса из битовой маски готовых к выполнению процессов.

Вот: OS_Target.h

 

tbb вроде видел в листинге, используется при больших case.

Про остальные не знаю:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохое описание инструкций есть в юзер-мануалах на соответствующие чипы от NXP. Не смотрели их?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2_AHTOXA

насчет CLZ я примерно так и предполагал

 

2_bseyur

URL в студию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохое описание инструкций есть в юзер-мануалах на соответствующие чипы от NXP. Не смотрели их?

На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные

растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет.

 

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

Чем же они загадочны?

DMB - будет требовать завершения текущих обращений к памяти до следующего обращения к памяти

DSB - тоже самое, но до следующей инструкции

ISB - пока pipeline не освободится.

Ну как надежды? Оправдались?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные

растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет.

 

 

Чем же они загадочны?

DMB - будет требовать завершения текущих обращений к памяти до следующего обращения к памяти

DSB - тоже самое, но до следующей инструкции

ISB - пока pipeline не освободится.

Ну как надежды? Оправдались?

:biggrin:

а черт его знает, пока непонятно, а в каких случаях это может пригодится?

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

спасибо

 

глянул книжку Joseph Yiu по диагонали - супер. аж перевести захотелось для таких как я, только времени на это нет. магазинам Нада не киты продавать а покупать лицензию на книгу переводить и продвать сначала ее, тогда китов наверно больше можно былобы продать. я бы так бизныс построил. я уверен что большинство программеров включая меня используют кортекс как armv4, да компиляторы тоже подкосили многих - зачем напрягатся - и так скомпилил и работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные

растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет.

Ну как же. Глава 34. Где в оригинальной документации ARM столь доходчиво приведено описание ядра М3? :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

глянул книжку Joseph Yiu по диагонали - супер. аж перевести захотелось....

Надеюсь, второе издение? Оно лучше первого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TBB/TBH применяются нормальными компиляторами для реализации оператора switch. Большинство остальных инструкций используются для многопоточной синхронизации - семафоры, мьютексы, критические секции и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TBB/TBH применяются нормальными компиляторами для реализации оператора switch. Большинство остальных инструкций используются для многопоточной синхронизации - семафоры, мьютексы, критические секции и т.п.

вот я так и думал а что если синхронизация задач ускорить получится в FreeRTOS, только мне пока непонятно как это сделать

 

да, действительно gcc генерит tbb для выбора ветки в switch/case если ключи case идут подряд или с малыми дырками, иначе компилер решает что размер таблицы неприемлем и начинает генерить условный выбор ветки

 

НУ ВОТ!, я разобрасля с tbb теперь знаю как писать switch чтоб он быстро работал - ранее я избегал этой конструкции как класса, их у мен небыло вообще. лично для меня польза от этой ветки форума уже очевидна. спасибо.

 

едем дальше...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при помощи

LDREX/STREX - реализуюется синхронизация, причем можно сразу довольно высокого уровня, не только простой мьютекс, но и conditional variable, семафоры и т.п.

 

Всякие барьеры - вроде пока не пригодятся, на существюющих coretx-m3. Это задел под многоядерность и кеши, которых пока и нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всякие барьеры - вроде пока не пригодятся, на существюющих coretx-m3.

Ну ISB везде годится. Память тоже на внешней шине и ws-тов на ней может быть много. А кэши и ядра это уже другие кортексы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну ISB везде годится.

Вот только интересен пример использования (зачем это на существующих чипах может понадобится)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот только интересен пример использования (зачем это на существующих чипах может понадобится)

Гарантированное приведение программы в однозначное состояние дабы с этого момента можно, например, было точно знать количество тактов. И не знаю, как там дела у M3 обстоят дела с отслеживанием модификации кода пред командой, но те-же AMD486 в свое время славно на этом лажались - приходилось JUMP фиктивный вставлять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при помощи

LDREX/STREX - реализуюется синхронизация, причем можно сразу довольно высокого уровня, не только простой мьютекс, но и conditional variable, семафоры и т.п.

и как это архитектурно должно выглядеть? в FreeRTOS семафоры реализованы ка и все на очередях - избыточно и не очень быстро. тут ченить усовершенствовать можно?

собственно опятже вопрос что такое эксклюзивное чтение и запись применительно к этим командам

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...