|
|
  |
Измеритель, как организовать программу? |
|
|
|
Jun 30 2012, 17:10
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Посмотрел как реализуется событийная (набор конечных автоматов вызываемых из кольцевого буфера). Впринципе не сложно. Только вот что будет если например при записи на SD карту, произоёдет запрос по Ethernet на чтение из SD-карты? Иними словами, чем в итоге отличается такой метод от ОСРВ? скорость пострадает? так как придётся ждать, пока произойдёт вызов соответствующей функции из кольцевого буфера? Цитата(AlexandrY @ Jun 30 2012, 20:48)  Как раз такой Satec я разбирал. Там внутри стоял довольно убогий по сегодняшним меркам 16-и битный микроконтроллер. Естественно там линукс рядом не лежал. Да, одна микросхема от AD еще не все делает, к ней достаточно прикрутить STM32 за пару баксов и тогда будет полное удовольствие.  И что тогда она будет уметь? Разве что выводить данные на дисплей и общаться с внешним миром. ADE7880 хоть и хорошее решение, но она суть чёрный ящик, который просто выдаёт вычисленные значения. А если я хочу THD тока узнать до 40-й гармоники? тут хоть STM62  ставь, но если ADE7880 этого не умеет - то не умеет. Цитата(sasamy @ Jun 29 2012, 20:26)  можно использовать poll в юзерспейс, при известной частоте дискретизации заранее известно сколько измерений нужно для 10 мс, задать буфер на 20 мс - процесс автоматически будет активирован когда данные готовы для обработки. простите, откуда вы взяли этот текст: Each ring buffer typically has an event chrdev (similar to the more general ones above) to pass on events such as buffer 50% full and an access chrdev via which the raw data it self may be read back.
Сообщение отредактировал Zelepuk - Jun 30 2012, 17:10
|
|
|
|
|
Jun 30 2012, 20:35
|

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

|
Цитата(sasamy @ Jun 30 2012, 22:45)  Я больше по поводу Linux рефлексировал  а ссылка на ade7880 которую давал AlexandrY у меня не сработала, в любом случае я надеюсь AlexandrY не принимает близко к сердцу мои выпады - у него своя голова есть на плечах и знает что когда и зачем применять. Не буду здесь прикидываться экспертом, но честно говоря подвигло меня поискать такую микруху именно эта тема.  Хотя с микросхемами от AD я работал и знаю, что они и сырые сэмплы всегда могли выдавать. С другой стороны вот буквально на днях анонсирован STM32F3 на Cortex-M4 с 3-х канальным 16-и битным прецизионным ADC. Так что тему дорогих анализаторов прочно убили. Но мы что-то отвлеклись от начальной темы. Чтобы работало суперкольцо надо как минимум: -программные модули типа файловой системы или сетевого стека не должны использовать программных циклов ожидания внутри себя, т.е. полинга -программные модули не должны требовать детерминированных периодических вызовов своих функций (скажем для ведения внутренних таймеров) По сути все исходники надо прошерстить чтобы убедиться в выполнении этих критериев. RTOS позволяет этого не делать. Собственно в этом ее гигантское преимущество. Линукс тож как бы это же самое предоставляет, но накладных расходов просто больше.
|
|
|
|
|
Jul 1 2012, 15:12
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(AlexandrY @ Jun 30 2012, 13:26)  Кстати о RTOS, перечисленными вами вещами как: "синхронизация потоков", "мьютексы", "семафоры" практически не пользуюсь. Это знаете ли, пережитки больших осей, где каждая задача как черный ящик для программиста. В малых осях можно напрямую читать и писать переменные разных задач не применяя никаких объектов синхронизации, просто зная кто еще, как и когда к ним обращается. А сделать это в обозримых сорсах не представляет проблем. И надежность в целом повысится, Вот так и появляются 'супер надежные' системы типа Therac-25. Никаких объектов синхронизации, своя собственная небольшая ОСРВ, свои задачи (всего 3 штуки), все знают что и где пишется. Результат - 8 трупов
|
|
|
|
|
Jul 2 2012, 04:43
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Zelepuk @ Jun 29 2012, 20:21)  А если реализация будет в виде суперлупа, в котором будут поочерёдно вызываться функции(конечные автоматы) как вы рекомендовали, что будет когда в момент записи на SD-карту происходит запрос по Ethernet? запрос будет просто ждать своей очереди? Я не рекомендовал, я лишь сказал, что можно сделать так. И что это будет даже полезно - поймете необходимость в следующей разработке использовать ртос. На счет одновременного доступа к sd-карте - тут уже Вам решать. =) Определитесь что вы хотите получать по езернету - историю нескольких последних измерений или целиком все файлы, имеющиеся на карточке. Определитесь, как именно Вы будете писать историю, учитывая, что при fat32 больше 4 Гб файлы быть не могут. Цитата(AlexandrY @ Jun 30 2012, 13:26)  Linux тут явно не конкурентное решение. Да и AT91 прошлый век. Вы читали задачи, которые требуются решить автору? Микроконтроллеры с 2мя ядрами - это, конечно, хорошо. Но надо не терять связь с реальностью. =) Цитата(AlexandrY @ Jun 30 2012, 13:26)  Кстати о RTOS, перечисленными вами вещами как: "синхронизация потоков", "мьютексы", "семафоры" практически не пользуюсь. Это знаете ли, пережитки больших осей, где каждая задача как черный ящик для программиста. В малых осях можно напрямую читать и писать переменные разных задач не применяя никаких объектов синхронизации, просто зная кто еще, как и когда к ним обращается. А сделать это в обозримых сорсах не представляет проблем. И надежность в целом повысится, так как чем меньше сервисов используете тем меньше проблем оси получаете в виде инверсии приоритетов и взаимных блокировок. Единственно что действительно понадобится это сервисы очередей и событий. И практически все! Довольно интересное суждение, Therac-25 уже привели. Но если прочитать первое и последнее предложение, то выходит несколько противоречиво. Ведь события и очереди - это объекты синхронизации потоков.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Jul 2 2012, 05:10
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Zelepuk @ Jul 2 2012, 08:50)  Желательно получать все файлы. 4Гб - думаю что этого хватить для всей системы (Linux) + одна папочка (куда надо писать и откуда надо читать информацию). В папке будут короткие фалы осциллограмм(сырые отсчёты с АЦП), записываемые туда непериодичеки, а так же периодическая информация, обновляемая каждые 3 секунды. А периодическая информация будет дописываться в один большой файл? У меня, например, была задача писать видео на sd карту и одновременно его отдавать по езернету, а вот отдавать все файлы по сети мне надо было при отсутствующей записи на sd. У Вас же постоянно идет запись, но не очень интенсивно. Так что, например, просто при каждой дозаписи в файл закрывайте его, чтобы при необходимости другая задача (конечный автомат) могла выкачать часть файла в ОЗУ, из которого эзернет будет кушать. И обязательно прикиньте необходимую скорость для записи - у sd карты есть документированная задержка независящая от класса карты. Чтобы добиться высокой скорости записи приходится применять буферизацию. Тема на этом форуме поднималась часто.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Jul 2 2012, 06:15
|

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

|
Цитата(Lotor @ Jul 2 2012, 07:43)  Вы читали задачи, которые требуются решить автору? Микроконтроллеры с 2мя ядрами - это, конечно, хорошо. Но надо не терять связь с реальностью. =) Что-то реальность вас не слушается. LPC43xx уже продается, я уже не говорю о всяких OMAP-ах с 5-ю разными ядрами на борту. Или вы о чем? Цитата(Lotor @ Jul 2 2012, 07:43)  Довольно интересное суждение, Therac-25 уже привели. Но если прочитать первое и последнее предложение, то выходит несколько противоречиво. Ведь события и очереди - это объекты синхронизации потоков. Могу припомнить, что приемы межзадачного обмена без сервисов синхронизации в современных ARM-ах введены на аппаратном уровне. Если цепляться к терминологии, то в малых RTOS нет потоков, а есть только задачи. Я автора скорее бы предостерег от использования SD карт как надежных решений для записи большого количества файлов. Ибо FAT системы начинают сильно тормозить и сбоить когда количество существующих или стертых файлов переваливает тысячу.
|
|
|
|
Guest_@Ark_*
|
Jul 2 2012, 09:33
|
Guests

|
Цитата(Zelepuk @ Jun 29 2012, 00:00)  Требуется разработать измеритель... Задачи, которые нужно обрабатывать в программе: 1) принимать данные с АЦП через SPI по внешнему прерыванию и записывать в кольцевой буфер (частота дискретизации порядка 25кГц) 2) каждые 10 мс. производить обработку блока данных с АЦП по некоторому алгоритму; 3) усреднять данные полученные в п.2 каждые 3 секунды 4) записывать данные, полученные в п.3 на SD-карту (история) 5) обрабатывать запросы через Ethernet (задать время внутренних часов, считать данные с SD-карты, задать калибровочные коэффициенты для АЦП и пр.) 6) обновлять данные на дисплее каждые 3 секунды Встал вопрос: как организовать программу? Есть большие сомнения в целесообразности "запихивания" всех перечисленных задач в один МК. Даже если он двухядерный. На мой взгляд, связка из двух МК здесь предпочтительнее. Первый МК занимается задачами 1-2 (или 1-3), второй МК - задачами 3-6 (или 4-6). Каждый занимается своим делом и не мешает другому. Объем передаваемых между ними данных будет не особо велик. Если пойти дальше в этом направлении, то стоит заменить второй МК на ПК. Тогда задача совсем упрощается.
|
|
|
|
|
Jul 2 2012, 10:26
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(AlexandrY @ Jul 2 2012, 10:15)  Что-то реальность вас не слушается. LPC43xx уже продается, я уже не говорю о всяких OMAP-ах с 5-ю разными ядрами на борту. Или вы о чем? Я об избыточности предлагаемой Вами элементной базы на данную конкретную задачу. Не буду спорить на тему целесообразности "мигания светодиодом на linux", но у меня аналогичная с автором топика задача + lcd, +прием потока в 2 МБайта/с ложилась хорошо на один arm7. А к lpc43 я и сам приглядываюсь, но это на проекты, где нужно действительно сложную математику выполнять. Цитата(AlexandrY @ Jul 2 2012, 10:15)  в малых RTOS нет потоков, а есть только задачи. Ох, слишком высокие материи пошли. Я почитал в той же wiki раздел про отличия потоков и процессов.  Как ни назови, задача - это по сути и есть поток, хотя правильнее сказать процесс.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|