|
Сравнение RTOS для STM32 по времени реакции |
|
|
|
 |
Ответов
|
Nov 12 2014, 13:13
|

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

|
Цитата(ArtDenis @ Nov 10 2014, 18:03)  С горем пополам запустил scmRTOS и померил время реакции на том же камне - 5.52 мкс Спасибо AHTOX-е за его консультации при запуске ) На Kinetis MK60 120 МГц RTOS MQX при переключении контекста через сервис флагов получается время 3 мкс (369 тактов) При этом: -флаги могут быть с автоматическим сбросом или без, -время не зависит от маски флагов, -не запрещаются прерывания ядра, -у задач разрешен планировщик time slice, -на ожидании флага может стоять очередь задач. Т.е. сервис остается еще довольно навороченным.
|
|
|
|
|
Nov 13 2014, 20:48
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(AlexandrY @ Nov 12 2014, 15:13)  На Kinetis MK60 120 МГц RTOS MQX при переключении контекста через сервис флагов получается время 3 мкс (369 тактов) Интересно, я смотрел MQX несколько лет назад, операционка хороша развитым middleware, но само ядро там слишком громоздкое и не может быть быстрым, имхо. Как бы цифра вызывает сомнения, но я смотрел давно, еще версию 3.7, надо будет собрать и погонять на STM32. Ну или К60 сам по себе фантастически быстрый, что тоже маловероятно. Или цифра 3 мкс никак не коррелирует с теми тестами по переключению контекста что мы с AHTOXA когда-то проводили. В-общем, у меня не сходится  Цитата(AlexandrY @ Nov 12 2014, 15:13)  -не запрещаются прерывания ядра, А что такое прерывания ядра? Сейчас специально скачал свежую версию 4.1.0 для K60. Посмотрел функцию sem_post(), там все те же макросы _INT_ENABLE, _INT_DISABLE которые выливаются для CortexM3 в инструкции cpsie и cpsid. Да еще оно считает уровень вложенности запрета прерываний, что тоже скорости не добавляет. Так что все там банально в MQX, запрещает она прерывания как миленькая. Или я куда-то не туда посмотрел? Цитата(AlexandrY @ Nov 12 2014, 15:13)  -у задач разрешен планировщик time slice, -на ожидании флага может стоять очередь задач.
Т.е. сервис остается еще довольно навороченным. Ну этим уже тыщу лет никого не удивишь, это многие старенькие RTOS типа TNKernel/FreeRTOS давно умеют.
|
|
|
|
|
Nov 13 2014, 21:45
|

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

|
Цитата(VslavX @ Nov 13 2014, 22:48)  А что такое прерывания ядра? Сейчас специально скачал свежую версию 4.1.0 для K60. Посмотрел функцию sem_post(), там все те же макросы _INT_ENABLE, _INT_DISABLE которые выливаются для CortexM3 в инструкции cpsie и cpsid. Да еще оно считает уровень вложенности запрета прерываний, что тоже скорости не добавляет. Так что все там банально в MQX, запрещает она прерывания как миленькая. Или я куда-то не туда посмотрел? Сильны же вы макросы смотреть. Там без поллитра ничего не высмотришь. Только пошаговая отладка позволяет понять какой там из кучи вариантов макросов реально выполняется. В моей тестовой конфигурации просто повышался приоритет разрешенных прерываний. На прерывания ядра (т.е. не проходящие через планировщик RTOS) у MQX выделено 4-е верхних уровня. Полное запрещение прерываний не производится. На STM32 порта MQX вообще-то нет. Забавно будет если кто-то его сделает. Цитата(VslavX @ Nov 13 2014, 22:48)  Ну этим уже тыщу лет никого не удивишь, это многие старенькие RTOS типа TNKernel/FreeRTOS давно умеют. Умеют они там или не умеют не так важно. Важно в честном сравнении это упоминать.
|
|
|
|
|
Nov 13 2014, 22:40
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(AlexandrY @ Nov 13 2014, 23:45)  Сильны же вы макросы смотреть. Там без поллитра ничего не высмотришь. Да ладно, все просто. В моей сегодня-скачанной версии 4.1.0: _INT_DISABLE/_INT_ENABLE определяются в одном файле mqx_prv.h, в итоге они или вызывают функции _int_disable/_int_enable определенные в int.c. Вариант когда MQX работает без прерываний (MQX_USE_INTERRUPTS == 0) не рассматриваем как вырожденный, поэтому интересующие нас макросы всегда приводят к макросам _INT_DISABLE_CODE/_INT_DISABLE_CODE в инлайновом или вынесенном в функции варианте. Эти макросы юзают _PSP_SET_DISABLE_SR и _PSP_SET_ENABLE_SR. Цитата(AlexandrY @ Nov 13 2014, 23:45)  Только пошаговая отладка позволяет понять какой там из кучи вариантов макросов реально выполняется. В моей тестовой конфигурации просто повышался приоритет разрешенных прерываний. Да, там действительно просмотрел ветвление между Cortex-M0 и Cortex-M4. Для Cortex-M4 производится модификация регистра BASEPRI. Это еще медленнее чем cpsie/cpsid (тем более там дополнительные обращения к памяти за значениями приоритета, так и за счетчиком вложенности), но, при некотором извращении позволяет оставлять разрешенными прерывания с приоритетом выше заданного. Обработчики таких прерываний будут ограниченными по функционалу, но чисто формально можно заявить что прерывания полностью не запрещаются. Цитата(AlexandrY @ Nov 13 2014, 23:45)  На STM32 порта MQX вообще-то нет. Забавно будет если кто-то его сделает.  Не, мне лениво, у меня сейчас полное ретро - PDP-11 всякий разный в качестве хобби. Цитата(AlexandrY @ Nov 13 2014, 23:45)  Умеют они там или не умеют не так важно. Важно в честном сравнении это упоминать. Ну так тут пробегала ссылка в начале на тему с тестами, там и исходник приложения тестового был, кажется, прогнали бы, да назвали реальные цифры - вот и честное сравнение. Я сейчас просмотрел подробно sem_post, ну ничего нового, все та же банальщина - убрать задачу из двойного списка ожидающих таймер, убрать из ожидающих, добавить в активные, и все это сопровождается всякими относительно избыточными (относительно предельно вылизанных TNKernel или scmRTOS) телодвижениями - модификацией размера очереди и прочим. Хм, переключатель контекста сделан вообще громоздко - или сразу PendSV ставит, или выполняет svc где в обработчике опять таки PendSV ставится. Ну и cpsid/cpsie в перекллючателе контекста все-таки есть. Update: перечитал тему по "мерянью" временем переключения контекста, там цифра 1.30 мкс на STM32F205 120МНz, 3WS, IAR6.30. ScmRTOS еще чуток быстрее. То есть ~3мкс для MQX на 120МГц К60 вполне реалистична. Теперь верю
|
|
|
|
Сообщений в этой теме
ArtDenis Сравнение RTOS для STM32 по времени реакции Nov 7 2014, 15:22 AHTOXA Вот тут мы сравнивали scmRTOS и TNKernel. Nov 7 2014, 15:30 ArtDenis Спасибо за ссылку, но сравнения всего двух RTOS ма... Nov 7 2014, 15:33 ViKo Здесь можно посмотреть временные характеристики дл... Nov 7 2014, 16:37 Lagman Скорость реакции, надо чтобы ОСРВ отработала или д... Nov 7 2014, 20:23 ArtDenis Lagman, под скоростью реакции я имею ввиду промежу... Nov 8 2014, 04:47 AlexandrY Цитата(ArtDenis @ Nov 8 2014, 06:47) + AH... Nov 8 2014, 08:49  AHTOXA Цитата(AlexandrY @ Nov 8 2014, 13:49) Не ... Nov 8 2014, 10:28   AlexandrY Цитата(AHTOXA @ Nov 8 2014, 12:28) Ваш на... Nov 8 2014, 17:36    AHTOXA Цитата(AlexandrY @ Nov 8 2014, 22:36) Т.е... Nov 8 2014, 20:45 Lagman Цитата(ArtDenis @ Nov 8 2014, 07:47) под ... Nov 8 2014, 12:25 Mahagam эм. только не забывайте, что freertos сравнивать н... Nov 8 2014, 12:05 ArtDenis Lagman, у меня методика тестирования простейшая. Е... Nov 8 2014, 12:49 Lagman Цитата(ArtDenis @ Nov 8 2014, 15:49) Есть... Nov 8 2014, 20:59 ZASADA во FreeRTOS есть несколько способов сбросить ногу.... Nov 8 2014, 17:32 ArtDenis ZASADA. Я примеры не использовал, а ноги "дры... Nov 8 2014, 18:03 ArtDenis Lagman, время переключения контекста и время реакц... Nov 9 2014, 06:08 Lagman Цитата(ArtDenis @ Nov 9 2014, 09:08) врем... Nov 9 2014, 11:00  ArtDenis Цитата(Lagman @ Nov 9 2014, 16:00) придет... Nov 9 2014, 12:25   AlexandrY Цитата(ArtDenis @ Nov 9 2014, 14:25) К то... Nov 9 2014, 18:14   LightElf QUOTE (ArtDenis @ Nov 9 2014, 16:25) К то... Nov 12 2014, 15:14    AlexandrY Цитата(LightElf @ Nov 12 2014, 17:14) Еще... Nov 12 2014, 16:10     LightElf QUOTE (AlexandrY @ Nov 12 2014, 20:10) Та... Nov 13 2014, 12:49      AlexandrY Цитата(LightElf @ Nov 13 2014, 14:49) Ну ... Nov 13 2014, 14:54 ArtDenis Бинарный семафор вроде как самый быстрый. Другие о... Nov 9 2014, 19:10 Lagman Цитата(ArtDenis @ Nov 9 2014, 22:10) Бина... Nov 9 2014, 20:06 Mahagam попробуйте ещё CTL запустить. Nov 12 2014, 10:47 ArtDenis Эх, в итоге я так и не осилил scmRTOS и ChibiOS, к... Nov 17 2014, 12:34 seec Цитата(ArtDenis @ Nov 17 2014, 15:34) Эх,... Nov 14 2015, 22:21  Aner QUOTE (seec @ Nov 15 2015, 01:21) Останов... Nov 14 2015, 22:24   seec Цитата(Aner @ Nov 15 2015, 01:24) ... а ч... Nov 15 2015, 06:16  ViKo Цитата(seec @ Nov 15 2015, 01:21) Останов... Nov 15 2015, 06:45 Mahagam ещё раз. смотрите в сторону кроссворка. стиль кода... Nov 17 2014, 13:08 den_po Цитата(Mahagam @ Nov 17 2014, 18:08) ещё ... Nov 18 2014, 08:07  Mahagam QUOTE (den_po @ Nov 18 2014, 11:07) Чей с... Nov 18 2014, 11:12 MBR Выбирать RTOS из-за очень синтетического параметра... Jul 1 2015, 13:15 Lagman Понимаю что тема старая и тут уже сам автор (MBR) ... May 29 2017, 07:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|