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

 
 
6 страниц V  < 1 2 3 4 5 > »   
Closed TopicStart new topic
> Написал порт scmRTOS под ARM, интересны отзывы
Сергей Борщ
сообщение May 18 2006, 13:06
Сообщение #31


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ May 18 2006, 12:37) *
Цитата(Сергей Борщ @ May 18 2006, 12:08) *

typedef void * xQueueHandle;
typedef xQueueHandle xSemaphoreHandle;
typedef void * xTaskHandle;
А здесь-то криминал-то в чем? Совершенно разные типы. Я 'дико извиняюсь', но это
typedef а не define - любой компилятор находясь в твердом уме и здравой памяти обломает
подмену безвариантно.
Совсем не уверен. Во всяком случае
Код
    int x,y;
    xQueueReceive(&x, &y, 0);
IAR съел молча, хотя int* это совсем не xQueueHandle. И что-то мне казалось что в С это не разные типы а синонимы, это в С++ будут разные типы.

По сравнению объемов мне непонятно откуда такие цифры? Чего-то вы напутали. Заглянул в .map, получил там такое:
Код
OS::Kernel      0x28
IdleProcess     0x6c
Proc1           0x134 ( 8 + 0x12C stack)
Proc2           0x134 ( 8 + 0x12C stack)
Proc3           0x134 ( 8 + 0x12C stack)

Т.е. ядро+Idle занимает 148 байт плюс по 8 байт на каждый процесс. Остальное - стеки прцессов. Счас буду делать аналогичный тест с FreeRTOS, сравню сам. Еще особенность - я не правил .xcl из ИАРовского примера, поэтому возможно погрешность ползет оттуда: в качестве IRQ_STACK в scmRTOS используется CSTACK, да и его размер в .xcl определен как 0x400 что явно замного. Продолжаю эксперименты. Счас попробую замерить время переключения контекстов.

Цитата
Кстати :-) обратите внимание, там в переключении контекстов 'nop'-чик недавно добавился...
Еще один? :-))


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2006, 14:38
Сообщение #32


Гуру
******

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



Цитата(Сергей Борщ @ May 18 2006, 16:06) *
Совсем не уверен. Во всяком случае
Код
    int x,y;
    xQueueReceive(&x, &y, 0);
IAR съел молча, хотя int* это совсем не xQueueHandle. И что-то мне казалось что в С это не разные типы а синонимы, это в С++ будут разные типы.

Ну начинаем выкручиваться:
1. Амперсандик добавили, спасибо, что не (xQueueHandle) :-)
2. С настройками компилятора разберитесь, ибо я, естественно, как и положено, получил
Код
D:\ARM_WORK\COMMON\LPC2000\rtc.c(107) : Warning[Pe167]: argument of type "int *" is incompatible with parameter of type "xQueueHandle"


Цитата
По сравнению объемов мне непонятно откуда такие цифры? Чего-то вы напутали. Заглянул в .map, получил там такое:

Тоже из MAP. MAP в тестовом виде прилагается, кстати, был в свое время обрадован IARовским
HTML мапом. Смотрите в приложении:
* MODULE SUMMARY *
Делал только сборку, ничего не менял, на железо не переносил.
Цитата
Счас буду делать аналогичный тест с FreeRTOS, сравню сам. Еще особенность - я не правил .xcl из ИАРовского примера, поэтому возможно погрешность ползет оттуда: в качестве IRQ_STACK в scmRTOS используется CSTACK, да и его размер в .xcl определен как 0x400 что явно замного.

Это Правильно! Едиственное изменение мною для уравнивания шансов конфигурирось количество приоритетов равное числу задач, ибо так и в scmRTOS. И отключальтись дополнитительные
наворотики. Собственно конфигурация в приложении. На железо заливалось.
Результат возможно будет даже немного лучше при компиляции базовой FreeRTOS, ибо я своего надобавлял.

Цитата
Счас попробую замерить время переключения контекстов.

Если мне не изменяет память, то я получил на уровне 7us. Но это при ЧЕСТНОМ измерении,
от момента ВНЕШНЕГО а не таймерного прерывания и до проднятия задачи дергающей PIN.
Время это время для FreeRTOS, естественно, не фиксированное. Задач было около 6. Можно
повторить под протокол, но через недельку - болею сейчас.

Цитата
Еще один? :-))

Если последняя рассматриваеваемая Вами версия была 3.X.X, то помнится да.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2006, 15:01
Сообщение #33


Гуру
******

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



Давайте я Вас еще попытаюсь совлечь c "пути истиного" - TNKernel изучали? Мне весьма понравилось остановило только, что поздновато набрел и под свой вкус надо было сразу шедулер менять -
там он в uCOS стиле, что будет Вам ближе :-). На первый взгляд привлек обильным ASM. Потом оценил скорость FreeRTOS и успокоился. Автор здесь тоже появляется.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2006, 15:14
Сообщение #34


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Сравнил по скорости с FreeRTOS. Тест простой: низкоприоритетный процесс сигналит семафор, более высокоприоритетный его ждет. Код:
Код
/******  FreeRTOS  **********/
static void Task1( void * pvParameters ) {
    for(;;) {
        xSemaphoreTake( xSemaphore, ( portTickType )-1 );
        off(LED0);
    }
}
static void Task2( void * pvParameters ) {
    for(;;) {
        on(LED0);
        xSemaphoreGive( xSemaphore );
    }
}
void main( void ) {
    prvSetupHardware();

    vSemaphoreCreateBinary( xSemaphore );
    xTaskCreate( Task1, "Task1", 300, 0, tskIDLE_PRIORITY + 2, ( xTaskHandle * ) NULL );
    xTaskCreate( Task2, "Task2", 300, 0, tskIDLE_PRIORITY + 1, ( xTaskHandle * ) NULL );

    vTaskStartScheduler();
}
/******** scmRTOS   ***********/
OS_PROCESS void TProc1::Exec() {
    for(;;)
    {
        ef.Wait();
        off(LED0);
    }
}
OS_PROCESS void TProc2::Exec() {
    for(;;)
    {
        on(LED0);
        ef.Signal();
    }
}

Результат (частота 49,152МГц):
Код
   ОС            светодиод горит             светодиод не горит
FreeRTOS THUMB         59 мкс                      35 мкс
FreeRTOS ARM          не компилится согласно документации
scmRTOS  THUMB         7.5 мкс                     7.5 мкс
scmRTOS  ARM            5 мкс                       5 мкс
При этом семафор в scmRTOS занимает 4 байта в FreeRTOS - 76, процесс занимает 4 байта + стек, в FreeRTOS - 76 + стек. Сколько ОЗУ требует ядро FreeRTOS я не искал.

Цитата(zltigo @ May 18 2006, 17:38) *
Цитата(Сергей Борщ @ May 18 2006, 16:06) *

Совсем не уверен. Во всяком случае
Код
    int x,y;
    xQueueReceive(&x, &y, 0);
IAR съел молча, хотя int* это совсем не xQueueHandle. И что-то мне казалось что в С это не разные типы а синонимы, это в С++ будут разные типы.

Ну начинаем выкручиваться:
1. Амперсандик добавили, спасибо, что не (xQueueHandle) :-)

результат &x где x-int имеет тип *int, так что не принимается.
Цитата
2. С настройками компилятора разберитесь, ибо я, естественно, как и положено, получил
Вот тут да. Согласно рекомендациям в поле suppress those warnings стоит pe815, pe191, pa082, pe167. Заметьте, не я их туда поставил а авторы FreeRTOS.

Цитата
Цитата

По сравнению объемов мне непонятно откуда такие цифры? Чего-то вы напутали. Заглянул в .map, получил там такое:

Тоже из MAP. MAP в тестовом виде прилагается, кстати, был в свое время обрадован IARовским
HTML мапом. Смотрите в приложении:
Понял, спасибо. Буду посмотреть.

Цитата
Цитата

Счас попробую замерить время переключения контекстов.

Если мне не изменяет память, то я получил на уровне 7us. Но это при ЧЕСТНОМ измерении,
от момента ВНЕШНЕГО а не таймерного прерывания и до проднятия задачи дергающей PIN.
Время это время для FreeRTOS, естественно, не фиксированное. Задач было около 6. Можно
повторить под протокол, но через недельку - болею сейчас.
нда, такой эксперимент я не проводил, может завтра рискну. О своих результатах написал чуть выше.
P.S. к семинару Тексаса выздоровишь (24-го)?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2006, 15:16
Сообщение #35


Гуру
******

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



Цитата(Сергей Борщ @ May 18 2006, 18:04) *
При этом семафор в scmRTOS занимает 4 байта в FreeRTOS - 76, процесс занимает 4 байта + стек, в FreeRTOS - 76 + стек.

Ваше неравнодушие к семафорам я уже заметил :-)


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2006, 15:21
Сообщение #36


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ May 18 2006, 18:01) *
Давайте я Вас еще попытаюсь совлечь c "пути истиного" - TNKernel изучали? Мне весьма понравилось остановило только, что поздновато набрел и под свой вкус надо было сразу шедулер менять -
там он в uCOS стиле, что будет Вам ближе :-). На первый взгляд привлек обильным ASM. Потом оценил скорость FreeRTOS и успокоился. Автор здесь тоже появляется.
Нет, не изучал. Я в свое время портировал ОС CREx от компилятора Introl с мотороллера HC12 на MSP430. Тоже вся на асме была. функциональность примерно как у FreeRTOS - т.е. динамическое создание/удаление процессов, семафоров и прочего. Ошибки вылавливал долго. Потом с Гарри сравнили время переключения контекста с scmRTOS и я забросил CREx в архив :-) И вообще стараюсь с асмом поменьше связываться. Перефразируя принцип IBM "Компилятор должен работать, а я - думать". Первый проект на ARMe сделал на чистом С и про ядро начал читать и асм изучать только сейчас когда переключатель задач писал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2006, 15:24
Сообщение #37


Гуру
******

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



[quote name='Сергей Борщ' date='May 18 2006, 18:14' post='114555']
1. Амперсандик добавили, спасибо, что не (xQueueHandle) :-)
[quote]
результат &x где x-int имеет тип *int, так что не принимается.
[/quote]
[/quote]
Дело не в размерности а в том, что ДВАЖДЫ нужно ошибится. И параметр не тот подсунуть и
амперсандик добавить.

[quote]
Вот тут да. Согласно рекомендациям в поле suppress those warnings стоит pe815, pe191, pa082, pe167. Заметьте, не я их туда поставил а авторы FreeRTOS.
[/quote]
А я такие "рекомендации" сразу игнорирую - для начала прагмы по конкретным местам, потом
разборки. С наличием такого типа халтуры я уже ранее сразу согласился :-(

[qoute]
P.S. к семинару Тексаса выздоровишь (24-го)?
[/quote]
Не собираюсь на семинар. Но встретится можно и без этого повода.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2006, 15:40
Сообщение #38


Гуру
******

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



Цитата(Сергей Борщ @ May 18 2006, 18:21) *
Ошибки вылавливал долго. Потом с Гарри сравнили время переключения контекста с scmRTOS и я забросил CREx в архив :-)

Так под IAR платформу scmRTOS очень к месту. Порт для молотилок типа DSP тоже логичен -
наверное даже использую к осени.
C ARM, вот что делать.... Скорость уже тяготит мало, RAM - вполне терпимо. FLASH - вообще без
проблем. И на первое место для меня выходит функциональность.

Цитата
И вообще стараюсь с асмом поменьше связываться.

После написания в свое время на ASM проекта под 200K кода и исходными текстами сравнимыми
по объему с парой томов "Войны и Мира" - я думаю аналогично :-)
На ASM намекал только с точки зрения 'почитать', кроме того, она далеко не вся на ASM -
просто несколько более критических мест на ASM написаны по сравнеию с более распростаненными.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2006, 15:41
Сообщение #39


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ May 18 2006, 18:16) *
Цитата(Сергей Борщ @ May 18 2006, 18:04) *

При этом семафор в scmRTOS занимает 4 байта в FreeRTOS - 76, процесс занимает 4 байта + стек, в FreeRTOS - 76 + стек.

Ваше неравнодушие к семафорам я уже заметил :-)

Хорошо, очередь требует 8 байтов накладных расходов :-)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 18 2006, 15:41
Сообщение #40


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



2 Сергей Борщ
Когда закончите доводить до ума свою ОСь, надеюсь выложите по изначально обозначенной ссылке. А вообще, неплохо. Я своё детище тоже написал через 3 месяца после знакомства с армом. И тоже стараюсь всё писать на Си, только самые критические участки на асме.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 18 2006, 15:50
Сообщение #41


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GetSmart @ May 18 2006, 18:41) *
2 Сергей Борщ
Когда закончите доводить до ума свою ОСь, надеюсь выложите по изначально обозначенной ссылке. А вообще, неплохо. Я своё детище тоже написал через 3 месяца после знакомства с армом. И тоже стараюсь всё писать на Си, только самые критические участки на асме.
Ось не моя, а порт будет выложен на scmRTOS.narod.ru


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 18 2006, 18:50
Сообщение #42


Гуру
******

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



Цитата(Сергей Борщ @ May 18 2006, 18:14) *
FreeRTOS THUMB 59 мкс 35 мкс
FreeRTOS ARM не компилится согласно документации

Сразу как-то прощляпил "не компилится" :-(
Причем поминанием документации. Посмотрел - никаких препятствий, работает, только один битик, естественно,
в SPSR подправить надо:
Код
/* Constants required to setup the initial stack. */
#if __CPU_MODE__ == 1         // zlt[      
#define portINITIAL_SPSR                ( ( portSTACK_TYPE ) 0x3F ) // System mode, THUMB mode, Interrupts enabled.
#endif                      //]zlt

#if __CPU_MODE__ == 2        // zlt[
#define portINITIAL_SPSR                ( ( portSTACK_TYPE ) 0x1F ) // System mode, ARM mode, Interrupts enabled.
#endif                      //]zlt


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 19 2006, 11:04
Сообщение #43


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ May 18 2006, 21:50) *
Цитата(Сергей Борщ @ May 18 2006, 18:14) *

FreeRTOS THUMB 59 мкс 35 мкс
FreeRTOS ARM не компилится согласно документации

Сразу как-то прощляпил "не компилится" :-(
Причем поминанием документации. Посмотрел - никаких препятствий, работает, только один битик, естественно,в SPSR подправить надо:

Ну что сказать? Полез я снова читать доку и вынужден признать что Вы правы: мне в голову запала фраза из доки: It should be noted that some of the macros defined in portmacro.h can only be called from ARM mode code, and use from THUMB code will result in a compile time error.
В принципе я где-то прав. Согласно этой фразе собрать весь проект в чистом ARM не получится. Решил я посмотреть что за ошибки. Скомпилилось без ошибок, ничего криминального в тех макросах не нашел. Да, portINITIAL_SPSR пришлось дописать руками. Но в целом свою фразу насчет "не компилится" беру взад, однако Вы сами признали, что без "доработки напильником" и не работает. Заодно каюсь - вчера измерял вариант Flash Debug, т.е. без оптимизации. Сегодня подправил переключение контекста в своем порте (теперь и симулятор и железо живут одинаково, да и скорость поднял) и попробовал разные варианты оптимизации, результат такой:
Код
   ОС                       светодиод горит             светодиод не горит
FreeRTOS THUMB (Size, max)        67 мкс                      33 мкс
FreeRTOS ARM   (Size, max)        62 мкс                      35 мкс
scmRTOS  THUMB (Size, max)        6.3 мкс                     6.3 мкс
scmRTOS  ARM   (Size, max)        4.6 мкс                     4.6 мкс

FreeRTOS THUMB (Speed, max)       65 мкс                      33 мкс
FreeRTOS ARM   (Speed, max)       58 мкс                      35 мкс
scmRTOS  THUMB (Speed, max)       6.3 мкс                     6.3 мкс
scmRTOS  ARM   (Speed, max)       4.6 мкс                     4.6 мкс


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 19 2006, 11:49
Сообщение #44


Гуру
******

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



Цитата(Сергей Борщ @ May 19 2006, 14:04) *
It should be noted that some of the macros defined in portmacro.h can only be called from ARM mode code, and use from THUMB code will result in a compile time error.
В принципе я где-то прав. Согласно этой фразе собрать весь проект в чистом ARM не получится.

Ну вообще-то все с точностью до наоборот - нельзя весть проект в THUMB. Впрочем, как и любой другой. Ну и тестов нужно больше хороших и разных, кроме любимого теста от автора scmRTOS.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 19 2006, 13:13
Сообщение #45


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ May 19 2006, 14:49) *
Ну вообще-то все с точностью до наоборот - нельзя весть проект в THUMB. Впрочем, как и любой другой.

Угу. Что называется "между глаз лежало". И ведь не раз и не два перечитывал и с языком проблем нет. Снимаю возражения полностью.
Цитата(zltigo @ May 19 2006, 14:49) *
Ну и тестов нужно больше хороших и разных, кроме любимого теста от автора scmRTOS.

Если есть желание можем сравнивать. Жду предложений.

Выкладываю тут последнюю на данный момент версию, если не будет особых нареканий будем ее же и на офф. сайт выкладывать. Вроде даже в симуляторе работает, хотя не совсем вовремя прерывание вызывается.
Прикрепленные файлы
Прикрепленный файл  scmRTOS_ARM.zip ( 53.12 килобайт ) Кол-во скачиваний: 134
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 5 > » 
Closed TopicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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