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

 
 
> Измеритель, как организовать программу?
Zelepuk
сообщение Jun 28 2012, 20:00
Сообщение #1


Знающий
****

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



Требуется разработать измеритель.
Аппаратная база: МК + внешний АЦП + дисплей
Задачи, которые нужно обрабатывать в программе:
1) принимать данные с АЦП через SPI по внешнему прерыванию и записывать в кольцевой буфер (частота дискретизации порядка 25кГц)
2) каждые 10 мс. производить обработку блока данных с АЦП по некоторому алгоритму;
3) усреднять данные полученные в п.2 каждые 3 секунды
4) записывать данные, полученные в п.3 на SD-карту (история)
5) обрабатывать запросы через Ethernet (задать время внутренних часов, считать данные с SD-карты, задать калибровочные коэффициенты для АЦП и пр.)
6) обновлять данные на дисплее каждые 3 секунды

Встал вопрос: как организовать программу?
вариант, который приходит на ум:
1)Суперлуп. В основном цикле которого производится опрос флагов( таких как "накопился буфер с АЦП" и пр.). Здесь так же работают прерывания: от АЦП - ложим отсчёт в буфер; от порта Ethernet - обрабатываем сообщения; от таймера - прошло 3 секунды и пора делать усреднение результатов.
2) По прерываниям от таймера делать переключение задач (каруселька)
Что лучше в данном случае и что ещё можно применить?

просто я "панически" боюсь таких терминов как "синхронизация потоков", "мьютексы", "семафоры" и прочее...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lotor
сообщение Jun 29 2012, 09:56
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Zelepuk @ Jun 29 2012, 00:00) *
Встал вопрос: как организовать программу?

Если не хотите стандартную rtos, то можете сделать в виде суперлупа, в котором будут поочередно вызываться функции(конечные автоматы) из кольцевого буфера "задач". Это очень полезно, т.к. в конце пути осознаете целесообразность делать следующий проект на какой-нибудь ртос.

Цитата(Zelepuk @ Jun 29 2012, 00:00) *
просто я "панически" боюсь таких терминов как "синхронизация потоков", "мьютексы", "семафоры" и прочее...

А все эти слова придуманы, чтобы разделять общие данные. Например в Вашем случаи история на sd-карте может запрашиваться по эзернету, когда вы в неё пишите. Кстати синхронизацию потоков Вы делаете постоянно, когда есть данные, которые используются и в прерывание, и в основной программе.



--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jun 29 2012, 16:21
Сообщение #3


Знающий
****

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



Цитата(Lotor @ Jun 29 2012, 13:56) *
Если не хотите стандартную rtos, то можете сделать в виде суперлупа, в котором будут поочередно вызываться функции(конечные автоматы) из кольцевого буфера "задач". Это очень полезно, т.к. в конце пути осознаете целесообразность делать следующий проект на какой-нибудь ртос.


А все эти слова придуманы, чтобы разделять общие данные. Например в Вашем случаи история на sd-карте может запрашиваться по эзернету, когда вы в неё пишите. Кстати синхронизацию потоков Вы делаете постоянно, когда есть данные, которые используются и в прерывание, и в основной программе.


А если реализация будет в виде суперлупа, в котором будут поочерёдно вызываться функции(конечные автоматы) как вы рекомендовали, что будет когда в момент записи на SD-карту происходит запрос по Ethernet? запрос будет просто ждать своей очереди?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jul 2 2012, 04:43
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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 уже привели. Но если прочитать первое и последнее предложение, то выходит несколько противоречиво. Ведь события и очереди - это объекты синхронизации потоков.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jul 2 2012, 04:50
Сообщение #5


Знающий
****

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



Цитата(Lotor @ Jul 2 2012, 07:43) *
На счет одновременного доступа к sd-карте - тут уже Вам решать. =) Определитесь что вы хотите получать по езернету - историю нескольких последних измерений или целиком все файлы, имеющиеся на карточке. Определитесь, как именно Вы будете писать историю, учитывая, что при fat32 больше 4 Гб файлы быть не могут.

Желательно получать все файлы. 4Гб - думаю что этого хватить для всей системы (Linux) + одна папочка (куда надо писать и откуда надо читать информацию). В папке будут короткие фалы осциллограмм(сырые отсчёты с АЦП), записываемые туда непериодичеки, а так же периодическая информация, обновляемая каждые 3 секунды.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jul 2 2012, 05:10
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Zelepuk @ Jul 2 2012, 08:50) *
Желательно получать все файлы. 4Гб - думаю что этого хватить для всей системы (Linux) + одна папочка (куда надо писать и откуда надо читать информацию). В папке будут короткие фалы осциллограмм(сырые отсчёты с АЦП), записываемые туда непериодичеки, а так же периодическая информация, обновляемая каждые 3 секунды.

А периодическая информация будет дописываться в один большой файл?
У меня, например, была задача писать видео на sd карту и одновременно его отдавать по езернету, а вот отдавать все файлы по сети мне надо было при отсутствующей записи на sd.
У Вас же постоянно идет запись, но не очень интенсивно. Так что, например, просто при каждой дозаписи в файл закрывайте его, чтобы при необходимости другая задача (конечный автомат) могла выкачать часть файла в ОЗУ, из которого эзернет будет кушать.
И обязательно прикиньте необходимую скорость для записи - у sd карты есть документированная задержка независящая от класса карты. Чтобы добиться высокой скорости записи приходится применять буферизацию. Тема на этом форуме поднималась часто.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Zelepuk   Измеритель   Jun 28 2012, 20:00
- - _Артём_   Цитата(Zelepuk @ Jun 28 2012, 23:00) Что ...   Jun 28 2012, 20:26
|- - Zelepuk   Цитата(_Артём_ @ Jun 29 2012, 00:26) Отве...   Jun 28 2012, 20:40
|- - _Артём_   Цитата(Zelepuk @ Jun 28 2012, 23:40) Но, ...   Jun 28 2012, 20:59
|- - AlexandrY   Цитата(Zelepuk @ Jun 28 2012, 23:40) план...   Jun 30 2012, 09:26
|- - TigerSHARC   Цитата(AlexandrY @ Jun 30 2012, 13:26) Li...   Jun 30 2012, 13:29
||- - AlexandrY   Цитата(TigerSHARC @ Jun 30 2012, 16:29) Н...   Jun 30 2012, 14:29
||- - TigerSHARC   Цитата(AlexandrY @ Jun 30 2012, 18:29) Фу...   Jun 30 2012, 15:42
||- - sasamy   Цитата(TigerSHARC @ Jun 30 2012, 19:42) Я...   Jun 30 2012, 16:00
||- - AlexandrY   Цитата(TigerSHARC @ Jun 30 2012, 18:42) Я...   Jun 30 2012, 16:48
||- - sasamy   Цитата(AlexandrY @ Jun 30 2012, 20:48) Ка...   Jun 30 2012, 16:56
||- - TigerSHARC   Цитата(sasamy @ Jun 30 2012, 20:56) Посмо...   Jun 30 2012, 19:09
||- - sasamy   Цитата(TigerSHARC @ Jun 30 2012, 23:09) Д...   Jun 30 2012, 19:45
||- - AlexandrY   Цитата(sasamy @ Jun 30 2012, 22:45) Я бол...   Jun 30 2012, 20:35
|- - XVR   Цитата(AlexandrY @ Jun 30 2012, 13:26) Кс...   Jul 1 2012, 15:12
- - MrYuran   Цитата(Zelepuk @ Jun 29 2012, 00:00) прос...   Jun 29 2012, 04:36
- - Zelepuk   А сработает ли суперлуп как я писал выше? Опыта ра...   Jun 29 2012, 09:50
|- - sasamy   Цитата(Zelepuk @ Jun 29 2012, 13:50) Но в...   Jun 29 2012, 16:26
|- - TigerSHARC   Цитата(sasamy @ Jun 29 2012, 20:26) можно...   Jul 31 2012, 18:23
|- - AlexandrY   Цитата(Lotor @ Jul 2 2012, 07:43) Вы чита...   Jul 2 2012, 06:15
|- - Lotor   Цитата(AlexandrY @ Jul 2 2012, 10:15) Что...   Jul 2 2012, 10:26
|- - AlexandrY   Цитата(Lotor @ Jul 2 2012, 13:26) Я об из...   Jul 2 2012, 11:11
|- - Lotor   Цитата(AlexandrY @ Jul 2 2012, 15:11) А з...   Jul 2 2012, 11:29
|- - AlexandrY   Цитата(Lotor @ Jul 2 2012, 14:29) Вы явно...   Jul 2 2012, 13:14
- - Zelepuk   Посмотрел как реализуется событийная (набор конечн...   Jun 30 2012, 17:10
|- - sasamy   Цитата(Zelepuk @ Jun 30 2012, 21:10) прос...   Jun 30 2012, 17:22
- - Aner   Как то с памятью у них бедно, STM32F303VC ...   Jun 30 2012, 21:02
- - Zelepuk   Но Linux для меня как-то роднее и проще. Опишу бол...   Jun 30 2012, 21:17
- - @Ark   Цитата(Zelepuk @ Jun 29 2012, 00:00) Треб...   Jul 2 2012, 09:33


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

 


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


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