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

 
 
> 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
 
Start new topic
Ответов
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
MiklPolikov
сообщение Jul 20 2013, 04:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
kan35
сообщение Aug 11 2013, 06:17
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #6


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

Группа: Участник
Сообщений: 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
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- MiklPolikov   FreeRTOS STM32   Jul 19 2013, 21:39
|- - kolobok0   Цитата(MiklPolikov @ Nov 20 2013, 21:24) ...   Nov 21 2013, 00:26
- - x893   К тому же есть режим tickless для совсем малопотре...   Jul 19 2013, 23:06
- - _Pasha   3.Приведенный Вами код работы с периферией использ...   Jul 20 2013, 06:03
|- - MiklPolikov   Прокомментируйте пожалуйста мои первые шаги freeR...   Jul 21 2013, 05:53
|- - PDA   Цитата(MiklPolikov @ Jul 21 2013, 09:53) ...   Jul 21 2013, 07:14
|- - Сергей Борщ   QUOTE (MiklPolikov @ Jul 21 2013, 07:53) ...   Jul 21 2013, 08:25
|- - Ruslan1   Цитата(MiklPolikov @ Jul 21 2013, 08:53) ...   Jul 21 2013, 08:35
|- - MiklPolikov   Цитата(Ruslan1 @ Jul 21 2013, 12:35) Для ...   Jul 21 2013, 09:45
- - AlexandrY   Цитата(MiklPolikov @ Jul 20 2013, 00:39) ...   Jul 22 2013, 06:10


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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 04:55
Рейтинг@Mail.ru


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