Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Особенности построения ПО c использованием RTOS
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
Asteo
Доброго времени суток!


По немногу разбираюсь с 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
iosifk
Цитата(Asteo @ May 13 2014, 17:41) *

На сайте журнала КиТ (kit-e.ru) найдите цикл статей Курница...
Прочтите...
А потом задавайте свои вопросы...
Asteo
Спасибо,прочел, специально написал, что часть работы уже сделана.

Вопрос мой связан с организацией лога от разных задач наиболее оптимально, используя RTOS.
И адресован людям, которые что-то подобное делали реально.
iosifk
Цитата(Asteo @ May 13 2014, 18:20) *
Спасибо,прочел, ...

Так напишите письмо с благодарностью к Курницу и его об этом и спросите, он то точно в теме...
Asteo
Цитата(iosifk @ May 13 2014, 17:23) *
Так напишите письмо с благодарностью к Курницу и его об этом и спросите, он то точно в теме...


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

Если вы не желаете помочь,так хотя-бы не мешайте.
или я вас чем-то обидел? Обоснуйте
Jekin
При использовании RTOS первый путь наиболее рациональный, я считаю. Задачи отправляют свои данные в mailbox. Задача-логгер читает mailbox и пишет на флешку.
AlexandrY
Цитата(Asteo @ May 13 2014, 17:20) *
Спасибо,прочел, специально написал, что часть работы уже сделана.

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


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

Я использовал многозадачную файловую систему, и там любая задача могла свободно вести свой лог.
iosifk
Цитата(Asteo @ May 13 2014, 18:35) *
Я понимаю, что повышение собственной важности, посредством издевок над новичками,
является элементом самоутверждения у некоторых индивидуумов.

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

Совсем все мне странно... Где здесь "посредством издевок над новичками"??? Я уж не пишу про "является элементом... и т.д."... Молодой человек, о чем Вы? Мне это уже давно не нужно...
А если по делу, то вот так:
Когда мне пишут читатели, то я всегда отвечаю на их письма. И делаю это довольно давно.
Да, что Вы не читатель журнала КиТ - это мне понятно...
А вот то, что Вы в поисковике не нашли статей Курница - вот это меня сильно удивило... Соответственно я Вам об этом и написал.
И в чем проблема написать хорошему автору и у него спросить совета???
Asteo
Цитата(iosifk @ May 13 2014, 17:50) *
Совсем все мне странно... Где здесь "посредством издевок над новичками"??? Я уж не пишу про "является элементом... и т.д."... Молодой человек, о чем Вы? Мне это уже давно не нужно...
А если по делу, то вот так:
Когда мне пишут читатели, то я всегда отвечаю на их письма. И делаю это довольно давно.
Да, что Вы не читатель журнала КиТ - это мне понятно...
А вот то, что Вы в поисковике не нашли статей Курница - вот это меня сильно удивило... Соответственно я Вам об этом и написал.
И в чем проблема написать хорошему автору и у него спросить совета???


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

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

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

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



Цитата(AlexandrY @ May 13 2014, 17:36) *
Если файловая система однозадачная, то придется дописывать задачу менеджер очередей для файловой системы.

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


Я использую FatFs от Elm Chan'a. Она кстати является каковой? Для меня это вопрос более познавательный, нежели насущный.
Поскольку в своем проекте я планирую использовать один файл суммарного лога.
А логи задач планирую вести без использования файловых систем.
Предварительно создав несколько буферов (FIFO или Кольцевых) во внешней Flash.
Опять-же, если это целесообразно, и нет более изящного способа.
AlexandrY
Цитата(Asteo @ May 13 2014, 18:15) *
Я использую FatFs от Elm Chan'a. Она кстати является каковой?


Хороший вопрос. biggrin.gif
По идее на него вам надо было ответить еще до того как портировать FatFS


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

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

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

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


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

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

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

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

Я использую для логгеров всегда неблокирующие очереди, но не конвейеры. Элементы очередей это указатели на структуры сообщений.
Выделяется ли память структурам динамически или статически зависит от требований к быстродействию. Конвейеры в данном случае менее предсказуемы.
Rst7
Moderator: Господа, а особенно juvf, давайте без флуда и взаимных оскорблений. Пока предупреждаю устно, в следующий раз буду наказывать. Пост juvf скрыл.
Asteo
Цитата(AlexandrY @ May 16 2014, 12:13) *
Что-то конкретно можно обсуждать только зная функциональность всего приложения и ограничения платформы.


В самом начале темы функционал почти описал, а также говорил,что как отладочник использую STM32f103RET6 " от "Terraelectronica
При разработке собственного железа планирую использовать STM32F103VG.
из Flash присмотрел SST26VF064B --- Microchip 2.7V to 3.6V 64 Mbit SPI Serial Flash .
В качестве среды использую Keil

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


Если можно,эту часть объясните по подробнее, или дайте ссылку где почитать "у Курница wink.gif" .
Также заинтересовали многопоточные FS на RAM --- в функционале Keil имеется что-то подобное?
Jekin
AlexandrY, на счет гибкости системы я с Вами согласен. Но функционал обрисова в первом посте топика.
Что касается жесткого реального времени для АЦП. Как правило, в GPS трекерах это не требуется. И дискретизации данных в 1 секунду вполне достаточно.

Цитата(Asteo @ May 17 2014, 06:02) *
Если можно,эту часть объясните по подробнее, или дайте ссылку где почитать "у Курница wink.gif" .
Также заинтересовали многопоточные FS на RAM --- в функционале Keil имеется что-то подобное?

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

RAM диск в Keil FlashFS также поддерживается
Asteo
Jekin, Спасибо! Почитаю про RL-FlashFS. Ранее с ней не сталкивался.
kolobok0
Цитата(AlexandrY @ May 16 2014, 13:13) *
...Поэтому автономных асинхронных друг к другу логгеров должно быть много. ...


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

========

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

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

Asteo
Вот здесь http://www.keil.com/support/man/docs/rlarm..._usingmcard.htm есть алгоритм настройки RL-FlashFS ,
но с использованием Configuration Wizard

Каким образом ее правильно настраивать и подключать к проекту без использования каких-либо "визардов"?
Или может вынести обсуждение в отдельную тему?
Jekin
Цитата(Asteo @ May 17 2014, 08:39) *
Каким образом ее правильно настраивать и подключать к проекту без использования каких-либо "визардов"?
Или может вынести обсуждение в отдельную тему?

Настройка заключается в редактировании файла File_Config.c
Это делать можно и в ручную, но лучше использовать визард, чтобы корректно настройку произвести. Там снизу Вы можете видеть две закладочки: "text editor" и "configuration wizard"




А Вы какую версию Keil MDK используете? Просто в новой версии (5.x) принцип подключения библиотек немного поменялся.
Asteo
Раньше использовал 4.73, сейчас перешел на 5.10.xx
Jekin
В новой версии Middleware подключается через "Manage Run-Time Environment":

http://www.keil.com/support/man/docs/uv4/u..._rtemanager.htm

Там же можно выбрать и другие необходимые драйвера.

Кстати, вот пример для демо-платы MCBSTM32E - использование FlashFS, с картой SD в том числе.
Asteo
Создал тему про Keil RL File System отдельно , дабы не было "Всего и сразу".
Asteo
Цитата(kolobok0 @ May 17 2014, 11:03) *
сам обычно использую асинхронный, быстрый интерфейс к формированию единого потока данных, далее можно более медленно
запись в файл.

можете более подробно объяснить основные принципы "формирования единого потока данных" , собственно то, над чем я "туплю" sm.gif

про "ini" файлик тоже объясните, если не сложно.

AlexandrY
Цитата(Jekin @ May 17 2014, 10:38) *
AlexandrY, на счет гибкости системы я с Вами согласен. Но функционал обрисова в первом посте топика.
Что касается жесткого реального времени для АЦП. Как правило, в GPS трекерах это не требуется. И дискретизации данных в 1 секунду вполне достаточно.


Функционал это что должен дивайс делать, а не какая периферия у микроконтроллера.

Т.е. какие датчики в каких задачах управления задействованы.
Например акселерометр для идентификации вибраций, или для инерциальной навигации.
Или датчики тока-напряжения для управления рулями или двигателями.
Или датчики для управления зарядником.
Или микрофоны для записи звуков и т.д.

Вот такое описание функционала и даст только представление о критичности задач и соответственно о свойствах логеров.
Кстати все что перечислил требует жесткого реального времени.

Например в моем дивайсе активируются сразу больше десятка независимых логов:
-системный (следит за порядком включения-выключения задач и другими общими событиями)
-лог протокола PPP
-лог событий для отправляемых на сервер
-лог GSM протокола
-лог GPS протокола
-лог GPRS сессий
-лог зарядника
-лог поступающих сообщений по SMS
-лог TCP/IP протокола
-лог HTTP протокола и облачных сервисов
-логи сырых данных всех UART-ов
Все логи идут в свои файлы с метками времени с точностью до 1 мкс.

А вот для быстрой периферии типа АЦП или I/O сопроцессора реализуются еще синхронные логи.
Синхронные логи могут быть очень большими, до гигабайт.
Никакой Excel и даже Matlab их загрузить не может. Пишутся специальные утилиты обработчики таких файлов.
Синхронные логи специфичны для каждого применения поэтому конфигурируются, но ini файлы для этого слишком примитивны.
Конфигурирование выполняется JSON файлами. Конфигурируется частота дискретизации, какие сигналы будут записываться, тип данных, параметры фильтрации, конвертирующие функции.
Для синхронных логов нужна большая динамическая память для буферизации.

kolobok0
Цитата(Asteo @ May 19 2014, 11:29) *
...основные принципы "формирования единого потока данных"...про "ini" файлик тоже..


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

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

в момент подъёма софта, после подготовки флэши к работе, вы можете считать(или сформировать если нет) ini файл вашего устройства. тем самым упрощается
первый старт девайса. т.е. достаточно вставить в большого брата флэш, прописать ini файл (ну или запустить с пустой - девайс сам его создаст по умолчанию) -
параметры сети, необходимость писать логи, имя вэб сервера, IP адрес, необходимость запуска WiFi и т.д. и т.п. (формат ini файла прост: секция, имя поля=данные).
вставляее в свой девайс, он считывает первоначальные установки, по дате-времени файла принимает решение - это новые установки или он уже их считывал.
считывает если нужно, сохраняет в свою внутреннюю флэш(к примеру). всё. девайс готов к работе. актуально при запуске девайса при отсутствии органов
ввода-вывода инфы. например общающегося через WiFi.
Asteo
Доброго времени суток! В свободное время продолжаю работу над проектом.
По советам выше формирую единый поток данных, далее с помощью задачи принимающей очередь смотрю что за инфа и пишу в тот или иной файл.
Дошел до организации архитектуры приема-передачи.

Вопрос: каким образом организовывается передача данных в логгерах/трекерах с использованием RTOS???
расскажите в общих чертах про логику работы задачи(задач), отвечающей за передачу. Что она(они) должна уметь, что учитывать и тд.
Или ткните пальцем, где все это дело можно почитать.
MiklPolikov
Цитата(Jekin @ May 17 2014, 07:28) *
В состав Keil MDK Pro входит многопоточная файловая система Keil FlashFS.
RAM диск в Keil FlashFS также поддерживается


Ух ты, и я не знал! Jekin огромное спасибо !
Пока не знал о FlashFS, успешно прикрутил к FreeRTOS файловую систему FatFS , два независимых потока для работы с двумя SD картами. Правда с извращениями, в момент создания файла может работать только один поток.
Судя по описанию, FlashFS на много мощнее. Такие вещи как функция дефрагментации диска мне с FlashFS и не снилась.
Кто использовал, скажите, эта FlashFS хорошая, безглючная и легко и с ней всё легко работать ? Или есть подводные камни ?
О FatFS я могу сказать только хорошее : всё просто, глюков не видил.
grv
Коллеги, поскажите.
Есть вполне увесистый проект на stm32f207 + FREERTOS + Keil к которому нужно прикрутить SD-карту для чтения файлов конфигураций/ записи логов, т.е. особых требований к производительности нет. Единственное логи должны писаться с нескольких задач. Вопросы:

1.какую FS выбрать ?
-FatFS (есть опыт работы в суперлупе)
- Keil RL-FlashFS
- Super Lean FAT File System (есть на сайте FREERTOS)
- другое

2.соит ли заморачиваться с подключением по SDIO, либо оставить все на SPI ?

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.