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

 
 
 
Reply to this topicStart new topic
> Атомарность bit-banding в Cortex-M3
alt3857
сообщение Mar 10 2012, 05:01
Сообщение #1


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

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



Привет. Возникли сомнения по поводу атомарности операции bit-banding. Во всех доках пишут, что данная операция обеспечивает атомарный доступ к битам периферии и RAM, но
компилятор Keil генерирует три инструкции:
MOV r0,#0x01
LDR r1,[pc,#28] ; @0x000012D4
STR r0,[r1,#0x64]
А если между ними произойдет прерывание?

Сообщение отредактировал alt3857 - Mar 10 2012, 05:02
Go to the top of the page
 
+Quote Post
diwil
сообщение Mar 10 2012, 07:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(alt3857 @ Mar 10 2012, 09:01) *
Привет. Возникли сомнения по поводу атомарности операции bit-banding. Во всех доках пишут, что данная операция обеспечивает атомарный доступ к битам периферии и RAM, но
компилятор Keil генерирует три инструкции:
MOV r0,#0x01
LDR r1,[pc,#28] ; @0x000012D4
STR r0,[r1,#0x64]
А если между ними произойдет прерывание?

имеется ввиду атомарность операции str. Ибо адрес и само значение может быть загружено заранее.

Авот если без битбанга, то тогда сложнее -
ldr r1, [r2]
orr r1,#1
str r1, [r2]

во втором регистре адрес порта.
т.е. атомарной должно быть чтение-модификация-запись.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 10 2012, 07:35
Сообщение #3


Гуру
******

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



Цитата(diwil @ Mar 10 2012, 13:08) *
ldr r1, [r2]
orr r1,#1
str r1, [r2]

И где же здесь атомарность??
Go to the top of the page
 
+Quote Post
zöner
сообщение Mar 10 2012, 07:41
Сообщение #4


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

Группа: Участник
Сообщений: 195
Регистрация: 16-02-12
Пользователь №: 70 299



Цитата
А если между ними произойдет прерывание?
обращение к порту происходит только в последней команде. Это и есть атомарность.
Цитата
И где же здесь атомарность??
здесь - нигде
Go to the top of the page
 
+Quote Post
ChipKiller
сообщение Mar 10 2012, 09:54
Сообщение #5


Участник
*

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



Цитата("alt3857")
но компилятор Keil генерирует три инструкции:
... перейдите на ARM-ассемблер и скорее всего возможностей битбанга хватит....
Go to the top of the page
 
+Quote Post
zöner
сообщение Mar 10 2012, 10:20
Сообщение #6


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

Группа: Участник
Сообщений: 195
Регистрация: 16-02-12
Пользователь №: 70 299



Цитата
перейдите на ARM-ассемблер и скорее всего возможностей битбанга хватит.
чем тут поможет ассемблер ? в ARMе нет другого способа читать/писать память кроме как через загрузку адреса и данных в регистры, в отличии от AVR где есть IN/OUT и LDS/STS. Поэтому в первом примере нужны сначала 2 команды загрузки в регистры адреса и данных, только потом идет обращение к периферии.

Сообщение отредактировал zöner - Mar 10 2012, 10:21
Go to the top of the page
 
+Quote Post
ChipKiller
сообщение Mar 10 2012, 11:44
Сообщение #7


Участник
*

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



Цитата("zöner")
чем тут поможет ассемблер ? в ARMе нет другого способа читать/писать память кроме как через загрузку адреса и данных в регистры...
... тем, что адрес не нужно грузить повторно

ЗЫ. вообще-то автор топика задал вопрос в стиле "угадай зачем мне это нужно" , а гадать не охота......
Go to the top of the page
 
+Quote Post
zöner
сообщение Mar 10 2012, 12:29
Сообщение #8


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

Группа: Участник
Сообщений: 195
Регистрация: 16-02-12
Пользователь №: 70 299



Цитата
... тем, что адрес не нужно грузить повторно
думаете С-оптимизатор этого не поймет ?
Цитата
вообще-то автор топика задал вопрос в стиле "угадай зачем мне это нужно" , а гадать не охота......
скорее не совсем понял что такое атомарность доступа к портам и где она зарыта в коде из первого поста
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 10 2012, 13:42
Сообщение #9


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(alt3857 @ Mar 10 2012, 09:01) *
Привет. Возникли сомнения по поводу атомарности операции bit-banding. Во всех доках пишут, что данная операция обеспечивает атомарный доступ к битам периферии и RAM, но
компилятор Keil генерирует три инструкции:
MOV r0,#0x01
LDR r1,[pc,#28] ; @0x000012D4
STR r0,[r1,#0x64]
А если между ними произойдет прерывание?

Ничего страшного не произойдёт, т.к модификация бита происходит атомарно за одну инструкцию STR.
В отличие от
Код
ldr r1, [r2]
orr r1,#1
str r1, [r2]
где возникшее после первой или второй инструкции прерывание может потерять результаты своего изменения ячейки памяти по адресу [r2] из-за того что она (ячейка) была закеширована в r1 во время выполнения прерывания.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 11 2012, 15:59
Сообщение #10


Гуру
******

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



Цитата(zöner @ Mar 10 2012, 13:41) *
обращение к порту происходит только в последней команде. Это и есть атомарность.здесь - нигде

Перечитайте внимательнее начальное сообщение. Там говорится о "атомарности операции bit-banding", а не атомарности доступа к порту.
Сделать эту последовательность из 3-х команд атомарной можно тока запретом прерываний.
Тогда как в 1-м случае, как я понимаю, используется спец. адресное пространство и команда STR r0,[r1,#0x64] модифицирует только заданные биты ячейки памяти
(заданные маской или номером бита в R0).
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 12 2012, 05:19
Сообщение #11


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(jcxz @ Mar 11 2012, 19:59) *
Там говорится о "атомарности операции bit-banding", а не ...
Об этом вообще нет смысла говорить. Это очевидный факт.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 12 2012, 08:24
Сообщение #12


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Сдаётся мне, что в этом топике многие, включая автора, слабо себе представляют суть области bit-band как таковую. В этом случае следует тщательно перечитать об этом в документации обратив внимание на поясняющие рисунки. Принцип атомарности любых операций с областью bit-band станет очевидным независимо от количества генерируемых компилятором инструкций. И желания снабдить свой код такой чушью, как обёртки из запрета\разрешения прерываний, даже не возникнет.
Было у меня поползновение растолковать всё это подробнее, но страшно не люблю пересказывать даташиты и мануалы.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 12 2012, 08:35
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Да уж, ветку пора закрывать. Без слёз не взглянешь как на вопрос, так и на большинство ответов. Остаётся только отослать к документации.
ARM infocenter
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 12 2012, 10:50
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Мне казалось я доходчиво излагаю...
И zoner и diwil и даже в общем-то и ChipKiller ничего противоестественного не сказали.
Так что я бы попросил обойтись без слёз или конкретно цитировать то что их вызывает.
Спасибо.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


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


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