-
- Если один процессор и обращение к данным в памяти (обычным переменным) - то барьеры не нужны. Барьеры нужны, если например модифицируется таблица векторов: запретили прерывания, __ISB(), записали адрес нового обработчика, __DSB(), разрешили Lightelf(266 знак., 05.11.2017 15:54)
- Эти голословные заклинания есть во всех даташитах. Вопрос - что будет, если шабат не соблюдать. Как появятся коллизии? Почему именно здесь надо ставить именно этот барьер, а не другой? Давайте препарировать страшилки - Незнайкин(05.11.2017 16:05, )
- А что там препарировать? Есть несколько шин с разной частотой и буферами записи. Обычная гонка сигналов. - Lightelf(05.11.2017 16:11)
- Ну, мы прекрасно за десять лет разобрались с volatile и атомарностью. Страшилки понятны и формалмзуемы. А здесь? Пошаговый пример возникновения коллизии при захвате семафора без DMB, с DMB, затем что будет если поставить DSB, или ISB на поточности Незнайкин(7 знак., 05.11.2017 16:17, )
- Смотря как реализован семафор. Скорее всего там барьеры не нужны. - Lightelf(05.11.2017 16:24)
- Ну, мы прекрасно за десять лет разобрались с volatile и атомарностью. Страшилки понятны и формалмзуемы. А здесь? Пошаговый пример возникновения коллизии при захвате семафора без DMB, с DMB, затем что будет если поставить DSB, или ISB на поточности Незнайкин(7 знак., 05.11.2017 16:17, )
- Есть ли прямая иерархия у самих барьеров (то есть один покрывает ли и расширяет подмножество ништяков другого или они не матрёшка)? - Незнайкин(05.11.2017 16:10, )
- Не матрешка, друг друга в общем случае не покрывают. - Lightelf(05.11.2017 16:13)
- А что там препарировать? Есть несколько шин с разной частотой и буферами записи. Обычная гонка сигналов. - Lightelf(05.11.2017 16:11)
- Эти голословные заклинания есть во всех даташитах. Вопрос - что будет, если шабат не соблюдать. Как появятся коллизии? Почему именно здесь надо ставить именно этот барьер, а не другой? Давайте препарировать страшилки - Незнайкин(05.11.2017 16:05, )
- КМК, у Joseph Yiu понятно написано, для чего каждый из барьеров применяется Vit(704 знак., 05.11.2017 10:00, ссылка, ссылка)
- Ещё документ по теме --> - Vit(05.11.2017 11:12, ссылка)
- Начали терзать сомнения. Скажем, UART на прерываниях, кольцевой буфер, unsigned int volatile head, tail; char volatile fifo[]. Вот там эти барьеры нужны? - SciFi(05.11.2017 10:11)
- Если не запрещаешь прерывания, то не нужно. - Lightelf(05.11.2017 15:56)
- По идее все разруливается компилятором стандартными средствами. В С есть команда DMB - нет! Никому не нужная сущность. - VLLV(05.11.2017 10:35)
- Не верю! - SciFi(05.11.2017 11:10)
- несколько проектов на АРМ перевалило за 200К экземпляров, 128К кода. Как оно работает? - VLLV(05.11.2017 16:10)
- :) аппаратный конвейер (кэш инструкций) и DMA чихали на стандартные средства компилятора - Vit(05.11.2017 10:42 - 11:05)
- Не верю! - SciFi(05.11.2017 11:10)
- Инкремент или декремент хоть и выполняется быстро, но загрузить значение "на место" нужно. Часто после этого выполняется сравнение. При volatile компилятор должен брать значение по адресу хранения. Где-то тут может быть неопределенность. Я индексы Vit(428 знак., 05.11.2017 10:34)
- Именно после ”Примитивов синхронизации” и остаются недосказанности типа: а если не сделаю? Хотелось бы не декларативно, а на пальцах, потому что ну что это за объяснение When the Store-Exclusive succeeds, it executes a DMB and returns. - Незнайкин(05.11.2017 10:06, )
- по инструкции DMB перед свежим доступом к памяти все предыдущие завершаются полностью. перед записью в переменную семафор её модифицированного значения необходимо дождаться, пока это значение для модификации не будет потенциально непредсказуемым - Vit(56 знак., 05.11.2017 10:18)
- Если мы боимся что семафор-тугодум не успеет перекинуться, то в чем тогда повышение безопасности доступа к ресурсу? Если к тупому семафору могут почти одновременно два мастера, то, пока он чешется после одного мастера, может обратиться другой Незнайкин(245 знак., 05.11.2017 10:43, )
- по инструкции DMB перед свежим доступом к памяти все предыдущие завершаются полностью. перед записью в переменную семафор её модифицированного значения необходимо дождаться, пока это значение для модификации не будет потенциально непредсказуемым - Vit(56 знак., 05.11.2017 10:18)
- Если один процессор и обращение к данным в памяти (обычным переменным) - то барьеры не нужны. Барьеры нужны, если например модифицируется таблица векторов: запретили прерывания, __ISB(), записали адрес нового обработчика, __DSB(), разрешили Lightelf(266 знак., 05.11.2017 15:54)