Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разделяемые между задачами переменные
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > uC/OS-II
andrewlekar
Что-то не соображу, как идеологически правильнее сделать следующее. У программы есть интерфейс SPI slave и можно ей послать данные на запись или указать регистр для чтения. Идея такая, чтобы таким образом рулить настройками программы, запускать/останавливать некие действия. Как лучше организовать архитектуру этих регистров внутри программы для избежания гонок, а также с таким расчётом, чтобы в дальнейшем мог быть прикручен и другой интерфейс, например uart.
Mailbox не очень подходит, потому что нужно организовать и чтение. Мютексы не понравились тем, что нужно указывать какой-то приоритет. И вообще, стоит ли здесь использовать сервисы оси или сделать программными средствами: буферизация данных + volatile атрибут?
zltigo
Цитата(andrewlekar @ Oct 27 2009, 14:54) *
Mailbox не очень подходит, потому...

Например, два майлбокса передача и прием.
Цитата
И вообще, стоит ли здесь использовать сервисы оси или...

Вам виднее, что Вы там в результате хотите сделать.
AndrewN
Цитата(andrewlekar @ Oct 27 2009, 14:54) *
сделать следующее

> идеологически правильнее
Divide et empera и никакой другой идеологии нет.

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

Ничего другого и никаких других средств нет.
andrewlekar
Цитата(AndrewN @ Oct 28 2009, 00:47) *
> идеологически правильнее
Divide et empera и никакой другой идеологии нет.

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

Цитата(AndrewN @ Oct 28 2009, 00:47) *
применяется или mutext или binary semaphore (with maxval=1), что почти одно и тоже.

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

Однако про бинарный семафор в доке микриумовской сказано, что нельзя применять для расшариваемых ресурсов. Причина не указана.
Сделал проверку семафора (декремент) перед обращением к переменной и восстановление семафора (инкремент) после.
AndrewN
Цитата(andrewlekar @ Oct 28 2009, 09:32) *
Однако про бинарный семафор в доке микриумовской сказано, что нельзя применять для расшариваемых ресурсов. Причина не указана.

Причина в том, что возможны два последствия, взаимоблокировка
(deadlock) и/или инверсия приоритетов. Возможны но не обязательны.
Второе последствие не очень страшно, т.к. инверсия это один
из частных случаев приоритетного планирования, а первое
последствие можно избежать - если аккуратно спланировать
использование и передачу ресурсов от задачи к задаче, в том
числе и буферизацию.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.