alt3857 0 10 марта, 2012 Опубликовано 10 марта, 2012 (изменено) · Жалоба Привет. Возникли сомнения по поводу атомарности операции bit-banding. Во всех доках пишут, что данная операция обеспечивает атомарный доступ к битам периферии и RAM, но компилятор Keil генерирует три инструкции: MOV r0,#0x01 LDR r1,[pc,#28] ; @0x000012D4 STR r0,[r1,#0x64] А если между ними произойдет прерывание? Изменено 10 марта, 2012 пользователем alt3857 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба Привет. Возникли сомнения по поводу атомарности операции 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] во втором регистре адрес порта. т.е. атомарной должно быть чтение-модификация-запись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба ldr r1, [r2] orr r1,#1 str r1, [r2] И где же здесь атомарность?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zöner 0 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба А если между ними произойдет прерывание?обращение к порту происходит только в последней команде. Это и есть атомарность.И где же здесь атомарность??здесь - нигде Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ChipKiller 0 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба но компилятор Keil генерирует три инструкции: ... перейдите на ARM-ассемблер и скорее всего возможностей битбанга хватит.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zöner 0 10 марта, 2012 Опубликовано 10 марта, 2012 (изменено) · Жалоба перейдите на ARM-ассемблер и скорее всего возможностей битбанга хватит.чем тут поможет ассемблер ? в ARMе нет другого способа читать/писать память кроме как через загрузку адреса и данных в регистры, в отличии от AVR где есть IN/OUT и LDS/STS. Поэтому в первом примере нужны сначала 2 команды загрузки в регистры адреса и данных, только потом идет обращение к периферии. Изменено 10 марта, 2012 пользователем zöner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ChipKiller 0 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба чем тут поможет ассемблер ? в ARMе нет другого способа читать/писать память кроме как через загрузку адреса и данных в регистры... ... тем, что адрес не нужно грузить повторно ЗЫ. вообще-то автор топика задал вопрос в стиле "угадай зачем мне это нужно" , а гадать не охота...... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zöner 0 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба ... тем, что адрес не нужно грузить повторнодумаете С-оптимизатор этого не поймет ?вообще-то автор топика задал вопрос в стиле "угадай зачем мне это нужно" , а гадать не охота......скорее не совсем понял что такое атомарность доступа к портам и где она зарыта в коде из первого поста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 10 марта, 2012 Опубликовано 10 марта, 2012 · Жалоба Привет. Возникли сомнения по поводу атомарности операции 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 во время выполнения прерывания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 11 марта, 2012 Опубликовано 11 марта, 2012 · Жалоба обращение к порту происходит только в последней команде. Это и есть атомарность.здесь - нигде Перечитайте внимательнее начальное сообщение. Там говорится о "атомарности операции bit-banding", а не атомарности доступа к порту. Сделать эту последовательность из 3-х команд атомарной можно тока запретом прерываний. Тогда как в 1-м случае, как я понимаю, используется спец. адресное пространство и команда STR r0,[r1,#0x64] модифицирует только заданные биты ячейки памяти (заданные маской или номером бита в R0). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Там говорится о "атомарности операции bit-banding", а не ...Об этом вообще нет смысла говорить. Это очевидный факт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Сдаётся мне, что в этом топике многие, включая автора, слабо себе представляют суть области bit-band как таковую. В этом случае следует тщательно перечитать об этом в документации обратив внимание на поясняющие рисунки. Принцип атомарности любых операций с областью bit-band станет очевидным независимо от количества генерируемых компилятором инструкций. И желания снабдить свой код такой чушью, как обёртки из запрета\разрешения прерываний, даже не возникнет. Было у меня поползновение растолковать всё это подробнее, но страшно не люблю пересказывать даташиты и мануалы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Да уж, ветку пора закрывать. Без слёз не взглянешь как на вопрос, так и на большинство ответов. Остаётся только отослать к документации. ARM infocenter Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 12 марта, 2012 Опубликовано 12 марта, 2012 · Жалоба Мне казалось я доходчиво излагаю... И zoner и diwil и даже в общем-то и ChipKiller ничего противоестественного не сказали. Так что я бы попросил обойтись без слёз или конкретно цитировать то что их вызывает. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться