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

 
 
> Особенности построения ПО c использованием RTOS, Взаимодействия между отдельными задачами, событиями ???
Asteo
сообщение May 13 2014, 13:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 7-04-14
Пользователь №: 81 265



Доброго времени суток!


По немногу разбираюсь с freeRTOS. До этого использовал архитектуру: "Суперцикл+прерывания".

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

В учебных целях (а в случае успеха и "сугубо индивидуальных меркантильных планах автора " wink.gif ) было решено разработать проект GPS трекера для автомобиля.

В кратце:

Планируется использовать несколько цифровых и аналоговых GPIO.
Повесить датчики на стандартные интерфейсы(I2С,SPI,UART,1-Wire).
Использовать несколько каналов АЦП и т.д.
Для ведения "event log" планирую какую нибудь внутреннюю память (FSMC или SPI Serial Flash -- еще не определился),
а также microSD-card.
С помощью GSM модуля данные будут передаваться на сервер.
В качестве отладочных стендов использую STM32f103RET6 от "Terraelectronica", SIM68v и sim900 от SimCom.

Идею обрисовал , теперь ближе к делу.

Поставил RTOS, прикрутил задачу взаимодействия с GPS , установил FatFs от Чана (SDIO) , пишу лог NMEA сообщений на microSD.
Но это сейчас все в одной задаче. Чтобы было видно, что RTOS не завис, параллельная задача мигает диодом .

Дальше необходимо организовать сбор данных с других ресурсов --- GPIO,АЦП, I2C .
И вот тут у меня как у начинающего и возник вопрос ---Как с помощью freeRTOS наиболее рационально и целесообразно осуществить сбор данных с разных ресурсов микроконтроллера и осуществить их запись по протоколу в память?(Передачу по GSM пока не трогаем, хотя и подразумеваем что она будет осуществляться в дальнейшем.)

А хочу я от вас я хочу ответы по типу:


1) Высокоприоритетные задачи обработки периферии с использованием соответствующих прерываний собирают данные. Используя механизмы семафоров и очередей передают их низкоприоритетной задаче, которая собрав все необходимые данные пишет их на SD карту.

2)Высокоприоритетные задачи обрабатывают данные и каждая пишет свой собственный лог в буффер во flash памяти(возможно даже дублирует). Низкоприоритетная задача читает все эти логи и пишет на SD card.

3) Ваш способ + обоснование "Почему так". biggrin.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jekin
сообщение May 16 2014, 08:35
Сообщение #2


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

Группа: Свой
Сообщений: 91
Регистрация: 9-09-07
Из: Минск
Пользователь №: 30 406



Цитата(AlexandrY @ May 15 2014, 22:09) *
Кольцевые буферы во FLASH это скорее всего будет изобретение велосипеда.
Придется все равно решать проблему одновременного доступа нескольких задач к FLASH, получить при этом проблемы с неопределенностью времени доступа.
В результате будет непредсказуемое взаимовлияние одних задач на другие.

Asteo же планирует использовать один файл лога для всех задач. Может все же тогда проще писать во флеш из одной задачи-логгера, как я писал выше?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 16 2014, 09:13
Сообщение #3


Ally
******

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



Цитата(Jekin @ May 16 2014, 11:35) *
Asteo же планирует использовать один файл лога для всех задач. Может все же тогда проще писать во флеш из одной задачи-логгера, как я писал выше?


Что-то конкретно можно обсуждать только зная функциональность всего приложения и ограничения платформы.
А так в общем я отдаю предпочтение не "проще", а "гибче".

RTOS ведь выбирают когда хотят нагрузить побольше функциональности.
Вопрос "проще" тут бесполезен ибо конфликтует с целью.
А вот гибкость однозначно облегчит будущее наращивание функциональности.

Поэтому автономных асинхронных друг к другу логгеров должно быть много.
Отключается модуль (скажем Wi-Fi вместо GPRS) и автоматически перестает работать его логгер.

Потом для периферии типа АЦП нужен синхронный логгер с жестким реальным временем, а логгер GSM можно сделать и асинхронным.
Реально быстрый синхронный лог возможен только в процедуре ISR
И тут получается различная реализация разных типов логеров.

Я использую для логгеров всегда неблокирующие очереди, но не конвейеры. Элементы очередей это указатели на структуры сообщений.
Выделяется ли память структурам динамически или статически зависит от требований к быстродействию. Конвейеры в данном случае менее предсказуемы.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение May 17 2014, 03:53
Сообщение #4


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(AlexandrY @ May 16 2014, 13:13) *
...Поэтому автономных асинхронных друг к другу логгеров должно быть много. ...


цена таких логгеров? Просто типа закачать потом в эксель и красиво выдать кривую? Потому как для анализа глазками
шарахаться между файлами по временным срезам - вряд-ли удобное решение...Если из множество кэшей писателей захотите свести
к одному выводу в файл - то там ышо круче рассинхронизация начнёт наблюдаться... На любителя или медлунных систем типа хэйлохты мир
- имхо...

========

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

рулится всё это из интерфейса и с самой флэшки, типа ай-най файлика...

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Asteo   Особенности построения ПО c использованием RTOS   May 13 2014, 13:41
- - iosifk   Цитата(Asteo @ May 13 2014, 17:41) На са...   May 13 2014, 14:03
- - Asteo   Спасибо,прочел, специально написал, что часть рабо...   May 13 2014, 14:20
|- - iosifk   Цитата(Asteo @ May 13 2014, 18:20) Спасиб...   May 13 2014, 14:23
||- - Asteo   Цитата(iosifk @ May 13 2014, 17:23) Так н...   May 13 2014, 14:35
||- - iosifk   Цитата(Asteo @ May 13 2014, 18:35) Я пони...   May 13 2014, 14:50
||- - Asteo   Цитата(iosifk @ May 13 2014, 17:50) Совсе...   May 13 2014, 15:15
||- - AlexandrY   Цитата(Asteo @ May 13 2014, 18:15) Я испо...   May 15 2014, 19:09
|- - AlexandrY   Цитата(Asteo @ May 13 2014, 17:20) Спасиб...   May 13 2014, 14:36
- - Jekin   При использовании RTOS первый путь наиболее рацион...   May 13 2014, 14:36
|- - Asteo   Цитата(AlexandrY @ May 16 2014, 12:13) Чт...   May 17 2014, 03:02
- - Rst7   Moderator: Господа, а особенно juvf, давайте без ...   May 17 2014, 02:06
- - Jekin   AlexandrY, на счет гибкости системы я с Вами согла...   May 17 2014, 03:28
|- - Asteo   Jekin, Спасибо! Почитаю про RL-FlashFS. Ранее ...   May 17 2014, 03:49
|- - AlexandrY   Цитата(Jekin @ May 17 2014, 10:38) Alexan...   May 19 2014, 04:02
|- - MiklPolikov   Цитата(Jekin @ May 17 2014, 07:28) В сост...   Jul 17 2014, 09:50
- - Asteo   Вот здесь http://www.keil.com/support/man/docs/rla...   May 17 2014, 05:39
|- - Jekin   Цитата(Asteo @ May 17 2014, 08:39) Каким ...   May 17 2014, 05:51
- - Asteo   Раньше использовал 4.73, сейчас перешел на 5.10.xx   May 17 2014, 06:00
|- - Jekin   В новой версии Middleware подключается через ...   May 17 2014, 06:09
- - Asteo   Создал тему про Keil RL File System отдельно , даб...   May 17 2014, 06:52
- - Asteo   Цитата(kolobok0 @ May 17 2014, 11:03) сам...   May 19 2014, 03:19
|- - kolobok0   Цитата(Asteo @ May 19 2014, 11:29) ...осн...   May 19 2014, 13:18
- - Asteo   Доброго времени суток! В свободное время прод...   Jul 14 2014, 10:37
- - grv   Коллеги, поскажите. Есть вполне увесистый проект н...   Oct 4 2015, 12:20


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:33
Рейтинг@Mail.ru


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