|
Библиотека атомарных операций для STM32 |
|
|
|
 |
Ответов
|
Jun 23 2015, 05:55
|

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

|
Если бы эксклюзивные операции отслеживали только сами себя, толку от них было бы никакого. Так можно и обычным флагом обойтись, когда захотел - установил, когда надо - проверил... Смысл именно в том, что мониторится любое обращение к памяти (надо думать, запись). Типа, триггера. LDREX разрешает работу триггера, любая запись в память устанавливает его в 1, CLREX сбрасывает его. STREX проверяет триггер, и если он установлен, не пишет в память, и выдает 1 в регистр. И запрещает мониторинг (триггер).
|
|
|
|
|
Jun 23 2015, 07:21
|
Гуру
     
Группа: Свой
Сообщений: 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 и совсем в другую ячейку памяти. Вполне возможно для упрощения реализации механизма в ядре сделали срабатывание не только на эксклюзивный доступ.
|
|
|
|
Сообщений в этой теме
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  AlexandrY Цитата(jcxz @ Jun 23 2015, 10:21) Вполне ... Jun 23 2015, 17:24   AHTOXA Цитата(AlexandrY @ Jun 23 2015, 22:24) Вы... Jun 23 2015, 17:29    AlexandrY Цитата(AHTOXA @ Jun 23 2015, 20:29) А как... Jun 23 2015, 17:32   jcxz Цитата(AlexandrY @ Jun 23 2015, 23:24) Т.... Jun 23 2015, 18:14 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|