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

 
 
> Библиотека атомарных операций для STM32
ArtDenis
сообщение Jun 18 2015, 16:31
Сообщение #1


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

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Кто-нибудь встречал в природе готовую библиотеку для атомарных операций над целочисленными значениями? Интересуют стандартные операции типа "сравнить и обменять", арифметические операции (сложить и вернуть предыдущее значение), битовые и т.д.

Сообщение отредактировал ArtDenis - Jun 18 2015, 16:32


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jun 23 2015, 05:55
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Если бы эксклюзивные операции отслеживали только сами себя, толку от них было бы никакого. Так можно и обычным флагом обойтись, когда захотел - установил, когда надо - проверил... Смысл именно в том, что мониторится любое обращение к памяти (надо думать, запись). Типа, триггера. LDREX разрешает работу триггера, любая запись в память устанавливает его в 1, CLREX сбрасывает его. STREX проверяет триггер, и если он установлен, не пишет в память, и выдает 1 в регистр. И запрещает мониторинг (триггер).
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 23 2015, 07:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Jun 23 2015, 11:55) *
Если бы эксклюзивные операции отслеживали только сами себя, толку от них было бы никакого. Так можно и обычным флагом обойтись, когда захотел - установил, когда надо - проверил... Смысл именно в том, что мониторится любое обращение к памяти

А зачем Вам мониторить все обращения? Ведь нужны только те обращения, которые могут использоваться для доступа к переменным синхронизации.
Если Вам нужна чтение-модификация-запись переменной синхронизации, или неатомарное чтение (несколькиим командами) этой переменной, или запись (любая) в эту переменную,
то извольте все эти операции выполнять только инструкциями LDREX/STREX. Тогда всё будет нормально и ставить этот бит по каждому обращению к памяти совсем излишне
(но конечно возможно для упрощения реализации ядра CPU).
А просто чтение этой-же переменной синхронизации можно делать и вообще одной командой LDR (которая априори атомарна) пусть даже она и попадёт между LDREX и STREX
выполняющимися в другом потоке - это никак не повлияет на результат.


Цитата(AlexandrY @ Jun 23 2015, 12:45) *
В Cortex-M4 операция STREX даст отбой даже если в прерывании запись была сделана командой STR и совсем в другую ячейку памяти.

Вполне возможно для упрощения реализации механизма в ядре сделали срабатывание не только на эксклюзивный доступ.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 23 2015, 17:24
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Jun 23 2015, 10:21) *
Вполне возможно для упрощения реализации механизма в ядре сделали срабатывание не только на эксклюзивный доступ.


С LDREX/STREX все еще более запутанней.

Решил тут протестировать как там насчет работы из разных областей памяти.
Выяснилось, что LDREX/STREX правильно работает когда переменные находятся в RAM вблизи 0x1000_0000-0x3000_0000
То, что кэширование разное сверху и снизу границы 0x2000_0000 никак не влияет, барьеры памяти можно не ставить.
А вот если использовать память которая находится после границы 0x4000_0000 , то пара LDREX/STREX там никакого эффекта не дает, хотя и исключений не вызывает.
Т.е. можно спокойно испортить переменную, а STREX ничего не покажет.

Ну и как положительный момент можно отметить, что выполнение кода из RAM на работу LDREX/STREX тоже не влияет.

А с DMA вопрос еще темный.
Мутный момент также с областями внешней памяти.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 23 2015, 18:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Jun 23 2015, 23:24) *
Т.е. можно спокойно испортить переменную, а STREX ничего не покажет.

Вы портили при помощи другой STREX или просто STR? Если второе - эксперимент некорректный.
И надо посмотреть как классифицируется память находящаяся по этим адресам. Возможна это область памяти периферии, возможно с этим связано, лень заглядывать в карту памяти в описании М-ядра. :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ArtDenis   Библиотека атомарных операций для STM32   Jun 18 2015, 16:31
- - Gleb80   Атомарная, тоесть выполняющаяся за один машинный ц...   Jun 18 2015, 18:47
|- - ArtDenis   Цитата(Gleb80 @ Jun 18 2015, 23:47) Атома...   Jun 19 2015, 12:40
|- - AlexandrY   Цитата(ArtDenis @ Jun 19 2015, 15:40) Их ...   Jun 19 2015, 19:14
- - AlexandrY   Цитата(ArtDenis @ Jun 18 2015, 19:31) Кто...   Jun 18 2015, 19:27
|- - Aner   QUOTE (AlexandrY @ Jun 18 2015, 23:27) ST...   Jun 18 2015, 19:41
- - AHTOXA   Цитата(ArtDenis @ Jun 18 2015, 21:31) Кто...   Jun 18 2015, 20:40
|- - AlexandrY   Цитата(AHTOXA @ Jun 18 2015, 23:40) Не то...   Jun 19 2015, 04:40
|- - jcxz   Вот моя реализация инкремента/декремента, обмена и...   Jun 19 2015, 07:48
|- - AlexandrY   Цитата(jcxz @ Jun 19 2015, 10:48) Вот моя...   Jun 19 2015, 08:24
|- - jcxz   Цитата(AlexandrY @ Jun 19 2015, 14:24) А ...   Jun 19 2015, 08:27
|- - AlexandrY   Цитата(jcxz @ Jun 19 2015, 11:27) Работае...   Jun 19 2015, 08:34
|- - jcxz   Цитата(AlexandrY @ Jun 19 2015, 14:34) Но...   Jun 19 2015, 08:42
- - ViKo   Объясните, на какой диапазон памяти распространяет...   Jun 19 2015, 08:19
- - ArtDenis   Может особо не париться с атомарными операциями, и...   Jun 20 2015, 05:07
|- - jcxz   Цитата(ArtDenis @ Jun 20 2015, 11:07) Как...   Jun 20 2015, 11:12
- - ArtDenis   Ковыряю std::atomic. Оказывается они работают для ...   Jun 22 2015, 04:01
|- - AHTOXA   Цитата(ArtDenis @ Jun 22 2015, 09:01) В а...   Jun 22 2015, 06:08
- - ArtDenis   Так непонятно, нужны ли там барьеры. У STM32 вроде...   Jun 22 2015, 08:16
|- - AHTOXA   Насколько я понимаю, эти барьеры (DMB) нужны для м...   Jun 22 2015, 08:56
|- - jcxz   Цитата(ArtDenis @ Jun 22 2015, 14:16) Так...   Jun 22 2015, 08:59
|- - AlexandrY   Цитата(ArtDenis @ Jun 22 2015, 11:16) Так...   Jun 22 2015, 10:03
|- - AlexandrY   Цитата(AlexandrY @ Jun 22 2015, 13:03) Из...   Jun 22 2015, 13:26
|- - ArtDenis   Цитата(AlexandrY @ Jun 22 2015, 18:26) Те...   Jun 22 2015, 13:53
||- - AHTOXA   Цитата(ArtDenis @ Jun 22 2015, 18:53) А м...   Jun 22 2015, 18:40
|- - jcxz   Цитата(AlexandrY @ Jun 22 2015, 19:26) Зн...   Jun 23 2015, 02:44
|- - AHTOXA   Цитата(jcxz @ Jun 23 2015, 07:44) Даташит...   Jun 23 2015, 05:01
- - ArtDenis   Ну вообще это очень легко проверить. Завтра поэксп...   Jun 22 2015, 19:34
|- - AlexandrY   Цитата(ViKo @ Jun 23 2015, 08:55) Если бы...   Jun 23 2015, 06:45
|- - AHTOXA   Цитата(AlexandrY @ Jun 23 2015, 22:24) Вы...   Jun 23 2015, 17:29
||- - AlexandrY   Цитата(AHTOXA @ Jun 23 2015, 20:29) А как...   Jun 23 2015, 17:32
- - ArtDenis   На моём STM32L151 получились такие результаты: Мо...   Jun 23 2015, 17:45
|- - AlexandrY   Цитата(ArtDenis @ Jun 23 2015, 20:45) Мон...   Jun 23 2015, 18:25
|- - ArtDenis   Цитата(AlexandrY @ Jun 23 2015, 23:25) Ст...   Jun 23 2015, 18:42
|- - ArtDenis   Цитата(ArtDenis @ Jun 23 2015, 23:42) Воо...   Jun 24 2015, 02:48
- - ViKo   Программы - в студию. И выводы, желательно, не про...   Jun 24 2015, 04:00
|- - ArtDenis   Цитата(ViKo @ Jun 24 2015, 09:00) Програм...   Jun 24 2015, 04:19
|- - ViKo   Цитата(ArtDenis @ Jun 24 2015, 07:19) К с...   Jun 24 2015, 07:44
|- - ArtDenis   Цитата(ViKo @ Jun 24 2015, 12:44) Устроят...   Jun 24 2015, 08:00
|- - jcxz   Цитата(ArtDenis @ Jun 24 2015, 14:00) PS:...   Jun 24 2015, 09:42
|- - ArtDenis   Цитата(jcxz @ Jun 24 2015, 14:42) Все тес...   Jun 24 2015, 09:49
|- - jcxz   Цитата(ArtDenis @ Jun 24 2015, 15:49) Воо...   Jun 24 2015, 10:34
|- - ArtDenis   Цитата(jcxz @ Jun 24 2015, 15:34) Вообще ...   Jun 24 2015, 10:44
- - ArtDenis   Недокопипастил. Там в конце main() ещё Кодfor ...   Jun 24 2015, 09:02
- - AHTOXA   Ну, вроде всё вполне согласуется с моими опытами. ...   Jun 24 2015, 09:19
- - ArtDenis   Цитата(AHTOXA @ Jun 24 2015, 14:19) Ну, в...   Jun 24 2015, 09:31
- - AHTOXA   Цитата(ArtDenis @ Jun 24 2015, 14:31) Так...   Jun 24 2015, 10:27


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 03:02
Рейтинг@Mail.ru


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