реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Грамотные решения при работе с rtos
dimanisu
сообщение Oct 13 2011, 12:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Здравствуйте!
Хотел открыть новую тему по методам работы с RTOS, в которой можно было бы делиться опытом реализации тех или иных функций с привязкой к конкретной оси.

И первый вопрос будет такой:
как грамотно работать с интенсивно используемыми разделяемыми ресурсами?

Сам я только осваиваю это направление, поэтому и хотел бы начать с конкретной задачи, над которой сейчас работаю.
Исходные данные:
1. ОС – tnkernel
2. Процессор stm32f103z

Задача следующая:
1. процессор выводит информацию на графический дисплей(со встроенным контроллером) 640х480, также читает из памяти аудиоданные, которые потом отсылает на микросхему аудио усилителя по i2s.
2. И память и жки висят на одной параллельной шине, и работа с ними ведется посредством fsmc блока stm32f103z. Т.е. и там и там нужно работать с большими массивами. Как сделать так, чтобы работа с жки не сказывалась на аудио и наоборот.
3. Кроме этого оказалось, что fsmc мешает блоку i2c(не i2s !), через который идут команды на аудио усилитель. Это такая аппаратная проблема stm32 и всплыла она уже после разводки платы. Для нормальной работы i2c требуется отключать тактирование fsmc блока.

Как видно, разделяемый ресурс здесь блок работы с параллельной шиной fsmc.

Интересно мнение как приверженцев tnkernel, так и приверженцев других rtos.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 13 2011, 12:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(dimanisu @ Oct 13 2011, 16:12) *
Как видно, разделяемый ресурс здесь блок работы с параллельной шиной fsmc.

FSMC нельзя назвать разделяемым ресурсом, так как разделение достигается на аппаратном уровне. Вам остается только распределить процессорное время для конкурирующих задач.
Go to the top of the page
 
+Quote Post
dimanisu
сообщение Oct 13 2011, 12:28
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Цитата
FSMC нельзя назвать разделяемым ресурсом, так как разделение достигается на аппаратном уровне. Вам остается только распределить процессорное время для конкурирующих задач.


Я рассматриваю fsmc как ресурс, за который борются задача вывода на жки и задача вывода на аудио усилитель.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 13 2011, 12:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(dimanisu @ Oct 13 2011, 16:28) *
Я рассматриваю fsmc как ресурс, за который борются задача вывода на жки и задача вывода на аудио усилитель.

Задаче вывода на ЖКИ нужен сам ЖКИ, выводу аудио - память. И где тут борьба?
То обстоятельство, что они физически оба висят на FSMC ничего ровным счетом не меняет.
Go to the top of the page
 
+Quote Post
dimanisu
сообщение Oct 13 2011, 12:47
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Цитата
Задаче вывода на ЖКИ нужен сам ЖКИ, выводу аудио - память. И где тут борьба?
То обстоятельство, что они физически оба висят на FSMC ничего ровным счетом не меняет.


Но они же не могут одновременно обращаться к fsmc. Да они должны как то разделять между собой время для обращения к fsmc, т.е. опять таки делить его между собой.

Чтобы внести ясность в этот вопрос - что вы подразумеваете под разделяемым ресурсом?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 13 2011, 13:08
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(dimanisu @ Oct 13 2011, 16:47) *
Но они же не могут одновременно обращаться к fsmc.

Выполнятся одновременно на одном ядре они тоже не могут.

Цитата(dimanisu @ Oct 13 2011, 16:47) *
Да они должны как то разделять между собой время для обращения к fsmc, т.е. опять таки делить его между собой.

FSMC - это просто некая шина наружу. На ней висят разные устройства - ЖКИ и память. Где конфликт?

Цитата(dimanisu @ Oct 13 2011, 16:47) *
Чтобы внести ясность в этот вопрос - что вы подразумеваете под разделяемым ресурсом?

Разделяемым ресурсом, например, мог бы быть тот же ЖКИ, если бы его одновременно хотели крутить две задачи.
Go to the top of the page
 
+Quote Post
Demeny
сообщение Oct 13 2011, 13:08
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(dimanisu @ Oct 13 2011, 16:47) *
Но они же не могут одновременно обращаться к fsmc. Да они должны как то разделять между собой время для обращения к fsmc, т.е. опять таки делить его между собой.

Чего им его делить-то ? Процессор-то один. Каждая задача в свой квант времени, который ей выделила ОС, беспрепятсвенно общается со своей периферией.
Разделяемый ресурс начинается тогда, когда одна задача не может произвольно работать с ресурсом и должна оглядываться на другие задачи, чтобы они завершили свою работу с тем же ресурсом.
Классический пример - две параллельные задачи работают с одной переменной, увеличивая её на единицу.


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
dimanisu
сообщение Oct 13 2011, 13:32
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Спасибо за ответы Demeny, aaarrr. Это я понимаю. Просто в своем первом посте у меня есть третий пункт:

Цитата
3. Кроме этого оказалось, что fsmc мешает блоку i2c(не i2s !), через который идут команды на аудио усилитель. Это такая аппаратная проблема stm32 и всплыла она уже после разводки платы. Для нормальной работы i2c требуется отключать тактирование fsmc блока.


Это моя вина, что не расписал, но для общения по i2c я планировал выделить отдельную задачу, т.к. на него навешано еще несколько микросхем, а ему мешает fsmc и в этой задаче он отключается. Отсюда и мое убеждение, что fsmc - это разделяемый ресурс.

Цитата
Чего им его делить-то ? Процессор-то один. Каждая задача в свой квант времени, который ей выделила ОС, беспрепятсвенно общается со своей периферией.

К тому же, а что произойдет если переключение задач произойдет в момент обращения к шине.

rtos тема для меня новая и быть может мои вопросы вас забавляют, в таком случае, поделитесь информацией - как бы вы подступились к этой задаче. blush.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 13 2011, 13:32
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(dimanisu @ Oct 13 2011, 15:12) *
3. Кроме этого оказалось, что fsmc мешает блоку i2c(не i2s !), через который идут команды на аудио усилитель. Это такая аппаратная проблема stm32 и всплыла она уже после разводки платы. Для нормальной работы i2c требуется отключать тактирование fsmc блока.


Ну что, глубоко сочувствую. Тож один раз нарвался на эту неприятность с I2C.
Никак не разруливал эту ситуацию, просто упростил функциональность устройства.

Это не задача для RTOS.
У RTOS такт ИМХО должен быть не короче 10 мс, а у кого короче тот выбрал для RTOS неправильное тактическое применение.
Т.е. для быстрой коммутации между I2C и внешней шиной RTOS не подходит.

Что касается разделения времени владения внешней шиной, то лучше всего для этого подходит DMA и механизм приоритезации в DMA.

Как вариант для разруливания конфликта I2C и внешней шины можно было бы использовать таймера с прерываниями вне контекста RTOS.
Go to the top of the page
 
+Quote Post
dimanisu
сообщение Oct 13 2011, 13:39
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Цитата
Никак не разруливал эту ситуацию, просто упростил функциональность устройства.

Каким образом?

Цитата
Т.е. для быстрой коммутации между I2C и внешней шиной RTOS не подходит.

???Не понял о чем речь. Поясните пожалуйста. По i2c у меня скорость не очень большая

Цитата
Что касается разделения времени владения внешней шиной, то лучше всего для этого подходит DMA и механизм приоритезации в DMA.

Если не сложно, можно более подробно осветить этот момент именно для работы с rtos.

Сообщение отредактировал dimanisu - Oct 13 2011, 13:42
Go to the top of the page
 
+Quote Post
Demeny
сообщение Oct 13 2011, 13:45
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(dimanisu @ Oct 13 2011, 17:32) *
К тому же, а что произойдет если переключение задач произойдет в момент обращения к шине.

rtos тема для меня новая и быть может мои вопросы вас забавляют, в таком случае, поделитесь информацией - как бы вы подступились к этой задаче. blush.gif

В момент обращения к шине переключения задач произойти не может - до завершения транзакции чтения или записи по шине smc процессор как бы "висит", для медленных устройств на такой шине иногда вводится сигнал NWAIT, удерживающий процессор, пока медленное устройство не обработает запрос.
А если переключение произойдёт между транзакциями - ничего страшного не будет - задача продолжит свою работу после возращения ей управления.
Безусловно, острота такого вопроса возникает тогда, когда не хватает пропускной способности шины - либо звук захлёбывается, либо картинка тормозит. Тут уже от RTOS ничего не зависит, надо пересматривать всю архитектуру системы в целом.


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
LightElf
сообщение Oct 18 2011, 08:23
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



QUOTE (dimanisu @ Oct 13 2011, 17:39) *
Поясните пожалуйста. По i2c у меня скорость не очень большая


Может вам просто организовать софтверный i2c и забить на хардварную проблему?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 18 2011, 11:52
Сообщение #13


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AlexandrY @ Oct 13 2011, 16:32) *
У RTOS такт ИМХО должен быть не короче 10 мс, а у кого короче тот выбрал для RTOS неправильное тактическое применение.

Может, лучше количеством тактов оперировать, скажем, накладные расходы оси не превышают 1% от общего процового времени
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 18 2011, 11:52
Сообщение #14


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AlexandrY @ Oct 13 2011, 16:32) *
У RTOS такт ИМХО должен быть не короче 10 мс, а у кого короче тот выбрал для RTOS неправильное тактическое применение.

Может, лучше количеством тактов оперировать, скажем, накладные расходы оси не превышают 1% от общего процового времени?

Сообщение отредактировал _Pasha - Oct 18 2011, 11:53
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 18 2011, 14:07
Сообщение #15


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(_Pasha @ Oct 18 2011, 14:52) *
Может, лучше количеством тактов оперировать, скажем, накладные расходы оси не превышают 1% от общего процового времени?


Не лучше.
Такт короче 10 мс создает иллюзорный соблазн привязаться к тактам для получения коротких реакций использую примитивный поллинг в задачах.
Когда задач мало такое еще проходит, но когда накоплен багаж драйверов использующих такие методы это уже может ударить по реалтайму в самый неприятный момент.
Вообщем психотехнологический нюанс. wink.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016