У меня вопрос об использовании семафоров в коре m3. Я нашел нить «ARM cortex: mutex с использованием бит-диапазона» ARM cortex: mutex using bit banding. Существует краткое описание проблемы, и последний ответ будет полезен для моей проблемы, но я не уверен, как это реализовать в c/C++.Cortex M3 - как использовать семафоры
«Я никогда не использовал бит-банданг на ARM, вместо этого вместо этого было бы использовать load-exclusive/store-conditional для всех таких операций. Используйте цикл для загрузки-исключая старое значение, вычислите новый значение и использовать условное хранилище для его записи. Петля до тех пор, пока не будет выполнено условное хранилище (что, вероятно, будет во второй раз, если оно не будет первым).
Я был бы очень признателен, если кто-то может опубликовать короткий код, как его использовать.
Спасибо, Martin
Привет, Игорь, спасибо за ваш ответ. Я не уверен, как использовать код. Все, что я прочитал о семафорах, было то, что была функция semop(), и вы могли бы сделать что-то вроде этого: semop() - lock . . - это безопасный код? (я прав?) . semop() - unlock Итак, теперь мне нужно сделать что-то вроде этого? a.take() . . - мой защищенный код здесь . a.release() Thanks, Martin –
Код не становится «безопасным» только потому, что вы используете семафоры; они должны использоваться, если в этом есть необходимость. Обычно вы используете их для защиты общего ресурса от одновременного доступа с помощью возможных параллельных путей кода. Если у вас нет какой-либо RTOS или планировщика, маловероятно, что вам нужны семафоры. Я предлагаю вам задать новый вопрос и описать проблему _actual_, которую вы пытаетесь решить, тогда мы увидим, нужны ли вам семафоры, и если да, то как их применять. –
Привет, Игорь, спасибо за ваш ответ и жаль, что я не ответил на какое-то время ... Я использую freeRTOS, и мне кажется, что мне нужны семафоры. После быстрой проверки семафоров я понял свою проблему - и, конечно, мой предыдущий вопрос не был умным :) Во всяком случае, спасибо за вашу помощь. –