Перейти к содержанию
    

За какое время у TNKernel выполняется

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

520 тактов проца от set_event до wait_event (управление передется сразу, ожидающая задача приоритетней) . Но это зависит от кол-ва задач, ждущих этого event. Порядок 500 - это если одна ждет. Если две - порядка 700 тактов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Хы, пробовал буквально утром :) - новый диспетчер 2.4 прогонял (и украл оттуда хинт - sub LR,LR,#4 - в самом начале :))

#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 для сравнения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну теже самый числа - это радует. У меня LPC48, время по таймеру0 засек, осцилла цифрового дома нет. Компилер RVDS ARM -o3 speed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за исчерпывающий ответ.

В Thumb mode будет чуть дольше, если не ошибаюсь.

 

Если не будет лень - попробую еще uC/OS для сравнения.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Аппаратура - та же самая, компилятор тоже, софт:

- uC/OS v2.80

- официальный порт под ARM

Итого:

13.5 uS - разрешена проверка аргументов, hooks и статистика

13.0 uS - нет проверки аргументов, выключены hooks и статистика

 

На самом деле время переключения контекста вопрос далеко не праздный.

У меня пара проектов с USB требуют как можно большей потоковой производительности

+ вычисления в фоне. Сейчас вариант с обработкой протокола USB в прерываниях

справляется с небольшим запасом - теперь главное, чтобы при переходе под OS этот запас

не сожрался. Более быстрый проц, плиз, не предлагать - цена очень критична.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне тут в привате еще scmRTOS и FreeRTOS посоветовали. Может быть кто-нибудь из форумчан прогонит приведенный выше тест на своем SAM7 в указаных OS? Было бы очень любопытно. У меня в итоге после оптимизации TNKernel получилось 8.5uS без проверок параметров, и 11.0 uS со всеми проверками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне тут в привате еще scmRTOS и FreeRTOS посоветовали.

На FreeRTOS можете и не cмотреть - не для соревнований в скорости переключения создавалась :)

А scmRTOS думаю (совершенно субъективно :) ) где-то 7us будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На FreeRTOS можете и не cмотреть - не для соревнований в скорости переключения создавалась :)

А scmRTOS думаю (совершенно субъективно :) ) где-то 7us будет.

Я вот только что дополнительно заинлайнил запрещение/разрешение прерываний при помощи intrinsic функций (по размеру даже меньше получилось - очень приличный код IAR 4.30 сгенерировал, ассемблеру 5-10% уступает, не больше) и в итоге получил - 7.3 uS :)

У меня сложилось впечатление, что любая инструкция перехода для SAM7 при исполнении из флеша порождает просто немерянные тормоза - перезагрузка конвеера просто множится на ожидание флеша.

А совершенно объективно :) по scmRTOS кто-то может сказать - тест-то на 15 минут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по scmRTOS кто-то может сказать - тест-то на 15 минут?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А совершенно объективно :) по scmRTOS кто-то может сказать - тест-то на 15 минут?

Вот именно... ;)

 

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();
    }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вот именно... ;)

1 - Есть инфа на сайте, на самой первой странице.

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

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

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

Не знаю, не знаю - для меня запуск scm оказался самым трудоемким из uC/OS и TNKernel.

scm тут совершенно не при чем, просто у меня стиль работы оказался с ним трудно совместим :).

Хроника событий:

- C++ я никогда в embedded не использовал, в существующую программную платформу scm-ные файлы быстро прицепить не удалось (на uC/OS и TNK было потрачено примерно по полдня на разборку и прикручивание). Ладно забиваем на все наработки, в комплекте с scm идут примеры - прекрасно, стартуем с них.

- выясняем что примеры идут исключительно под IAR IDE. "Ну нет у меня гармошки" - процессоры меняются относительно часто (через месяц светит проект на PowerPC e300, во втором полугодии - MIPS-IV), если я буду изучать всякие IDE - крыша уедет окончательно. Поэтому nmake/gmake - это наш выбор :).

- ставим (с кривой ухмылкой :glare: ) IDE, лечимся, решаем конфликты в path

- запускаем IDE, билдаем

- к чести авторов scm - билдается беспроблемно. Дайте две :biggrin:

- берем старую плату с SAM7S64

- пытаемся прошить (у меня свой программатор/отладчик - byteblaster называется :) - шьет/отлаживает через ICE), превед - формат файла не тот

- читаем хелп на предмет опций

- билдаем

- не работает, превед - конфигурация SRAM (а откуда я знаю что это и где это)

- билдаем FLASH

- шьем, превед - в intelhex файле запись с левым типом 05 (пока не выяснил, что это, уточню)

- имеем некоторы безопасный хекс с файлом - патчим его руками, шьем

- превед, на моих платах штатный кварц 12.0

- патчим low_level_init (наконец-то я узнал кто это такой :))

- запустились наконец

 

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

 

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 и благодаря этому возможна реализация протоколов коррекции приоритетов при использовании мутексов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гы. Отныне появилось третье измерение по мемерению пиписьками в эмбеддед :-D

Кстати где поглядеть толковое описание сути проблемы с мутексами ? Я так понимаю речь об инверсии приоритетов? Что-то никак не могу догнать, как бы такую засаду себе устроить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Далось же вам это время переключения контекста :) !

Да любая серьезная коммерческая RTOS (VxWorks, pSOS,Nucleus,ThreadX)

имеет время переключения контекста значительно больше чем scmRTOS,

TNKernel, uCOS -II из-за многочисленных самопроверок,повышенной функциональности(те

увеличенному размеру контекста) и т.п.

 

Высокая скорость переключения контекста в этих 3х маленьких кернелах - это высокая скорость мотоцикла, с которого сняли глушитель и седло для пассажира...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Высокая скорость переключения контекста в этих 3х маленьких кернелах - это высокая скорость мотоцикла, с которого сняли глушитель и седло для пассажира...

ИМХО, в тех ембеддед системах, где эти кернелы применимы, нет ни пассажира ни водителя, а есть только сам мотоцикл :). Можно убрать все несущественные проверки под ключ компиляции (в uCOS это частично сделано) и при желании, перед финалом глушитель и седло выбрасывать :). Обычно это получается не в ущерб надежности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...