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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> FreeRTOS STM32, Никогда не использовал RTOS, расскажите что-как
MiklPolikov
сообщение Jul 19 2013, 21:39
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Всем доброго времени суток.

Никогда раньше не использовал RTOS , и вот думаю начать. Положил глаз на freeRTOS. Работаю с STM32 . Возникли такие вопросы :

1)Как RTOS влияет на производительность и энергопотребления (что одно и то же) .Как я понимаю, для работы RTOS должно постоянно происходить прерывание systic.
Стало быть, появляется как минимум это прерывание с постоянным выполнением какого-то кода какой-то длинны. Для устройств с батарейным питанием где в активном режиме каждые 100мка на
счету это приемлимо ?

2)Как RTOS сочетается со спящими режимами ? Когда процессор максимально заглушен, потребляет 1-2 мка и ждёт прерывания от ноги wakup .

3)Со всеми устройствами процессора RTOS обязывает работать только через свои функции, напрямую к регистрам уже нельзя обращаться ?
Если так, то как быть со всякими тонкостями, которые решаются только на уровне железа ? К примеру, захотелось синхронизировать два таймера с точностью до 1 такта системной частоты.
Если работаешь с регистрами, то можно придумать как это сделать. А после перехода на RTOS подобные "фокусы" будут возможны ?


Заранее благодарю за ответы !


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 19 2013, 22:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



1. В плане экономии электричества в активном режиме работать под RTOS даже удобнее: появляется единая "точка бездействия" (Idle task в случае FreeRTOS), где можно спокойно отправить процессор в WFI. Частоту systick, как и частоту самого процессора, можно динамически менять при необходимости.

2. Замечательно сочетается: неработающему процессору все равно, что на нем не работает - RTOS или что-то еще.

3. Нет у FreeRTOS (как и у большей части мелких ОС) таких функций. Так что "фокусы" никуда не денутся.
Go to the top of the page
 
+Quote Post
x893
сообщение Jul 19 2013, 23:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



К тому же есть режим tickless для совсем малопотребляющих MCU.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jul 20 2013, 04:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(aaarrr @ Jul 20 2013, 02:28) *
3. Нет у FreeRTOS (как и у большей части мелких ОС) таких функций. Так что "фокусы" никуда не денутся.


3) Я просто вижу во всех примерах , что работа происходит не через регистры а через функции системы.
Код
    void vFreeRTOSInitAll()
    {
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        GPIO_StructInit(&port);
        port.GPIO_Mode = GPIO_Mode_Out_PP;
        port.GPIO_Pin = GPIO_Pin_0;
        port.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &port);
    }



4) И вопрос, вытекающий из 3): если операционка переключается между задачами без ведома задачь,
то как быть с настройками тех же портов ? Или это уже моя забота, что бы задачи вывода и приёма по одному и тому же GPIO не запускались одновременно ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jul 20 2013, 06:03
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



3.Приведенный Вами код работы с периферией использует функции стандартной библиотеки от st и к собственно FreeRTOS не относится.
4.
Код
taskENTER_CRITICAL();
{
    // работаем с периферией внутри критической секции
}
taskEXIT_CRITICAL();
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jul 21 2013, 05:53
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Прокомментируйте пожалуйста мои первые шаги freeRTOS STM32L151 Keil

Что я делаю:
Добавил в папку проекта файлы
FreeRTOS\Source\list.c
FreeRTOS\Source\queue.c
FreeRTOS\Source\tasks.c
FreeRTOS\Source\timers.c
FreeRTOS\Source\portable\RVDS\ARM_CM3\port.c
FreeRTOS\Source\portable\MemMang\heap_2.c

FreeRTOS\Source\include\FreeRTOS.h
FreeRTOS\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h
FreeRTOS\Source\include\list.h
FreeRTOS\Source\include\mpu_wrappers.h
FreeRTOS\Source\include\portable.h
FreeRTOS\Source\portable\RVDS\ARM_CM3\portmacro.h
FreeRTOS\Source\include\projdefs.h
FreeRTOS\Source\include\queue.h
FreeRTOS\Source\include\StackMacros.h
FreeRTOS\Source\include\task.h
FreeRTOS\Source\include\timers.h

Файлы *.с добавляю в дерево проекта.
В mail.c пишу
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

Компилируется.

Что меня смущает:
Есть непонятые файлы heap_1.c heap_2.c heap_3.c heap_4.c. Чем рони различаются, и какой нужен мне ?
Файл FreeRTOSConfig.h беру из папки CORTEX_STM32F103_Keil , просто из-за неимения папки с STM32L151


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
PDA
сообщение Jul 21 2013, 07:14
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 16-10-09
Из: msk
Пользователь №: 53 001



Цитата(MiklPolikov @ Jul 21 2013, 09:53) *
Есть непонятые файлы heap_1.c heap_2.c heap_3.c heap_4.c. Чем рони различаются, и какой нужен мне ?

Все зависит от вашей программы и как вы хотите распределять память.

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2013, 08:25
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MiklPolikov @ Jul 21 2013, 07:53) *
Есть непонятые файлы heap_1.c heap_2.c heap_3.c heap_4.c. Чем они различаются, и какой нужен мне ?
А в документацию заглянуть? wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jul 21 2013, 08:35
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(MiklPolikov @ Jul 21 2013, 08:53) *
Прокомментируйте пожалуйста мои первые шаги freeRTOS STM32L151 Keil

Для начала-почитайте документацию. У меня складывается ощущение, что Вы всю информацию пытаетесь получить через форум. Как результат- получается чтение Вам документации вслух окружающими, что не совсем гуд.

Как минимум- прочитайте то что вложено в дистрибутив.
Как оптимум- есть отличные статьи по данному вопросу, обсуждалось например в http://electronix.ru/forum/lofiversion/index.php/t87183.html

Мне очень помог этот цикл статей: http://www.kit-e.ru/articles/micro/2011_5_97.php
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jul 21 2013, 09:45
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(Ruslan1 @ Jul 21 2013, 12:35) *
Для начала-почитайте документацию. У меня складывается ощущение, что Вы всю информацию пытаетесь получить через форум. Как результат- получается чтение Вам документации вслух окружающими, что не совсем гуд.


Вы меня раскусили.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jul 22 2013, 06:10
Сообщение #11


Ally
******

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



Цитата(MiklPolikov @ Jul 20 2013, 00:39) *
1)Как RTOS влияет на производительность и энергопотребления (что одно и то же) .Как я понимаю, для работы RTOS должно постоянно происходить прерывание systic.
Стало быть, появляется как минимум это прерывание с постоянным выполнением какого-то кода какой-то длинны. Для устройств с батарейным питанием где в активном режиме каждые 100мка на
счету это приемлимо ?

2)Как RTOS сочетается со спящими режимами ? Когда процессор максимально заглушен, потребляет 1-2 мка и ждёт прерывания от ноги wakup .

3)Со всеми устройствами процессора RTOS обязывает работать только через свои функции, напрямую к регистрам уже нельзя обращаться ?


Эти все вопросы должны были быть отражены в документации на RTOS. Если во FreeRTOS об этом ничего нет, значит выбрали не ту RTOS или решили неправильно ее применить.
Либо потратите огромное время на переделку RTOS. Что потребует детального изучения исходников всей оси и промежуточного софта к ней. А это работа на добрый год.
Качественные оси для оптимизации подребления предлагают специальное API: http://www.mentor.com/embedded-software/nu...ower-management

А так, конечно, неподходящая RTOS утяжелит ситуацию с низким потреблением.




Go to the top of the page
 
+Quote Post
kan35
сообщение Aug 11 2013, 06:17
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(MiklPolikov @ Jul 20 2013, 08:26) *
3) Я просто вижу во всех примерах , что работа происходит не через регистры а через функции системы.
Код
    void vFreeRTOSInitAll()
    {
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        GPIO_StructInit(&port);
        port.GPIO_Mode = GPIO_Mode_Out_PP;
        port.GPIO_Pin = GPIO_Pin_0;
        port.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &port);
    }



4) И вопрос, вытекающий из 3): если операционка переключается между задачами без ведома задачь,
то как быть с настройками тех же портов ? Или это уже моя забота, что бы задачи вывода и приёма по одному и тому же GPIO не запускались одновременно ?

Кстати, работа с битами портов в STM32 через библиотеку происходит атомарно, блокировать переключение контекста не требуется. Для инициализации - да, требуется блокировать.
Что касается выбора RTOS, то FreeRTOS самая популярная система, есть TCP, много народу использует, будет у кого спросить совет если что. Не требуется вникать в тонкости работы, достаточно инструкции на сайте.
Начинать проще всего так: скачать с сайта дистрибутив и взять за основу проект на вашем контроллере (или самом близком) и писать свою задачу.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Aug 13 2013, 06:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Вопрос :
Как быть , если я изменяю тактовую частоту процессора во время работы программы ? В активном режиме она 4 либо 16 МГц, а перед уходом в глубокий сон
64 КГц. При этом ведь будет меняться квант времени, и все таймеры операционки.
Разная частота во время разных процессов и разных спящих режимов нужна для сокращения энергопотребления.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 13 2013, 12:17
Сообщение #14


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

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



Цитата(MiklPolikov @ Aug 13 2013, 10:38) *
..При этом ведь будет меняться квант времени, и все таймеры операционки....


у фриртоса вроде как всё завязано на SysTick. Его и надо по уму подправлять. В зависмом от камня в коде StdLibrary, есть инициализация системных частот (файлик system_stm32<бла-бла-бла>.c) и переинициализация вроде как там была (SystemCoreClockUpdate). Правильные параметры лучше глянуть запустив понтовый эксел скрипт от ST (STM32<бла-бла-бла>_Clock_Configuration_V<бла-бла-бла>.xls).

Т.е. складывается следующая картина:
подготовились к смене частоты, поменяли частоту, вызвали переинициализацию системных частот из Std, и если потребовалось - заново переинициализировали SysTick. Кстати код инициализации во фриртосе вроде как port.c файлик, у него внутри - ближе к концу надо смотреть вроде как sm.gif
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Nov 20 2013, 17:24
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Начал работать с FreeRTOS , пока всё нравится. Боялся что процессор будет занят переключениями между задачь больше чем самими задачами и за удобства при программировании придётся заплатить увеличением тактовой частоты и потребления. А сейчас, глядишь, с операционкой ещё и время выполнения программы уменьшится !

Провёл такой эксперимент :

Процессор STM32 частота 16Мгц компилятор Keil 4.6
Без операционки цикл while ( 1 ) { LED_ON ; LED_OFF } крутится с частотой 2МГц при 0 оптимизации и 3.2 МГц при максимальной оптимизации.
С операционкой, когда есть две задачи , одна включает светодиод вторая выключает, с форсированным переключением контекста(т.е. задачи не ждут системную частоту а переключаются сразу ) светодиод мигает с частотой 49 КГц при 0 оптимизации и 63 КГц при максимальной оптимизации. Таким образом, на переключение между задачами уходит около 120 тактов процессора, в задачах нет переменных которые нужно было бы сохранять в стеке.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post

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

 


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


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