Перейти к содержанию
    

Атомарность bit-banding в Cortex-M3

Привет. Возникли сомнения по поводу атомарности операции bit-banding. Во всех доках пишут, что данная операция обеспечивает атомарный доступ к битам периферии и RAM, но

компилятор Keil генерирует три инструкции:

MOV r0,#0x01

LDR r1,[pc,#28] ; @0x000012D4

STR r0,[r1,#0x64]

А если между ними произойдет прерывание?

Изменено пользователем alt3857

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. Возникли сомнения по поводу атомарности операции 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]

 

во втором регистре адрес порта.

т.е. атомарной должно быть чтение-модификация-запись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если между ними произойдет прерывание?
обращение к порту происходит только в последней команде. Это и есть атомарность.
И где же здесь атомарность??
здесь - нигде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но компилятор Keil генерирует три инструкции:
... перейдите на ARM-ассемблер и скорее всего возможностей битбанга хватит....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

ЗЫ. вообще-то автор топика задал вопрос в стиле "угадай зачем мне это нужно" , а гадать не охота......

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... тем, что адрес не нужно грузить повторно
думаете С-оптимизатор этого не поймет ?
вообще-то автор топика задал вопрос в стиле "угадай зачем мне это нужно" , а гадать не охота......
скорее не совсем понял что такое атомарность доступа к портам и где она зарыта в коде из первого поста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. Возникли сомнения по поводу атомарности операции 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 во время выполнения прерывания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

обращение к порту происходит только в последней команде. Это и есть атомарность.здесь - нигде

Перечитайте внимательнее начальное сообщение. Там говорится о "атомарности операции bit-banding", а не атомарности доступа к порту.

Сделать эту последовательность из 3-х команд атомарной можно тока запретом прерываний.

Тогда как в 1-м случае, как я понимаю, используется спец. адресное пространство и команда STR r0,[r1,#0x64] модифицирует только заданные биты ячейки памяти

(заданные маской или номером бита в R0).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там говорится о "атомарности операции bit-banding", а не ...
Об этом вообще нет смысла говорить. Это очевидный факт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сдаётся мне, что в этом топике многие, включая автора, слабо себе представляют суть области bit-band как таковую. В этом случае следует тщательно перечитать об этом в документации обратив внимание на поясняющие рисунки. Принцип атомарности любых операций с областью bit-band станет очевидным независимо от количества генерируемых компилятором инструкций. И желания снабдить свой код такой чушью, как обёртки из запрета\разрешения прерываний, даже не возникнет.

Было у меня поползновение растолковать всё это подробнее, но страшно не люблю пересказывать даташиты и мануалы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да уж, ветку пора закрывать. Без слёз не взглянешь как на вопрос, так и на большинство ответов. Остаётся только отослать к документации.

ARM infocenter

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне казалось я доходчиво излагаю...

И zoner и diwil и даже в общем-то и ChipKiller ничего противоестественного не сказали.

Так что я бы попросил обойтись без слёз или конкретно цитировать то что их вызывает.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...