|
FreeRTOS STM32, Никогда не использовал RTOS, расскажите что-как |
|
|
|
Jul 19 2013, 21:39
|

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

|
Всем доброго времени суток.
Никогда раньше не использовал RTOS , и вот думаю начать. Положил глаз на freeRTOS. Работаю с STM32 . Возникли такие вопросы :
1)Как RTOS влияет на производительность и энергопотребления (что одно и то же) .Как я понимаю, для работы RTOS должно постоянно происходить прерывание systic. Стало быть, появляется как минимум это прерывание с постоянным выполнением какого-то кода какой-то длинны. Для устройств с батарейным питанием где в активном режиме каждые 100мка на счету это приемлимо ?
2)Как RTOS сочетается со спящими режимами ? Когда процессор максимально заглушен, потребляет 1-2 мка и ждёт прерывания от ноги wakup .
3)Со всеми устройствами процессора RTOS обязывает работать только через свои функции, напрямую к регистрам уже нельзя обращаться ? Если так, то как быть со всякими тонкостями, которые решаются только на уровне железа ? К примеру, захотелось синхронизировать два таймера с точностью до 1 такта системной частоты. Если работаешь с регистрами, то можно придумать как это сделать. А после перехода на RTOS подобные "фокусы" будут возможны ?
Заранее благодарю за ответы !
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Jul 20 2013, 04:26
|

Гуру
     
Группа: Свой
Сообщений: 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 не запускались одновременно ?
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Jul 21 2013, 07:14
|

Участник

Группа: Участник
Сообщений: 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. Чем рони различаются, и какой нужен мне ? Все зависит от вашей программы и как вы хотите распределять память.
|
|
|
|
|
Jul 21 2013, 08:35
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 22 2013, 06:10
|

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 утяжелит ситуацию с низким потреблением.
|
|
|
|
|
Aug 11 2013, 06:17
|
Знающий
   
Группа: Участник
Сообщений: 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, много народу использует, будет у кого спросить совет если что. Не требуется вникать в тонкости работы, достаточно инструкции на сайте. Начинать проще всего так: скачать с сайта дистрибутив и взять за основу проект на вашем контроллере (или самом близком) и писать свою задачу.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|