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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Атомарная операция, STM32F10x
HARMHARM
сообщение Dec 31 2008, 08:35
Сообщение #16


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Alex B._ @ Dec 31 2008, 09:52) *
При чем тут 32-бита?

При том, что крайне редко используются переменные больше 32 бит. А для восьмибитника любое обрещение к переменной больше 8 бит сразу неатомарное.
Go to the top of the page
 
+Quote Post
Alex B._
сообщение Jan 1 2009, 21:33
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



Цитата(Dog Pawlowa @ Dec 31 2008, 11:07) *
Да не любое. Банальная передача флага от одного "процесса" другому не требует атомарности. Ну опросит второй процесс флаг после чтения переменной из памяти первым процессом ? - ничего не изменится.
А вот инкремент переменной - требует. Поэтому разрядность влияет.

Проблемы начнутся, когда эти "процессы" начнут взаимно синхронизироваться через этот флаг.
Про разрядность так и не понял. У любой RMW архитектуры существует подобная проблема, вне зависимости от разрядности.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 1 2009, 22:18
Сообщение #18


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Alex B._ @ Jan 2 2009, 01:33) *
Про разрядность так и не понял. У любой RMW архитектуры существует подобная проблема, вне зависимости от разрядности.

Но ведь всё просто.
К примеру, имеется ISR таймера с единственной инструкцией - counter++;
Если проц восьмибитный и counter имеет разрядность больше байта - перед чтением значения (в основном цикле) надо заходить в critical section, иначе, после чтения первого байта, может проскочить прерывание и второй байт будет изменён. Таким образом мы получим один байт от предыдущего значения счётчика, а второй и последующие - от нового.
Если разрядность проца 32 бита (а переменная counter в большинстве случаев не будет превышать такую разрядность), то считывать можно без всяких секций - проц в любом случае прочитает её целиком.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 1 2009, 22:52
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ Jan 2 2009, 00:18) *
Но ведь всё просто.
А если эта переменная - структура? А если система команд не имеет команды "установить бит" для ячейки памяти (как AVR) - тогда для взведения флага один процесс (а) считывает переменную, накладывает маску, хочет записать результат назад и в это время возникает перепланировка или прерывание и другой участок кода (б) тоже считывает-модифицирует-записывает переменную, возвращая управление коду (а), который заканчивая RMW затирает изменение, только что внесенное кодом (б).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
klop
сообщение Jan 2 2009, 00:24
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Извините если не в тему но мне всегда казалось что когда говорят Атомарная операция относительно АРМ архитектуры то подразумевают SWP(SWPB) и только. Только ета инструкция покрытая HLOCK на AHB будет гарантированно атомарная.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 2 2009, 02:15
Сообщение #21


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Сергей Борщ @ Jan 2 2009, 02:52) *
А если эта переменная - структура? А если система команд не имеет команды "установить бит" для ячейки памяти (как AVR) - тогда для взведения флага один процесс (а) считывает переменную, накладывает маску, хочет записать результат назад и в это время возникает перепланировка или прерывание и другой участок кода (б) тоже считывает-модифицирует-записывает переменную, возвращая управление коду (а), который заканчивая RMW затирает изменение, только что внесенное кодом (б).

Тогда тоже всё просто - critical section smile.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jan 2 2009, 11:06
Сообщение #22


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(sonycman @ Jan 2 2009, 06:15) *
Тогда тоже всё просто - critical section smile.gif


Так вот именно про это выше по-русски и сказано : критическая секция, а не просто запрет/разрешение прерываний.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 2 2009, 11:22
Сообщение #23


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(sergeeff @ Jan 2 2009, 15:06) *
Так вот именно про это выше по-русски и сказано : критическая секция, а не просто запрет/разрешение прерываний.

А кто спорит? Если задача не совсем простенькая, и прерывания в процессе динамически запрещаются/разрешаются в нескольких потоках, то нужно восстанавливать сохранённое значение PRIMASK/FAULMASK перед выходом из CS, а не просто тупо их разрешать.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 2 2009, 12:36
Сообщение #24


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

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



а какая атомарная операция вам нужна?
у кортекса есть еще LDREX STREX (их можно и прямо из С использовать) и прерывания запрещать не понадобится
Go to the top of the page
 
+Quote Post
brag
сообщение May 14 2011, 22:53
Сообщение #25


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата(KRS @ Jan 2 2009, 15:36) *
а какая атомарная операция вам нужна?
у кортекса есть еще LDREX STREX (их можно и прямо из С использовать) и прерывания запрещать не понадобится

только толку от этих инстуркций мало
Cortex-M3 Device Generic User Guide:
Цитата
The result of executing a Store-Exclusive instruction to an address that is different from that used in the preceding Load-Exclusive instruction is unpredictable.

ARM®v7-M ArchitectureReference Manual
Цитата
If the local monitor is in its Exclusive Access state and a processor performs a Store-Exclusive to any address other than the last one from which it has performed a Load-Exclusive, it is IMPLEMENTATION DEFINED whether the store succeeds, but in all cases the local monitor is reset to its Open Access state. In ARMv7-M, the store must be treated as a software programming error.

Go to the top of the page
 
+Quote Post

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

 


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


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