spongebob 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Всем привет. Объясните, пожалуйста, нужно ли обеспечивать межпроцессорную синхронизацию для доуступа к переменным простых типов (8 бит, bool) на AVR с использованием scmRTOS и др. ОС? Имеется несколько читающих и пишущих процессов в эту переменную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 50 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба 3 минуты назад, spongebob сказал: на AVR И как вы себе это представляете? Аппаратных механизмов доступа к общей памяти нет и у гораздо более мощных процессоров, программно, через порт и прерывания с использованием механизмов синхронизации при обновлении можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 240 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба 22 минуты назад, spongebob сказал: нужно ли обеспечивать межпроцессорную синхронизацию А что - уже многоядерные AVR появились??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spongebob 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 (изменено) · Жалоба 44 minutes ago, mantech said: И как вы себе это представляете? Аппаратных механизмов доступа к общей памяти нет и у гораздо более мощных процессоров, программно, через порт и прерывания с использованием механизмов синхронизации при обновлении можно. Я не про можно, а про нужно :) Правильно ли я понимаю, что доступ к 8-битным переменным всегда атомарен? Ну, т. е., ситуации, при которых один процесс пишет в переменную и его прерывает другой процесс, чтобы записать или прочитать (и наоборот), не приведут к проблемам? Если переменная более 8 бит (или какая-либо сложная структура), то между записью/чтением ее байтов могут вклиниться другие подобные операции и тут точно могут быть проблемы... 24 minutes ago, jcxz said: А что - уже многоядерные AVR появились??? Я про доступ к переменной в памяти из разных процессов ОС, допустим scmRTOS. В рамках этой ОС потоки называются процессами. Это непринципиально. Изменено 14 апреля, 2022 пользователем spongebob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Все не совсем так. Если один процесс только пишет в переменную, а другой только читает - то да, атомарно. Но если идет чтение-модификация-запись или проверка переменной и запись в нее, то может быть много интересного. Рассмотрим ситуацию: процесс хочет отмодифицировать переменную. Он выбирает значение из памяти в регистр, т.к. операции можификации бывают только над регистрами, затем процесс прервали и изменили значение переменной в памяти. Управление вернули. Процесс модифицирует регистр и пишет его в память. Значение, которое записал другой процесс пропало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 4 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба В любой ос есть критические секции, которые не могут быть прерваны. Если сомневаешься, то пользуйся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба >> нужно ли обеспечивать межпроцессорную синхронизацию 1 hour ago, spongebob said: . . . . Это непринципиально. правильное использование терминов как раз принципиально. Эта "тема" называется inter-process communication, IPC ps Разбираясь с синхронизацией, атомарностью "наразвес" своими силами, Вы рискуете изобрести велосипед в виде mutex-а или семафора. Посмотрите их реализацию (исходник) в scmRTOS, возможно это "ОНО". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 213 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Логичен ещё один процесс арбитра записи, и к/от каждого участника очереди — две пары флагов и буферная переменная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spongebob 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба 49 minutes ago, k155la3 said: нужно ли обеспечивать межпроцессорную синхронизацию Ой, прошу прощения... написал совсем не то, что нужно... конечно же межпроцессную (межпоточную) синхронизацию. 50 minutes ago, k155la3 said: Разбираясь с синхронизацией, атомарностью "наразвес" своими силами, Вы рискуете изобрести велосипед в виде mutex-а или семафора. Да, конечно, я знаю про них и использую их. Вопрос был про доступ к простой однобайтной переменной. Спасибо. 14 minutes ago, Plain said: Логичен ещё один процесс арбитра записи, и к/от каждого участника очереди — две пары флагов и буферная переменная. А это для чего? 1 hour ago, rkit said: В любой ос есть критические секции, которые не могут быть прерваны. Если сомневаешься, то пользуйся. Да, конечно, я использую их, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба 3 часа назад, spongebob сказал: Правильно ли я понимаю, что доступ к 8-битным переменным всегда атомарен? Операции чтение-модификация-запись неатомарны ни для каких типов. Если таковые имеются над этой переменной в вашем коде (например |=, &= ), то средства межпроцессного взаимодействия нужны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrew_Q 0 15 апреля, 2022 Опубликовано 15 апреля, 2022 · Жалоба http://we.easyelectronics.ru/os-rtos/mezhprocessnaya-kommunikaciya-v-scmrtos-chast-1-myuteksy.html Не оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spongebob 0 15 апреля, 2022 Опубликовано 15 апреля, 2022 (изменено) · Жалоба 13 hours ago, Darth Vader said: Операции чтение-модификация-запись неатомарны ни для каких типов. Если таковые имеются над этой переменной в вашем коде (например |=, &= ), то средства межпроцессного взаимодействия нужны. Не, чтение-модификация-запись - у меня нет. У меня bool. Два процесса, просто читают, пишут, проверяют значение. Изменено 15 апреля, 2022 пользователем spongebob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 15 апреля, 2022 Опубликовано 15 апреля, 2022 · Жалоба 40 минут назад, spongebob сказал: Не, чтение-модификация-запись - у меня нет. У меня bool. Два процесса, просто читают, пишут, проверяют значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 15 апреля, 2022 Опубликовано 15 апреля, 2022 · Жалоба 3 hours ago, spongebob said: Не, чтение-модификация-запись - у меня нет. У меня bool. Два процесса, просто читают, пишут, проверяют значение. Так можете налететь на трудноотлавливаемый баг-глюк-сбой из-за явления, подобного децимации. Оно наблюдается даже на цифровых осциллографах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 16 апреля, 2022 Опубликовано 16 апреля, 2022 · Жалоба 23 часа назад, spongebob сказал: Не, чтение-модификация-запись - у меня нет Если ваша переменная не регистровая, по практически все операции над ней, кроме = (присваивание значения) будут неатомарны. Для любой операции: +, -, *, /, &, |, ^, <<, >> значение из переменной в памяти надо считать в регистр, произвести операцию в регистре и записать результат обратно в переменную в памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться