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

Разделяемые между задачами переменные

Что-то не соображу, как идеологически правильнее сделать следующее. У программы есть интерфейс SPI slave и можно ей послать данные на запись или указать регистр для чтения. Идея такая, чтобы таким образом рулить настройками программы, запускать/останавливать некие действия. Как лучше организовать архитектуру этих регистров внутри программы для избежания гонок, а также с таким расчётом, чтобы в дальнейшем мог быть прикручен и другой интерфейс, например uart.

Mailbox не очень подходит, потому что нужно организовать и чтение. Мютексы не понравились тем, что нужно указывать какой-то приоритет. И вообще, стоит ли здесь использовать сервисы оси или сделать программными средствами: буферизация данных + volatile атрибут?

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


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

Mailbox не очень подходит, потому...

Например, два майлбокса передача и прием.

И вообще, стоит ли здесь использовать сервисы оси или...

Вам виднее, что Вы там в результате хотите сделать.

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


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

сделать следующее

> идеологически правильнее

Divide et empera и никакой другой идеологии нет.

 

> для избежания гонок

применяется или mutext или binary semaphore (with maxval=1), что почти одно и тоже.

 

Ничего другого и никаких других средств нет.

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


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

> идеологически правильнее

Divide et empera и никакой другой идеологии нет.

Ну это то понятно.

 

применяется или mutext или binary semaphore (with maxval=1), что почти одно и тоже.

 

Ничего другого и никаких других средств нет.

Однако про бинарный семафор в доке микриумовской сказано, что нельзя применять для расшариваемых ресурсов. Причина не указана.

Сделал проверку семафора (декремент) перед обращением к переменной и восстановление семафора (инкремент) после.

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


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

Однако про бинарный семафор в доке микриумовской сказано, что нельзя применять для расшариваемых ресурсов. Причина не указана.

Причина в том, что возможны два последствия, взаимоблокировка

(deadlock) и/или инверсия приоритетов. Возможны но не обязательны.

Второе последствие не очень страшно, т.к. инверсия это один

из частных случаев приоритетного планирования, а первое

последствие можно избежать - если аккуратно спланировать

использование и передачу ресурсов от задачи к задаче, в том

числе и буферизацию.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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