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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> иструкции cortex-m3 DMB/DSB/ISB/LDREX/CLREX/TBB, читаю книгу вижу фигу
klen
сообщение May 16 2010, 09:47
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



здравствуйте.
к сожалению С/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>
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 16 2010, 10:39
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(klen @ May 16 2010, 15:47) *
последняя вроде понятно как работет но непонятно кудаее можно прикрутить с максимальной пользой, в какихто алгоритмах же она заменит кучу кода - вопрос в каких.

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

tbb вроде видел в листинге, используется при больших case.
Про остальные не знаюsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
bseyur
сообщение May 16 2010, 11:02
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Неплохое описание инструкций есть в юзер-мануалах на соответствующие чипы от NXP. Не смотрели их?
Go to the top of the page
 
+Quote Post
klen
сообщение May 16 2010, 11:55
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



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

2_bseyur
URL в студию
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 16 2010, 12:09
Сообщение #5


Гуру
******

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



Цитата(bseyur @ May 16 2010, 14:02) *
Неплохое описание инструкций есть в юзер-мануалах на соответствующие чипы от NXP. Не смотрели их?

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

Цитата(klen @ May 16 2010, 12:47) *
первые три особо загадочные, на них у меня большие надежды.

Чем же они загадочны?
DMB - будет требовать завершения текущих обращений к памяти до следующего обращения к памяти
DSB - тоже самое, но до следующей инструкции
ISB - пока pipeline не освободится.
Ну как надежды? Оправдались?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
klen
сообщение May 16 2010, 13:16
Сообщение #6


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(zltigo @ May 16 2010, 16:09) *
На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные
растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет.


Чем же они загадочны?
DMB - будет требовать завершения текущих обращений к памяти до следующего обращения к памяти
DSB - тоже самое, но до следующей инструкции
ISB - пока pipeline не освободится.
Ну как надежды? Оправдались?

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

глянул книжку Joseph Yiu по диагонали - супер. аж перевести захотелось для таких как я, только времени на это нет. магазинам Нада не киты продавать а покупать лицензию на книгу переводить и продвать сначала ее, тогда китов наверно больше можно былобы продать. я бы так бизныс построил. я уверен что большинство программеров включая меня используют кортекс как armv4, да компиляторы тоже подкосили многих - зачем напрягатся - и так скомпилил и работает
Go to the top of the page
 
+Quote Post
bseyur
сообщение May 16 2010, 14:18
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 8-01-07
Из: Томск
Пользователь №: 24 208



Цитата(zltigo @ May 16 2010, 19:09) *
На ну? Есть оригинальная документация от ARM. Другую рожать никто не будет. Если непонятно, то надо искать просто научно-популярные
растолковывающие книжки. А из них никто еще лучше, чем Joseph Yiu не написал и не напишет.

Ну как же. Глава 34. Где в оригинальной документации ARM столь доходчиво приведено описание ядра М3? rolleyes.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 16 2010, 14:33
Сообщение #8


Гуру
******

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



Цитата(klen @ May 16 2010, 16:16) *
глянул книжку Joseph Yiu по диагонали - супер. аж перевести захотелось....

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
igorsk
сообщение May 16 2010, 15:18
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



TBB/TBH применяются нормальными компиляторами для реализации оператора switch. Большинство остальных инструкций используются для многопоточной синхронизации - семафоры, мьютексы, критические секции и т.п.
Go to the top of the page
 
+Quote Post
klen
сообщение May 16 2010, 15:30
Сообщение #10


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(igorsk @ May 16 2010, 19:18) *
TBB/TBH применяются нормальными компиляторами для реализации оператора switch. Большинство остальных инструкций используются для многопоточной синхронизации - семафоры, мьютексы, критические секции и т.п.

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

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

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

едем дальше...
Go to the top of the page
 
+Quote Post
KRS
сообщение May 16 2010, 19:35
Сообщение #11


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Всякие барьеры - вроде пока не пригодятся, на существюющих coretx-m3. Это задел под многоядерность и кеши, которых пока и нет.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 16 2010, 19:44
Сообщение #12


Гуру
******

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



Цитата(KRS @ May 16 2010, 22:35) *
Всякие барьеры - вроде пока не пригодятся, на существюющих coretx-m3.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
KRS
сообщение May 16 2010, 19:49
Сообщение #13


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(zltigo @ May 16 2010, 23:44) *
Ну ISB везде годится.

Вот только интересен пример использования (зачем это на существующих чипах может понадобится)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 16 2010, 19:58
Сообщение #14


Гуру
******

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



Цитата(KRS @ May 16 2010, 22:49) *
Вот только интересен пример использования (зачем это на существующих чипах может понадобится)

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
klen
сообщение May 16 2010, 21:20
Сообщение #15


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(KRS @ May 16 2010, 23:35) *
при помощи
LDREX/STREX - реализуюется синхронизация, причем можно сразу довольно высокого уровня, не только простой мьютекс, но и conditional variable, семафоры и т.п.

и как это архитектурно должно выглядеть? в FreeRTOS семафоры реализованы ка и все на очередях - избыточно и не очень быстро. тут ченить усовершенствовать можно?
собственно опятже вопрос что такое эксклюзивное чтение и запись применительно к этим командам
Go to the top of the page
 
+Quote Post

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

 


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


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