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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> SPI bus в виде задачи в RTOSe
lazarev andrey
сообщение Feb 5 2010, 13:50
Сообщение #1


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



здрасьте народ.
недавно начал изучать freertos. кое как слабал usb устройство из примеров smile.gif.
дошел в данный момент до описания обмена данными по SPI. по SPI данные и читаются и записываются, микросхем куча и все разные.
по сути: начинаю обмозговывать как бы описать обмен по SPI в виде отдельной задачи (или двух одна на чтение другая на запись).
вроде если переписать пример serial и comtest, то должно работать, только еще добавить обращение непосредственно к отдельной взятой микросхеме.

у кого какие мысли?
может у кого то есть уже реализованные варианты? smile.gif

ЕСЛИ ТЕМА БРЕД -> ГРОХНИТЕ ЕЕ smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 5 2010, 13:53
Сообщение #2


Гуру
******

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



Зачем в одну задачу увязывать работу с кучей разных микросхем? Делите сам SPI между разными задачами.
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Feb 5 2010, 14:08
Сообщение #3


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



рассматриваю также и такой вариант. все относительно в этом мире smile.gif
Go to the top of the page
 
+Quote Post
Terminator
сообщение Feb 6 2010, 04:55
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Отдельная задача для SPI скорее всего будет бесполезной тратой ресурсов. Прислушайтесь к aaarrr
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Feb 6 2010, 20:36
Сообщение #5


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Могу предложить Вам критерий, которым пользуюсь сам.
Если на уровне общей логики системы все подключенные к SPI микросхемы будут подчиняться неким общим правилам (например, составная долговременная память с общей системой адресации или что-нибудь подобное) - то тогда есть смысл оформлять как одну задачу.
Если же это будут по сути совершенно разнородные устройства и общим у них будет только аппаратный интерфейс обмена, то слияние этого в одну задачу только добавит головной боли.
Go to the top of the page
 
+Quote Post
Axel
сообщение Feb 7 2010, 06:14
Сообщение #6


Местный
***

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



SPI - аппаратный ресурс, который "шарится" между различными задачами, поэтому отдельная SPI-задача может иметь смысл (ИМХО). Правда нормально это будет работать, если при этом не требуется перенастройки (скорость, полярность клока и т.д.).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2010, 09:21
Сообщение #7


Гуру
******

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



Цитата(Axel @ Feb 7 2010, 09:14) *
SPI - аппаратный ресурс, который "шарится" между различными задачами, поэтому отдельная SPI-задача может иметь смысл (ИМХО).

Странный вывод. SPI-задача может иметь смысл, например, если не хочется блокировать вызывающую задачу при отсутствии DMA (не частый случай, прямо скажем). А вот зачем создавать ее на пустом месте, когда можно и так замечательно расшарить ресурс mutex'ами - не понимаю.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2010, 09:42
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Feb 7 2010, 12:21) *
когда можно и так замечательно расшарить ресурс mutex'ами - не понимаю.

Когда ресурс занимается минимальным действием по "байт переслать" в симплексе, то можно и mutex. Если за работой с SPI стоит протокол, то отдельная задача занимающаяся обслуживанием SPI совершенно естественна. Кроме прикрытия SPI mutex-ами, во многих случаях естественнее смотрится очередь сообщений/указателей на сообщения. И критические секции имеют право на жизнь тоже. Варианты.....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2010, 10:43
Сообщение #9


Гуру
******

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



Цитата(zltigo @ Feb 7 2010, 12:42) *
Когда ресурс занимается минимальным действием по "байт переслать" в симплексе, то можно и mutex.

Для SPI это, пожалуй, и составляет большинство применений.

Цитата(zltigo @ Feb 7 2010, 12:42) *
Если за работой с SPI стоит протокол, то отдельная задача занимающаяся обслуживанием SPI совершенно естественна.

Протокол обычно стоит за чем-то, висящим на SPI. Тогда работу с этим "чем-то" логично вынести в отдельную задачу, оставив сам SPI на более низком уровне.

Цитата(zltigo @ Feb 7 2010, 12:42) *
Кроме прикрытия SPI mutex-ами, во многих случаях естественнее смотрится очередь сообщений/указателей на сообщения. И критические секции имеют право на жизнь тоже. Варианты.....

Очередь поможет в тех нечастых случаях, что упоминались мной в предыдущем посте. Во многих других - просто усложнит программу, без какой либо выгоды.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2010, 14:05
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Feb 7 2010, 13:43) *
Для SPI это, пожалуй, и составляет большинство применений.

Или нет. У меня за SPI "микросхемы" редко, все больше FPGA, да другие контроллеры.
Цитата
Протокол обычно стоит за чем-то, висящим на SPI. Тогда работу с этим "чем-то" логично вынести в отдельную задачу, оставив сам SPI на более низком уровне.

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

Очередь по сложности нефатально отличается от мютекса, а в конкретно поминаемом случае FreeRTOS вообще не отличается.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2010, 14:11
Сообщение #11


Гуру
******

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



Цитата(zltigo @ Feb 7 2010, 17:05) *
Или нет. У меня за SPI "микросхемы" редко, все больше FPGA, да другие контроллеры.

Поскольку это единственная задача, то и всякие дробления и мютексы ей никчему.

Хочу только заметить, что у топикстартера "микросхем куча и все разные".

Цитата(zltigo @ Feb 7 2010, 17:05) *
Очередь по сложности нефатально отличается от мютекса, а в конкретно поминаемом случае FreeRTOS вообще не отличается.

Разница в том, что очередь должен кто-то обслуживать.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2010, 14:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Feb 7 2010, 17:11) *
Хочу только заметить, что у топикстартера "микросхем куча и все разные".

Для кидания "байта" в непойми чего ни система, ни мютексы не нужны - кидающий просто смотрит на SPI - свободен или нет. И ждет
освобождения.
Цитата
Разница в том, что очередь должен кто-то обслуживать.

Вызывающая передачу задача и обработчик события завершения передачи.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2010, 14:53
Сообщение #13


Гуру
******

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



Цитата(zltigo @ Feb 7 2010, 17:46) *
Для кидания "байта" в непойми чего ни система, ни мютексы не нужны - кидающий просто смотрит на SPI - свободен или нет. И ждет
освобождения.

Только не надо доводить до абсурда. Откуда такие крайности? Или у вас на SPI единственная FPGA с разлапистым протоколом, или "непойми чего". Другие варианты не рассматриваете?
В общем случае работа с SPI сводится к передаче и приему N байт с предварительной установкой и последующим снятием CS, мьютекс тут как раз на месте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2010, 15:38
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Feb 7 2010, 17:53) *
Или у вас на SPI единственная FPGA с разлапистым протоколом, или "непойми чего". Другие варианты не рассматриваете?

Рассматриваю - кучка контроллеров с похожими, или одинаковыми протоколами.
Цитата
В общем случае работа с SPI сводится к передаче и приему N байт с предварительной установкой и последующим снятием CS, мьютекс тут как раз на месте.

Для такого вырожденного случая софтовый мютекс совсем не нужен - уже писал - работают флаги в железе. Никакого абсурда.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2010, 15:50
Сообщение #15


Гуру
******

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



Цитата(zltigo @ Feb 7 2010, 18:38) *
Рассматриваю - кучка контроллеров с похожими, или одинаковыми протоколами.

Хорошо, давайте рассмотрим случай, когда на шине одновременно присутствуют устройство с протоколом (например, SD/MMC карта в SPI-режиме) и без (например, 25-я еепромка для хранения каких-нибудь мелочей). Что будем делать?

Цитата(zltigo @ Feb 7 2010, 18:38) *
Для такого вырожденного случая софтовый мютекс совсем не нужен - уже писал - работают флаги в железе.

Да имейте же меру в упрощениях и вырождениях! Это верно, только если слейв один и достучатся до него пытается только одна задача.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2010, 16:05
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Feb 7 2010, 18:50) *
Хорошо, давайте рассмотрим случай, когда на шине одновременно присутствуют устройство с протоколом (например, SD/MMC карта в SPI-режиме) и без (например, 25-я еепромка для хранения каких-нибудь мелочей). Что будем делать?

Прежде всего думать об оптимальном решении для каждого конкретного случая. Мютекс просто универсальное решение минимального системного уровня, но для конкретного случая надо рассматривать и альтернативы. Тот-же мютекс при всей своей универсальности, не годится для обработчика прерывания.
Цитата
Это верно, только если слейв один и достучатся до него пытается только одна задача.

С чего-бы это вдруг? Две задачи проверяют занятость общей части железа обслуживающего несколько слейвов и не лезут в него, пока занято. Если в ту-же '25' лезут изредка, а SD нагружен изрядно, то можно уже и подумать, а дергать-ли каждый раз системный мютекс при работе с SD, или пусть обращение изредка тупенько поспит/повисит на сканировании железного (или банального софтового) флага.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 7 2010, 16:42
Сообщение #17


Гуру
******

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



Цитата(zltigo @ Feb 7 2010, 19:05) *
С чего-бы это вдруг? Две задачи проверяют занятость общей части железа обслуживающего несколько слейвов и не лезут в него, пока занято.

Только если железо достаточно интеллектуально, чтобы обеспечивать передачу "от и до", что далеко не всегда наблюдается в реальной жизни.

Цитата(zltigo @ Feb 7 2010, 19:05) *
Если в ту-же '25' лезут изредка, а SD нагружен изрядно, то можно уже и подумать, а дергать-ли каждый раз системный мютекс при работе с SD, или пусть обращение изредка тупенько поспит/повисит на сканировании железного (или банального софтового) флага.

А почему бы не дергать? С SD работа идет здоровыми блоками, дерганье мьютекса ни на чем не скажется. А спать/висеть на сканировании флага - как-то не комильфо.


Конечно, каждый из рассмотренных подходов имеет право на существование в своих условиях. Но если вернуться к теме, то увязывание работы "кучи разных микросхем" в одну задачу в общем случае не представляется правильным. Так же, например, как увязывание 25 и SD.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2010, 18:49
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Feb 7 2010, 19:42) *
Только если железо достаточно интеллектуально, чтобы обеспечивать передачу "от и до", что далеко не всегда наблюдается в реальной жизни.

Eстественно, на железо надо смотреть - оно не названо.
Цитата
А почему бы не дергать?

У названной Автором FreeRTOS есть только очереди, все остальное виртуальное. И честно говоря, меня это не смущает, ибо всегда
смотрел на те-же мютексы как крайнее средство для заставить чего-то работать.
Цитата
А спать/висеть на сканировании флага - как-то не комильфо.

Естественно, что поставить заявку на побудку это с точки зрения системы элегантнее. Но и такой тупой вариант со сканированием не следует сразу отвергать.
Цитата
Конечно, каждый из рассмотренных подходов имеет право на существование в своих условиях.

О чем и речь smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lazarev andrey
сообщение Feb 10 2010, 19:55
Сообщение #19


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

Группа: Свой
Сообщений: 184
Регистрация: 6-12-06
Пользователь №: 23 196



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

по сути то, да. SPI у меня для тупых задач, никаких там протоколов, никаких огромных объемов передаваемых данных.
это уж я как обычно задумался над тем, а как бы вот так скрестить много устройств на шине под управлением РТОСа.
у меня один мастер - МК. и куча слэйвов, там отличие только в том, что в парочке надо поменять полярность тактирующего сигнала, да для удобства количество бит за передачу.

но в любом случае ответы наталкивают на серьезные размышления smile.gif.
пойду осозновать, очень, очень вдумчивые мысли smile.gif
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Feb 22 2010, 08:03
Сообщение #20


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

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



Цитата(zltigo @ Feb 7 2010, 22:38) *
работают флаги в железе.
Без обработчика прерываний? Задача, которая инициировала обмен по SPI, должна как-то данные забрать. А если она инзкоприоритетная?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 00:35
Рейтинг@Mail.ru


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