Easyelectronics.ru

Электроника для всех
Текущее время: 20 ноя 2018, 23:17

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



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

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

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 618
Начал работать с 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
Сообщения: 2704
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
Сообщения: 618
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
Сообщения: 618
Tester500 писал(а):
kos писал(а):

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


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


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


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

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 618
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
Сообщения: 618
_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
Сообщения: 24
Коллеги!

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

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


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

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2484
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
Сообщения: 24
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
Сообщения: 2484
Работая с РТОС вообще лучше не использовать стандартный malloc, а память выделять в рамках создаваемых задач или очередей


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

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


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


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

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


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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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