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

 
 
> Библиотека атомарных операций для 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
Ответов
AHTOXA
сообщение Jun 18 2015, 20:40
Сообщение #2


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

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



Цитата(ArtDenis @ Jun 18 2015, 21:31) *
Кто-нибудь встречал в природе готовую библиотеку для атомарных операций над целочисленными значениями? Интересуют стандартные операции типа "сравнить и обменять", арифметические операции (сложить и вернуть предыдущее значение), битовые и т.д.

Не то, чтобы библиотека, но часть примитивов там точно есть: тынц.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 19 2015, 04:40
Сообщение #3


Ally
******

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



Цитата(AHTOXA @ Jun 18 2015, 23:40) *
Не то, чтобы библиотека, но часть примитивов там точно есть: тынц.


Ну это уж совсем низкий уровень.
Там в SoC-ах на ARM Cortex столько нюансов, что писать это на C значит просто "прострелить себе ногу".
Лучше тогда дать ссылку на первоисточник: http://infocenter.arm.com/help/index.jsp?t...008a/index.html
Где выяснится, что реализация эксклюзивных мониторов зависит от производителя SoC-а.
От него же зависит и такая вещь как Exclusives Reservation Granule.
Совершенно темной остается тема конфликтов с DMA.
Помнить надо и о типе памяти (normal, device, ordered), т.е. совершенно четко его знать. И проч.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 19 2015, 07:48
Сообщение #4


Гуру
******

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



Вот моя реализация инкремента/декремента, обмена и сравнения-обмена для разных типов:
CODE
PUBLIC _Z9AtomicIncPVh, _Z9AtomicDecPVh
PUBLIC _Z10AtomicSwapPVhj, _Z10AtomicSwapPVtj _Z10AtomicSwapPVjj
PUBLIC _Z13AtomicCmpSwapPVhjj, _Z13AtomicCmpSwapPVtjj, _Z13AtomicCmpSwapPVjjj

;uint AtomicInc(u8 volatile *);
_Z9AtomicIncPVh:
aInc8_01: LDREXB R3, [R0]
ADDS R1, R3, #1
STREXB R2, R1, [R0]
CMP R2, #0
BNE aInc8_01
MOV R0, R3
BX LR

;uint AtomicDec(u8 volatile *);
_Z9AtomicDecPVh:
aDec8_01: LDREXB R3, [R0]
SUBS R1, R3, #1
STREXB R2, R1, [R0]
CMP R2, #0
BNE aDec8_01
MOV R0, R3
BX LR

;АтомарнаЯ операциЯ "обмен" длЯ типа u8.
;uint AtomicSwap(u8 volatile *, uint);
_Z10AtomicSwapPVhj:
aSwap8_01: LDREXB R3, [R0]
STREXB R2, R1, [R0]
CMP R2, #0
BNE aSwap8_01
MOV R0, R3
BX LR

;АтомарнаЯ операциЯ "обмен" длЯ типа u16.
;uint AtomicSwap(u16 volatile *, uint);
_Z10AtomicSwapPVtj:
aSwap16_01: LDREXH R3, [R0]
STREXH R2, R1, [R0]
CMP R2, #0
BNE aSwap16_01
MOV R0, R3
BX LR

;АтомарнаЯ операциЯ "обмен" длЯ типа u32.
;u32 AtomicSwap(u32 volatile *, u32);
_Z10AtomicSwapPVjj:
aSwap32_01: LDREX R3, [R0]
STREX R2, R1, [R0]
CMP R2, #0
BNE aSwap32_01
MOV R0, R3
BX LR

;АтомарнаЯ операциЯ "сравнение и обмен" длЯ типа u8.
;uint AtomicCmpSwap(u8 volatile *ptr, uint newVal, uint cmpVal);
_Z13AtomicCmpSwapPVhjj:
aCmpSwap8_01: LDREXB R12, [R0]
CMP R12, R2
ITT EQ
STREXBEQ R3, R1, [R0]
CMPEQ R3, #1
BEQ aCmpSwap8_01
MOV R0, R12
BX LR

;АтомарнаЯ операциЯ "сравнение и обмен" длЯ типа u16.
;uint AtomicCmpSwap(u16 volatile *ptr, uint newVal, uint cmpVal);
_Z13AtomicCmpSwapPVtjj:
aCmpSwap16_01: LDREXH R12, [R0]
CMP R12, R2
ITT EQ
STREXHEQ R3, R1, [R0]
CMPEQ R3, #1
BEQ aCmpSwap16_01
MOV R0, R12
BX LR

;АтомарнаЯ операциЯ "сравнение и обмен" длЯ типа u32.
;u32 AtomicCmpSwap(u32 volatile *ptr, u32 newVal, u32 cmpVal);
_Z13AtomicCmpSwapPVjjj:
aCmpSwap32_01: LDREX R12, [R0]
CMP R12, R2
ITT EQ
STREXEQ R3, R1, [R0]
CMPEQ R3, #1
BEQ aCmpSwap32_01
MOV R0, R12
BX LR

си++ - хидеры:
Код
uint AtomicInc(u8 volatile *);
uint AtomicDec(u8 volatile *);
uint AtomicSwap(u8 volatile *, uint);
uint AtomicSwap(u16 volatile *, uint);
u32  AtomicSwap(u32 volatile *, u32);
uint AtomicCmpSwap(u8 volatile *, uint newVal, uint cmpVal);
uint AtomicCmpSwap(u16 volatile *, uint newVal, uint cmpVal);
u32  AtomicCmpSwap(u32 volatile *, u32 newVal, u32 cmpVal);

Все остальные операции сможете сами реализовать если прочитаете доку о командах LDREX/STREX.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jun 19 2015, 08:24
Сообщение #5


Ally
******

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



Цитата(jcxz @ Jun 19 2015, 10:48) *
Вот моя реализация инкремента/декремента, обмена и сравнения-обмена для разных типов:


А оно работает?
Тут самое интересное как это тестировалось и на чем или ком. wink.gif
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
|- - 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
- - ViKo   Если бы эксклюзивные операции отслеживали только с...   Jun 23 2015, 05:55
|- - AlexandrY   Цитата(ViKo @ Jun 23 2015, 08:55) Если бы...   Jun 23 2015, 06:45
|- - jcxz   Цитата(ViKo @ Jun 23 2015, 11:55) Если бы...   Jun 23 2015, 07:21
|- - 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


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

 


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


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