Easyelectronics.ru

Электроника для всех
Текущее время: 22 окт 2018, 21:45

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 26 янв 2017, 11:42 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 613
Начал работать с FREERTOS и вот возникли некоторые вопросы
1)если я хочу использовать динамическое распределение памяти то freetros-ом будут заменнены ф-ции calloc, malloc, free и т.д. (естественно при использовании heap_1.c, heap_2, heap_4 )
2)и вопрос на скорость реакции той самой ОС. Есть такой дефайн в FREERTOSconfig.h configTICK_RATE_HZ и равен он 1000. Можно ль его, без катастрофических последствий, изменить на большее число чем 1000? Потому как если пытаться это сделать в mxCUBE то он грозится тем что мол получите деление на ноль..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 26 янв 2017, 16:02 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2689
1. Начиная с 9 версии разрабы добавили много функций постфиксом static, которые не используют кучу. Не знаю можно ли обойтись вообще без кучи. Про выбор heap_x можете почитать, хотя там все довольно просто. У себя, в проектах где есть динамическое выделение памяти с разным размером (задачи, очереди, просто выделение памяти pvPortMalloc()) использую heap_4, в других, где задачи не удаляются, создается всё лишь раз при старте использую heap_2.
2. Это лишь квант времени ОС, квант работы диспетчера и других сервисных задач. Аппаратные прерывания по прежнему реагируют также, да и диспетчер можно принудительно вызвать командами taskYIELD(). Задрать частоту можно, но надо понимать чем это грозит. Для начала можно почитать Курница, по сути перевод официальной доки FreeRTOSa.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 26 янв 2017, 23:06 
Старожил

Зарегистрирован: 11 фев 2013, 01:54
Сообщения: 344
kos писал(а):
2)и вопрос на скорость реакции той самой ОС. Есть такой дефайн в FREERTOSconfig.h configTICK_RATE_HZ и равен он 1000. Можно ль его, без катастрофических последствий, изменить на большее число чем 1000? Потому как если пытаться это сделать в mxCUBE то он грозится тем что мол получите деление на ноль..


А зачем нужно большее число?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 27 янв 2017, 10:40 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 613
Tester500 писал(а):
kos писал(а):
2)и вопрос на скорость реакции той самой ОС. Есть такой дефайн в FREERTOSconfig.h configTICK_RATE_HZ и равен он 1000. Можно ль его, без катастрофических последствий, изменить на большее число чем 1000? Потому как если пытаться это сделать в mxCUBE то он грозится тем что мол получите деление на ноль..


А зачем нужно большее число?


По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 27 янв 2017, 10:44 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
kos писал(а):
Tester500 писал(а):
kos писал(а):
2)и вопрос на скорость реакции той самой ОС. Есть такой дефайн в FREERTOSconfig.h configTICK_RATE_HZ и равен он 1000. Можно ль его, без катастрофических последствий, изменить на большее число чем 1000? Потому как если пытаться это сделать в mxCUBE то он грозится тем что мол получите деление на ноль..


А зачем нужно большее число?


По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .

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

С определенного значения, процессор просто остается жить в этом обработчике прерывания SysTick, не давая основному потоку (НЕ прерываниям) работать, и соответственно, все перестает работать вообще. Так что - наслаждаться увеличением этого числа надо с осторожностью.

_________________
Мои поделки
http://www.fun-electronic.net/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 27 янв 2017, 11:01 
Старожил

Зарегистрирован: 11 фев 2013, 01:54
Сообщения: 344
kos писал(а):

По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .


А зачем нужен более короткий тик?
Для какой задачи?
Намек - если задача выполняется за время меньшее чем отводит один тик, то управление будет предано следующей задаче. Если задач всего две, то управление каждой задаче будет передаваться чаще, чем 1/1000 сек (ну и зависит от самой задачи).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 27 янв 2017, 12:07 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 613
Tester500 писал(а):
kos писал(а):

По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .


А зачем нужен более короткий тик?
Для какой задачи?
Намек - если задача выполняется за время меньшее чем отводит один тик, то управление будет предано следующей задаче. Если задач всего две, то управление каждой задаче будет передаваться чаще, чем 1/1000 сек (ну и зависит от самой задачи).


Пока что это скорее как теоретические изыскания. Знание возможностей и невозможностей всегда дает бонусы.
А за идею спасибо! Действительно не подумал о том что отдача управления сразу приведет к виртуальному увеличению частоты. Но вполне реальному возрастанию скорости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 27 янв 2017, 12:09 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 613
MasterAlexei писал(а):

По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .
По идее - да.
И как следствие - быстрее переключение задач, но и меньшее время на непрерывное выполнение задачи.

С определенного значения, процессор просто остается жить в этом обработчике прерывания SysTick, не давая основному потоку (НЕ прерываниям) работать, и соответственно, все перестает работать вообще. Так что - наслаждаться увеличением этого числа надо с осторожностью.



Да накладные расходы возрастают.. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 18 фев 2017, 02:31 
Заглядывает иногда

Зарегистрирован: 16 фев 2017, 17:48
Сообщения: 38
Tester500 писал(а):
kos писал(а):

По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .


А зачем нужен более короткий тик?
Для какой задачи?
Намек - если задача выполняется за время меньшее чем отводит один тик, то управление будет предано следующей задаче. Если задач всего две, то управление каждой задаче будет передаваться чаще, чем 1/1000 сек (ну и зависит от самой задачи).


Ну получается быстрее будет время реакции на событие. Если у вас в таске опрашивается флаг, то время реакции по умолчанию 1 мс, надо быстрее - ставишь время тика меньше. Как вариант, но тут есть свои недостатки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 20 фев 2017, 15:14 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 613
_SayHello писал(а):
Tester500 писал(а):
kos писал(а):

По сути это частота тика ОС. Чем больше число тем короче тик. Я так себе эту ситуацию понимаю .


А зачем нужен более короткий тик?
Для какой задачи?
Намек - если задача выполняется за время меньшее чем отводит один тик, то управление будет предано следующей задаче. Если задач всего две, то управление каждой задаче будет передаваться чаще, чем 1/1000 сек (ну и зависит от самой задачи).


Ну получается быстрее будет время реакции на событие. Если у вас в таске опрашивается флаг, то время реакции по умолчанию 1 мс, надо быстрее - ставишь время тика меньше. Как вариант, но тут есть свои недостатки.


Вообще как справедливо было замечено то при правильной организации программы все получается довольно красиво и время пререключения меж задачами может быть меньше чем 1мс. А из прирывания вообще можно улететь сразу туда куда надо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 01 мар 2017, 19:03 
Старожил

Зарегистрирован: 26 янв 2010, 21:47
Сообщения: 325
_SayHello писал(а):
Если у вас в таске опрашивается флаг

В РТОСе опрашивать флаги - нонсес. Если нужно отработать по событию, нужно юзать семафоры, событие произошло (прерывание), семафор отдался, запустилась задача по обработке. Всё, и никаких флагов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 16 апр 2018, 11:10 
Только пришел

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 21
Коллеги!

Поясните, пожалуйста, что за что отвечает, а то что-то я запутался:

1) файл startup_stm32f10x_md.s, дефайн Heap_Size;
2) файл FreeRTOSConfig.h, дефайн configTOTAL_HEAP_SIZE.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 16 апр 2018, 17:29 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2385
1) Вероятно, имелся ввиду не ассемблерный стартап-файл, а файл загрузчика и его секция
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x80; /* required amount of stack */

Её назначение ясно из названия в заголовке секции.

2) А вот это - и есть основной управлятель размером кучи в РТОС-е.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 16 апр 2018, 22:59 
Только пришел

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 21
BusMaster писал(а):
1) Вероятно, имелся ввиду не ассемблерный стартап-файл, а файл загрузчика и его секция
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x80; /* required amount of stack */

Её назначение ясно из названия в заголовке секции.

2) А вот это - и есть основной управлятель размером кучи в РТОС-е.


Имелся в виду именно ассемблерный стартап файл.
Я правильно понимаю, что malloc/free, а так же new/delete, пользуют Heap_Size из ассемблерного стартапа, а FreeRTOS использует свою кучу? Хм, есть смысл ли использовать только одну, общую кучу? И как сие реализовать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 17 апр 2018, 06:09 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2385
Работая с РТОС вообще лучше не использовать стандартный malloc, а память выделять в рамках создаваемых задач или очередей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 17 апр 2018, 12:24 
Только пришел

Зарегистрирован: 08 июл 2013, 17:00
Сообщения: 21
BusMaster писал(а):
Работая с РТОС вообще лучше не использовать стандартный malloc, а память выделять в рамках создаваемых задач или очередей


То есть, играя по правилам RTOS, нужно переопределить "плюсОвые" new/delete на pvPortMalloc/vPortFree из состава FreeRTOS?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 17 апр 2018, 15:04 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 61
Откуда: Омск
Верно. Хотя, если очень часто выделять/освобождать память в процессе работы - это может негативно сказаться на производительности. Лучше бы иметь свою обёртку функций, которая для мелких объектов будет выделять блок памяти и выдавать по чуть-чуть программе. Накладные расходы для FreeRTOS довольно большие. У меня выходило выделение 1 байта памяти фактически уменьшало свободную память где-то на 20 байт, возможно больше. Проверял давно и постарался в итоге максимально уменьшить количество динамической памяти, используя статические массивы где это только можно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Несколько вопросов по freertos по работе с кучей и не только
СообщениеДобавлено: 17 апр 2018, 15:45 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2385
Ну как бы да. Либо отделить кучу РТОСа от пользовательской кучи. Имею ввиду положение куч в адресном пространстве. Поскольку механизмы выделения памяти - разные, заголовки у выделяемых областей - разные, и друг с другом они не поделят общее пространство, не смогут прочитать заголовки и будут нарезать друг на друга.
У РТОС есть возможность вручную задать положение кучи при помощи менеджера heap_5


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: blik


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB