|
|
  |
Грамотные решения при работе с rtos |
|
|
|
Oct 13 2011, 12:12
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Oct 13 2011, 12:28
|
Участник

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

|
Цитата FSMC нельзя назвать разделяемым ресурсом, так как разделение достигается на аппаратном уровне. Вам остается только распределить процессорное время для конкурирующих задач. Я рассматриваю fsmc как ресурс, за который борются задача вывода на жки и задача вывода на аудио усилитель.
|
|
|
|
|
Oct 13 2011, 12:47
|
Участник

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

|
Цитата Задаче вывода на ЖКИ нужен сам ЖКИ, выводу аудио - память. И где тут борьба? То обстоятельство, что они физически оба висят на FSMC ничего ровным счетом не меняет. Но они же не могут одновременно обращаться к fsmc. Да они должны как то разделять между собой время для обращения к fsmc, т.е. опять таки делить его между собой. Чтобы внести ясность в этот вопрос - что вы подразумеваете под разделяемым ресурсом?
|
|
|
|
|
Oct 13 2011, 13:08
|
Гуру
     
Группа: Свой
Сообщений: 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)  Чтобы внести ясность в этот вопрос - что вы подразумеваете под разделяемым ресурсом? Разделяемым ресурсом, например, мог бы быть тот же ЖКИ, если бы его одновременно хотели крутить две задачи.
|
|
|
|
|
Oct 13 2011, 13:08
|

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

|
Цитата(dimanisu @ Oct 13 2011, 16:47)  Но они же не могут одновременно обращаться к fsmc. Да они должны как то разделять между собой время для обращения к fsmc, т.е. опять таки делить его между собой. Чего им его делить-то ? Процессор-то один. Каждая задача в свой квант времени, который ей выделила ОС, беспрепятсвенно общается со своей периферией. Разделяемый ресурс начинается тогда, когда одна задача не может произвольно работать с ресурсом и должна оглядываться на другие задачи, чтобы они завершили свою работу с тем же ресурсом. Классический пример - две параллельные задачи работают с одной переменной, увеличивая её на единицу.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Oct 13 2011, 13:32
|
Участник

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

|
Спасибо за ответы Demeny, aaarrr. Это я понимаю. Просто в своем первом посте у меня есть третий пункт: Цитата 3. Кроме этого оказалось, что fsmc мешает блоку i2c(не i2s !), через который идут команды на аудио усилитель. Это такая аппаратная проблема stm32 и всплыла она уже после разводки платы. Для нормальной работы i2c требуется отключать тактирование fsmc блока. Это моя вина, что не расписал, но для общения по i2c я планировал выделить отдельную задачу, т.к. на него навешано еще несколько микросхем, а ему мешает fsmc и в этой задаче он отключается. Отсюда и мое убеждение, что fsmc - это разделяемый ресурс. Цитата Чего им его делить-то ? Процессор-то один. Каждая задача в свой квант времени, который ей выделила ОС, беспрепятсвенно общается со своей периферией. К тому же, а что произойдет если переключение задач произойдет в момент обращения к шине. rtos тема для меня новая и быть может мои вопросы вас забавляют, в таком случае, поделитесь информацией - как бы вы подступились к этой задаче.
|
|
|
|
|
Oct 13 2011, 13:32
|

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.
|
|
|
|
|
Oct 13 2011, 13:39
|
Участник

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

|
Цитата Никак не разруливал эту ситуацию, просто упростил функциональность устройства. Каким образом? Цитата Т.е. для быстрой коммутации между I2C и внешней шиной RTOS не подходит. ???Не понял о чем речь. Поясните пожалуйста. По i2c у меня скорость не очень большая Цитата Что касается разделения времени владения внешней шиной, то лучше всего для этого подходит DMA и механизм приоритезации в DMA. Если не сложно, можно более подробно осветить этот момент именно для работы с rtos.
Сообщение отредактировал dimanisu - Oct 13 2011, 13:42
|
|
|
|
|
Oct 13 2011, 13:45
|

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

|
Цитата(dimanisu @ Oct 13 2011, 17:32)  К тому же, а что произойдет если переключение задач произойдет в момент обращения к шине. rtos тема для меня новая и быть может мои вопросы вас забавляют, в таком случае, поделитесь информацией - как бы вы подступились к этой задаче.  В момент обращения к шине переключения задач произойти не может - до завершения транзакции чтения или записи по шине smc процессор как бы "висит", для медленных устройств на такой шине иногда вводится сигнал NWAIT, удерживающий процессор, пока медленное устройство не обработает запрос. А если переключение произойдёт между транзакциями - ничего страшного не будет - задача продолжит свою работу после возращения ей управления. Безусловно, острота такого вопроса возникает тогда, когда не хватает пропускной способности шины - либо звук захлёбывается, либо картинка тормозит. Тут уже от RTOS ничего не зависит, надо пересматривать всю архитектуру системы в целом.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Oct 18 2011, 08:23
|
Частый гость
 
Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205

|
QUOTE (dimanisu @ Oct 13 2011, 17:39)  Поясните пожалуйста. По i2c у меня скорость не очень большая Может вам просто организовать софтверный i2c и забить на хардварную проблему?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|