Jump to content

    

Особенности построения ПО 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:

Share this post


Link to post
Share on other sites

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

Прочтите...

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

 

Share this post


Link to post
Share on other sites

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

 

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

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

Edited by Asteo

Share this post


Link to post
Share on other sites
Спасибо,прочел, ...

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

 

Share this post


Link to post
Share on other sites
Так напишите письмо с благодарностью к Курницу и его об этом и спросите, он то точно в теме...

 

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

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

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

 

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

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

Edited by Asteo

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Спасибо,прочел, специально написал, что часть работы уже сделана.

 

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

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

 

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

 

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

 

Share this post


Link to post
Share on other sites
Я понимаю, что повышение собственной важности, посредством издевок над новичками,

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

 

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

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

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

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

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

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

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

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

 

Share this post


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

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

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

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

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

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

 

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

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

 

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

 

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

 

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

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

 

 

 

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

 

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

 

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

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

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

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

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

Edited by Asteo

Share this post


Link to post
Share on other sites
Я использую FatFs от Elm Chan'a. Она кстати является каковой?

 

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

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

 

 

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

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

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

 

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

 

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

Share this post


Link to post
Share on other sites
Кольцевые буферы во FLASH это скорее всего будет изобретение велосипеда.

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

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

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

Share this post


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

 

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

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

 

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

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

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

 

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

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

 

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

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

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

 

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

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

 

Share this post


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

Share this post


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

 

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

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

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

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

 

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

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

 

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

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

Edited by Asteo

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

 

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

Edited by Jekin

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this