Перейти к содержанию
    

Особенности построения ПО c использованием RTOS

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


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

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

В учебных целях (а в случае успеха и "сугубо индивидуальных меркантильных планах автора " ;) ) было решено разработать проект 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сайте журнала КиТ (kit-e.ru) найдите цикл статей Курница...

Прочтите...

А потом задавайте свои вопросы...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо,прочел, специально написал, что часть работы уже сделана.

 

Вопрос мой связан с организацией лога от разных задач наиболее оптимально, используя RTOS.

И адресован людям, которые что-то подобное делали реально.

Изменено пользователем Asteo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо,прочел, ...

Так напишите письмо с благодарностью к Курницу и его об этом и спросите, он то точно в теме...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так напишите письмо с благодарностью к Курницу и его об этом и спросите, он то точно в теме...

 

Послушайте, уважаемый.

Я понимаю, что повышение собственной важности, посредством издевок над новичками,

является элементом самоутверждения у некоторых индивидуумов.

 

Если вы не желаете помочь,так хотя-бы не мешайте.

или я вас чем-то обидел? Обоснуйте

Изменено пользователем Asteo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При использовании RTOS первый путь наиболее рациональный, я считаю. Задачи отправляют свои данные в mailbox. Задача-логгер читает mailbox и пишет на флешку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо,прочел, специально написал, что часть работы уже сделана.

 

Вопрос мой связан с организацией лога от разных задач наиболее оптимально, используя RTOS.

И адресован людям, которые что-то подобное делали реально.

 

Если файловая система однозадачная, то придется дописывать задачу менеджер очередей для файловой системы.

 

Я использовал многозадачную файловую систему, и там любая задача могла свободно вести свой лог.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я понимаю, что повышение собственной важности, посредством издевок над новичками,

является элементом самоутверждения у некоторых индивидуумов.

 

Если вы не желаете помочь,так хотя-бы не мешайте.

или я вас чем-то обидел? Обоснуйте

Совсем все мне странно... Где здесь "посредством издевок над новичками"??? Я уж не пишу про "является элементом... и т.д."... Молодой человек, о чем Вы? Мне это уже давно не нужно...

А если по делу, то вот так:

Когда мне пишут читатели, то я всегда отвечаю на их письма. И делаю это довольно давно.

Да, что Вы не читатель журнала КиТ - это мне понятно...

А вот то, что Вы в поисковике не нашли статей Курница - вот это меня сильно удивило... Соответственно я Вам об этом и написал.

И в чем проблема написать хорошему автору и у него спросить совета???

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Совсем все мне странно... Где здесь "посредством издевок над новичками"??? Я уж не пишу про "является элементом... и т.д."... Молодой человек, о чем Вы? Мне это уже давно не нужно...

А если по делу, то вот так:

Когда мне пишут читатели, то я всегда отвечаю на их письма. И делаю это довольно давно.

Да, что Вы не читатель журнала КиТ - это мне понятно...

А вот то, что Вы в поисковике не нашли статей Курница - вот это меня сильно удивило... Соответственно я Вам об этом и написал.

И в чем проблема написать хорошему автору и у него спросить совета???

 

Статьи я прочел в первую очередь. Потом взялся за практику.

На ваш совет почитать их, поблагодарил.

 

Дошел до определенного момента, задал вопрос сообществу.

 

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

 

Если у вас не было глупых намерений, извините ради Бога. Мне ваша манера показалась "поверхностной".

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

 

 

 

Если файловая система однозадачная, то придется дописывать задачу менеджер очередей для файловой системы.

 

Я использовал многозадачную файловую систему, и там любая задача могла свободно вести свой лог.

 

Я использую FatFs от Elm Chan'a. Она кстати является каковой? Для меня это вопрос более познавательный, нежели насущный.

Поскольку в своем проекте я планирую использовать один файл суммарного лога.

А логи задач планирую вести без использования файловых систем.

Предварительно создав несколько буферов (FIFO или Кольцевых) во внешней Flash.

Опять-же, если это целесообразно, и нет более изящного способа.

Изменено пользователем Asteo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я использую FatFs от Elm Chan'a. Она кстати является каковой?

 

Хороший вопрос. :biggrin:

По идее на него вам надо было ответить еще до того как портировать FatFS

 

 

Кольцевые буферы во FLASH это скорее всего будет изобретение велосипеда.

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

В результате будет непредсказуемое взаимовлияние одних задач на другие.

 

В этом плане удобны многопоточные FS на RAM.

 

Кстати в MQX уже есть файловая система для Flash/NAND. Они гораздо более детерминированы в плане времени операций чем FS на SD картах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кольцевые буферы во FLASH это скорее всего будет изобретение велосипеда.

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

В результате будет непредсказуемое взаимовлияние одних задач на другие.

Asteo же планирует использовать один файл лога для всех задач. Может все же тогда проще писать во флеш из одной задачи-логгера, как я писал выше?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Asteo же планирует использовать один файл лога для всех задач. Может все же тогда проще писать во флеш из одной задачи-логгера, как я писал выше?

 

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

А так в общем я отдаю предпочтение не "проще", а "гибче".

 

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

Вопрос "проще" тут бесполезен ибо конфликтует с целью.

А вот гибкость однозначно облегчит будущее наращивание функциональности.

 

Поэтому автономных асинхронных друг к другу логгеров должно быть много.

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

 

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

Реально быстрый синхронный лог возможен только в процедуре ISR

И тут получается различная реализация разных типов логеров.

 

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

Выделяется ли память структурам динамически или статически зависит от требований к быстродействию. Конвейеры в данном случае менее предсказуемы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Moderator: Господа, а особенно juvf, давайте без флуда и взаимных оскорблений. Пока предупреждаю устно, в следующий раз буду наказывать. Пост juvf скрыл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В самом начале темы функционал почти описал, а также говорил,что как отладочник использую STM32f103RET6 " от "Terraelectronica

При разработке собственного железа планирую использовать STM32F103VG.

из Flash присмотрел SST26VF064B --- Microchip 2.7V to 3.6V 64 Mbit SPI Serial Flash .

В качестве среды использую Keil

 

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

Выделяется ли память структурам динамически или статически зависит от требований к быстродействию. Конвейеры в данном случае менее предсказуемы.

 

Если можно,эту часть объясните по подробнее, или дайте ссылку где почитать "у Курница ;)" .

Также заинтересовали многопоточные FS на RAM --- в функционале Keil имеется что-то подобное?

Изменено пользователем Asteo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AlexandrY, на счет гибкости системы я с Вами согласен. Но функционал обрисова в первом посте топика.

Что касается жесткого реального времени для АЦП. Как правило, в GPS трекерах это не требуется. И дискретизации данных в 1 секунду вполне достаточно.

 

Если можно,эту часть объясните по подробнее, или дайте ссылку где почитать "у Курница ;)" .

Также заинтересовали многопоточные FS на RAM --- в функционале Keil имеется что-то подобное?

В состав Keil MDK Pro входит многопоточная файловая система Keil FlashFS.

 

RAM диск в Keil FlashFS также поддерживается

Изменено пользователем Jekin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...