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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> За какое время у TNKernel выполняется, "interprocess program control flow transfer"?
spf
сообщение Apr 5 2007, 15:16
Сообщение #1


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Имеются такие данные?

Зажгли лампочку и передаем управление ожидающей задаче, лампочку гасит ожидающая, как получит управление. Какое время будет гореть лампочка?

На известной частоте ядра и в одном из режимов.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 5 2007, 17:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



520 тактов проца от set_event до wait_event (управление передется сразу, ожидающая задача приоритетней) . Но это зависит от кол-ва задач, ждущих этого event. Порядок 500 - это если одна ждет. Если две - порядка 700 тактов
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 5 2007, 18:06
Сообщение #3


embarrassed systems engineer
*****

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



Цитата(spf @ Apr 5 2007, 15:16) *
Имеются такие данные?

Зажгли лампочку и передаем управление ожидающей задаче, лампочку гасит ожидающая, как получит управление. Какое время будет гореть лампочка?

На известной частоте ядра и в одном из режимов.

Хы, пробовал буквально утром smile.gif - новый диспетчер 2.4 прогонял (и украл оттуда хинт - sub LR,LR,#4 - в самом начале smile.gif)
Код
#define    TEST_PIN    (1<<21)

void test_task_func4(void *Param)
{
    for(;;)
    {
        PIOA_CODR = TEST_PIN;
        tn_sem_acquire (&setSem, TN_WAIT_INFINITE);
    }
}

void test_task_func3(void *Param)
{
    BOOL Create = TRUE;

    tn_sem_create (&setSem, 1, 1);

    for(;;)
    {
        PIOA_SODR = TEST_PIN;
        tn_sem_signal(&setSem);

        if (Create)
        {
            tn_task_create(
                (TN_TCB*)&test_task4,                
                test_task_func4,                        
                23,                                    
                &(test_task_stack4[TEST_STACK_SIZE-1]),
                TEST_STACK_SIZE,
                (PVOID)0,
                TN_TASK_START_ON_CREATION);

            Create = FALSE;
        }
    }
}

Для:
- AT91SAM7X
- 48MHz core
- ARM mode
- flash execution, 1 wait clock
- cистемы компилировались с флагом USE_MUTEX=0 (влияет незначительно)
- IAR 4.30, оптимизация по размеру -z9

Дает длительность импульса на TEST_PIN:
13.2 uS - TNKernel v2.3
13.0 uS - TNKernel v2.4
11.2 uS - TNKernel v2.3 с полностью модифицированным диспетчером + оптимизирующие мелочи в синхрообъектах
Если не будет лень - попробую еще uC/OS для сравнения.
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 5 2007, 18:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



ну теже самый числа - это радует. У меня LPC48, время по таймеру0 засек, осцилла цифрового дома нет. Компилер RVDS ARM -o3 speed
Go to the top of the page
 
+Quote Post
spf
сообщение Apr 6 2007, 06:03
Сообщение #5


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Спасибо за исчерпывающий ответ.
В Thumb mode будет чуть дольше, если не ошибаюсь.

Цитата(VslavX @ Apr 5 2007, 21:06) *
Если не будет лень - попробую еще uC/OS для сравнения.

Было бы интересно, думаю цифра будет близкой.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 6 2007, 10:10
Сообщение #6


embarrassed systems engineer
*****

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



Цитата(spf @ Apr 6 2007, 06:03) *
Было бы интересно, думаю цифра будет близкой.

Аппаратура - та же самая, компилятор тоже, софт:
- uC/OS v2.80
- официальный порт под ARM
Итого:
13.5 uS - разрешена проверка аргументов, hooks и статистика
13.0 uS - нет проверки аргументов, выключены hooks и статистика

На самом деле время переключения контекста вопрос далеко не праздный.
У меня пара проектов с USB требуют как можно большей потоковой производительности
+ вычисления в фоне. Сейчас вариант с обработкой протокола USB в прерываниях
справляется с небольшим запасом - теперь главное, чтобы при переходе под OS этот запас
не сожрался. Более быстрый проц, плиз, не предлагать - цена очень критична.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 6 2007, 17:37
Сообщение #7


embarrassed systems engineer
*****

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



Мне тут в привате еще scmRTOS и FreeRTOS посоветовали. Может быть кто-нибудь из форумчан прогонит приведенный выше тест на своем SAM7 в указаных OS? Было бы очень любопытно. У меня в итоге после оптимизации TNKernel получилось 8.5uS без проверок параметров, и 11.0 uS со всеми проверками.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 6 2007, 18:22
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(VslavX @ Apr 6 2007, 16:37) *
Мне тут в привате еще scmRTOS и FreeRTOS посоветовали.

На FreeRTOS можете и не cмотреть - не для соревнований в скорости переключения создавалась smile.gif
А scmRTOS думаю (совершенно субъективно smile.gif ) где-то 7us будет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 6 2007, 18:41
Сообщение #9


embarrassed systems engineer
*****

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



Цитата(zltigo @ Apr 6 2007, 18:22) *
На FreeRTOS можете и не cмотреть - не для соревнований в скорости переключения создавалась smile.gif
А scmRTOS думаю (совершенно субъективно smile.gif ) где-то 7us будет.

Я вот только что дополнительно заинлайнил запрещение/разрешение прерываний при помощи intrinsic функций (по размеру даже меньше получилось - очень приличный код IAR 4.30 сгенерировал, ассемблеру 5-10% уступает, не больше) и в итоге получил - 7.3 uS smile.gif
У меня сложилось впечатление, что любая инструкция перехода для SAM7 при исполнении из флеша порождает просто немерянные тормоза - перезагрузка конвеера просто множится на ожидание флеша.
А совершенно объективно smile.gif по scmRTOS кто-то может сказать - тест-то на 15 минут?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 6 2007, 18:58
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(VslavX @ Apr 6 2007, 17:41) *
по scmRTOS кто-то может сказать - тест-то на 15 минут?

Сергей Борщ, например, - он ее под ARM портировал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
spf
сообщение Apr 6 2007, 20:40
Сообщение #11


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(VslavX @ Apr 6 2007, 21:41) *
А совершенно объективно smile.gif по scmRTOS кто-то может сказать - тест-то на 15 минут?

Вот именно... wink.gif

1 - Есть инфа на сайте, на самой первой странице.
2 - Та же инфа в форуме, в обсуждении первых вариантов порта scmRTOS под АРМ.

Какие основания не доверять этим значениям?

3 - в комплекте scmRTOS для SAM совершенно рабочий пример 1-EventFlag, вставить вывод и запустить не должно составить труда.

Код
//---------------------------------------------------------------------------
  OS_PROCESS void TProc1::Exec()
{
    for(;;)
    {
        ef.Wait();
        ////////// ПОГАСИТЬ
    }
}
//---------------------------------------------------------------------------
OS_PROCESS void TProc3::Exec()
{
    for(;;)
    {
        Sleep(1);
         ////////// ЗАЖЕЧЬ
          ef.Signal();
    }
}


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 6 2007, 23:05
Сообщение #12


embarrassed systems engineer
*****

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



Цитата(spf @ Apr 6 2007, 20:40) *
3 - в комплекте scmRTOS для SAM совершенно рабочий пример 1-EventFlag, вставить вывод и запустить не должно составить труда.

Цитата(spf @ Apr 6 2007, 20:40) *
Вот именно... wink.gif
1 - Есть инфа на сайте, на самой первой странице.
2 - Та же инфа в форуме, в обсуждении первых вариантов порта scmRTOS под АРМ.
Какие основания не доверять этим значениям?
3 - в комплекте scmRTOS для SAM совершенно рабочий пример 1-EventFlag, вставить вывод и запустить не должно составить труда.

Не знаю, не знаю - для меня запуск scm оказался самым трудоемким из uC/OS и TNKernel.
scm тут совершенно не при чем, просто у меня стиль работы оказался с ним трудно совместим smile.gif.
Хроника событий:
- C++ я никогда в embedded не использовал, в существующую программную платформу scm-ные файлы быстро прицепить не удалось (на uC/OS и TNK было потрачено примерно по полдня на разборку и прикручивание). Ладно забиваем на все наработки, в комплекте с scm идут примеры - прекрасно, стартуем с них.
- выясняем что примеры идут исключительно под IAR IDE. "Ну нет у меня гармошки" - процессоры меняются относительно часто (через месяц светит проект на PowerPC e300, во втором полугодии - MIPS-IV), если я буду изучать всякие IDE - крыша уедет окончательно. Поэтому nmake/gmake - это наш выбор smile.gif.
- ставим (с кривой ухмылкой glare.gif ) IDE, лечимся, решаем конфликты в path
- запускаем IDE, билдаем
- к чести авторов scm - билдается беспроблемно. Дайте две biggrin.gif
- берем старую плату с SAM7S64
- пытаемся прошить (у меня свой программатор/отладчик - byteblaster называется smile.gif - шьет/отлаживает через ICE), превед - формат файла не тот
- читаем хелп на предмет опций
- билдаем
- не работает, превед - конфигурация SRAM (а откуда я знаю что это и где это)
- билдаем FLASH
- шьем, превед - в intelhex файле запись с левым типом 05 (пока не выяснил, что это, уточню)
- имеем некоторы безопасный хекс с файлом - патчим его руками, шьем
- превед, на моих платах штатный кварц 12.0
- патчим low_level_init (наконец-то я узнал кто это такой smile.gif)
- запустились наконец

Что показал осциллограф? Ага, там вам все сразу и расскажи. smile.gif

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

А осциллограф, ну что осциллограф - 6.5uS. Ну я взял бубен и немного побегал вокруг. Типа - это лучший результат из опробованных осей. Потом бубен выбросил и стал рыдать над исходниками. Ну где, где !!!? Да как так получается !!!? А-а-а, вот они - последствия IDE-разврата - надо галочку ARM в свойствах проекта поставить, interwork пока нахрен снимаем. Билдаем - 4.5uS. ПРЕВЕД? Как бы не так - кто регистр MC_FMR прописывать для 48МГц будет? Потирая руки пишем туда единичку, и... получаем "законные" 6.9uS.

Возможно, я где-то еще накосячил, но пока, хит-парад "по чистой скорости":
1. scmRTOS - 6.9uS
2. TNKernel - 7.2-13uS
3. uC/OS 2.80 - 13-13.5uS

И не забываем, что TNKernel имеет дополнительный round-robin scheduler и благодаря этому возможна реализация протоколов коррекции приоритетов при использовании мутексов.
Go to the top of the page
 
+Quote Post
DASM
сообщение Apr 7 2007, 01:12
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Гы. Отныне появилось третье измерение по мемерению пиписьками в эмбеддед :-D
Кстати где поглядеть толковое описание сути проблемы с мутексами ? Я так понимаю речь об инверсии приоритетов? Что-то никак не могу догнать, как бы такую засаду себе устроить
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Apr 7 2007, 11:37
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Далось же вам это время переключения контекста smile.gif !
Да любая серьезная коммерческая RTOS (VxWorks, pSOS,Nucleus,ThreadX)
имеет время переключения контекста значительно больше чем scmRTOS,
TNKernel, uCOS -II из-за многочисленных самопроверок,повышенной функциональности(те
увеличенному размеру контекста) и т.п.

Высокая скорость переключения контекста в этих 3х маленьких кернелах - это высокая скорость мотоцикла, с которого сняли глушитель и седло для пассажира...
Go to the top of the page
 
+Quote Post
VslavX
сообщение Apr 7 2007, 12:32
Сообщение #15


embarrassed systems engineer
*****

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



Цитата(yuri_t @ Apr 7 2007, 11:37) *
Высокая скорость переключения контекста в этих 3х маленьких кернелах - это высокая скорость мотоцикла, с которого сняли глушитель и седло для пассажира...

ИМХО, в тех ембеддед системах, где эти кернелы применимы, нет ни пассажира ни водителя, а есть только сам мотоцикл smile.gif. Можно убрать все несущественные проверки под ключ компиляции (в uCOS это частично сделано) и при желании, перед финалом глушитель и седло выбрасывать smile.gif. Обычно это получается не в ущерб надежности.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:35
Рейтинг@Mail.ru


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