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

 
 
> Требуется совет по выбору RTOS, программист я хреновый
Electrovoicer
сообщение Apr 18 2006, 19:16
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 337
Регистрация: 1-02-06
Пользователь №: 13 874



Созревает проект на LPC213x. Сюдя по всему конечным автоматом на таймере обойтись не получится ввиду большого числа событий и источников прерываний. Это на мой профанский взгляд. Да и надо наконец научиться писать с использованием RTOS. В связи с чем просьба к общественности посоветовать ПРОСТУЮ RTOS. И не просто посоветовать, а подсказать где ее взять. В принципе и купить можно, но сначала хотелось бы пощупать. Главное чтобы софт был качественно задокументирован, а то в С++ я как свинья в апельсинах, разбираться с исходниками не буду да и не смогу наверное. Мне бы на пальцах показать, как создать тред и исполнить в нем мой код. Соответственно хотелось бы иметь готовый порт на мой процик. Вытесняющая она должна быть или невытесняющая, еще не понял. Чтобы это понять, желательно Ваши примеры задач, для которых то или иное больше подходит.
Также просьба не отвечать вроде "да на хрена тебе ртос", "атмел sam7 рулит" и "ваще надо на асме писать"

С уважением, я


--------------------
"А я все помню, я был не пьяный!.." (С)Владимир Семенович
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sensor_ua
сообщение Apr 19 2006, 10:14
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



А я решил в попытке решения подобной задачи (LPC2138 и куча всего по самые уши) TNKernel прикручивать. Пока по кусочкам - прикрутил вход-выход для критических секций (практически такой же, как в uCOSII). А вот FreeRTOS после анализа этих самых критических кусочков пришлось забраковать. Посмотрим дальшеwink.gif...


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 19 2006, 18:27
Сообщение #3


Гуру
******

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



Цитата(sensor_ua @ Apr 19 2006, 13:14) *
А вот FreeRTOS после анализа этих самых критических кусочков пришлось забраковать.

???
Что такое жуткое вскрылось при анализе?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Apr 20 2006, 09:36
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата(zltigo @ Apr 19 2006, 21:27) *
Цитата(sensor_ua @ Apr 19 2006, 13:14) *

А вот FreeRTOS после анализа этих самых критических кусочков пришлось забраковать.

???
Что такое жуткое вскрылось при анализе?

Сразу оговорюсь, что сам не программист, потому прошу сильно не пинать.
В TNKernel наблюдаю

int tn_cpu_save_sr(void);
void tn_cpu_restore_sr(int sr);
#define tn_disable_interrupt() tn_save_status_reg = tn_cpu_save_sr()
#define tn_enable_interrupt() tn_cpu_restore_sr(tn_save_status_reg)

Во FreeRTOS

/* The code generated by the Keil compiler does not maintain separate
stack and frame pointers. The portENTER_CRITICAL macro cannot therefore
use the stack as per other ports. Instead a variable is used to keep
track of the critical section nesting. This necessitates the use of a
function in place of the macro. */

void vPortEnterCritical( void ){...}

void vPortExitCritical( void ){...}

В uCOS-II, IMHO, подобное называлось уровнем (паранойи?wink.gif)) то ли 1, то ли 2, а теперь прописано, что пользуют уровень 3 - практически то же по асму, что и в предпоследней TNKernel (в последней заменили (в tn_cpu_save_sr() и tn_cpu_restore_sr(..))
bx, lr
на
mov pc,lr

Мне решение в TNKernel и uCOS-II кажется обоснованным и разумным.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 20 2006, 16:44
Сообщение #5


Гуру
******

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



Цитата(sensor_ua @ Apr 20 2006, 12:36) *
В TNKernel наблюдаю

int tn_cpu_save_sr(void);
void tn_cpu_restore_sr(int sr);
#define tn_disable_interrupt() tn_save_status_reg = tn_cpu_save_sr()
#define tn_enable_interrupt() tn_cpu_restore_sr(tn_save_status_reg)

Во FreeRTOS

void vPortEnterCritical( void ){...}

void vPortExitCritical( void ){...}

Мне решение в TNKernel и uCOS-II кажется обоснованным и разумным.


Цитата
В TNKernel и uCOS-II сохраняется регистр статуса и это видно по коду, а во FreeRTOS эти функции void. Может оно там тоже как-то сохраняется, но я не смог увидеть куда


Самый странный критерий выбора операционной системы, какой я только встречал на данный момент.
Или я чего-то не понял :-(
В TNKernel много чего хорошего, но реализация ограждения критических секций более чем спорная.
Для сохрания состояния используется персональная поименованная переменная и за этим необходимо
следить глазами и руками. Не дай бог вам пару раз подряд вызвать tn_cpu_save_sr() с сохранением
в одну и ту-же переменную. А макросами tn_disable_interrupt() и tn_enable_interrupt() вообще
находясь в здравом уме и твердой памяти пользоваться нельзя, ибо при вложенном вызове их
критической секции еще одной критической секции кирдык в виде запрещенных навсегда
прерываний наступит незамедлительно. Несимметричное количество вызовов тоже черевано.

Теперь о FreeRTOS:
void vPortEnterCritical()
void vPortExitCritical()
Имеют исходники. Они просты, как лом, откомментированы, и так-же надежно работают.
Код
void vPortEnterCritical( void )
{
    /* Disable interrupts first! */
    __disable_interrupt();

    /* Now interrupts are disabled ulCriticalNesting can be accessed
    directly.  Increment ulCriticalNesting to keep a count of how many times
    portENTER_CRITICAL() has been called. */
    ulCriticalNesting++;
}
void vPortExitCritical( void )
{
    if( ulCriticalNesting > portNO_CRITICAL_NESTING )
    {
        /* Decrement the nesting count as we are leaving a critical section. */
        ulCriticalNesting--;

        /* If the nesting level has reached zero then interrupts should be
        re-enabled. */
        if( ulCriticalNesting == portNO_CRITICAL_NESTING )
        {
            __enable_interrupt();
        }
    }
}

При входе прерывания безусловно запрещаются и наращивается обезличеный счетчик запретов.
При выходе разрешаются если счетчик запретов равен 0. Никаких проблем с реализацией вложений.
Хранения состояния не нужно, переменная для блокировок всего одна.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 21 2006, 05:42
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Apr 20 2006, 23:44) *
Теперь о FreeRTOS:
void vPortEnterCritical()
void vPortExitCritical()
Имеют исходники. Они просты, как лом, откомментированы, и так-же надежно работают.
Код
void vPortEnterCritical( void )
{
    /* Disable interrupts first! */

[...skipped...]

    }
}

При входе прерывания безусловно запрещаются и наращивается обезличеный счетчик запретов.
При выходе разрешаются если счетчик запретов равен 0. Никаких проблем с реализацией вложений.
Хранения состояния не нужно, переменная для блокировок всего одна.

А зачем такие навороты с подсчетом входов, анализом их при выходе и т.д.? Тут, насколько я понимаю:

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

Почему бы не использовать простую схему (псевдокод):
Код
CritEnter()
{
    SaveInterruptState();
    DisableInterrupt();
}

CritExit()
{
    RestoreInterruptState();
}


Все, ничего подсчитывать и анализировать не надо и логическая целостность программы не нарушается. Единственное требование - это необходимо жестко соблюдать комплементарность вызвовов этих функиций, но это надо делать при любом подходе. На С, к сожалению, это приходится делать руками, тут ничего не поделать. К счастью, на С++ этот момент поддается автоматизации, поэтому использование критических секций там тривиально и совершенно безопасно. :-)


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 21 2006, 06:20
Сообщение #7


Гуру
******

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



Цитата(dxp @ Apr 21 2006, 08:42) *
А зачем такие навороты с подсчетом входов, анализом их при выходе и т.д.?

-Ну про 'навороты' это уж перебор :-)
-Безболезненная вложенность.
-При использовании этого механизма без левых запретов прерывания будет отсутствовать
это:
Цитата
во-вторых, а если при первом вызове прерывания были по какой-то причине запрещены? Ведь при выходе они будут разрешены, что есть нарушение логики работы программы.


Цитата
прилично кода - накладные расходы, т.е.

Одного порядка, на самом деле, в FreeRTOS случае дополнительная работа со счетчиком
в памяти, в варианте "с сохранением" тоже работа с памятью - считать-запомнить-прочитать-записать.

Цитата
Почему бы не использовать простую схему (псевдокод):
....
Единственное требование - это необходимо жестко соблюдать комплементарность вызвовов этих функций, но это надо делать при любом подходе.

-Увы, не единственное, вроде уже распинался :-(.
- в варианте "со счетчиком" комплементарность можно слегка нарушить :-) лишними вызовами
конца критической секции.


Цитата(DASM @ Apr 21 2006, 08:46) *
объясните неразумному, почему EnterCriticalSection у вас ассоцируется с запретом прерываний ? Мне это как-то неочевидно..

У меня не ассоциируется, просто здесь речь идет о двух реалиациях оных в двух конкретных
системах, которые обе базируются на таком решении. Обсуждаются отличия, причем автором
во главу угла была поставлена (если я правильно все это понимаю) мнимая большая дуракоустойчивость TNKernel в сравнении c FreeRTOS.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Electrovoicer   Требуется совет по выбору RTOS   Apr 18 2006, 19:16
- - vet   uCOS-II - распространённая, простая и нетребовател...   Apr 18 2006, 20:18
- - beer_warrior   ЦитатаНа сайте можно взять готовые шаблоны проекто...   Apr 18 2006, 20:58
- - Evgeny_CD   Еще можно посоветовать Tasking Library из CrossWor...   Apr 18 2006, 21:37
|- - dch   eCos тоже хвалят ...Я не приминул пригласить его ...   Apr 18 2006, 22:29
|- - alogvinov   Цитата(dch @ Apr 19 2006, 02:29) eCos тож...   Apr 19 2006, 04:47
- - DASM   а embOS от UCOS вообще отличается ? Уж больно похо...   Apr 19 2006, 05:11
|- - alogvinov   Цитата(DASM @ Apr 19 2006, 09:11) а embOS...   Apr 19 2006, 09:31
|- - Andy Mozzhevilov   Цитата(alogvinov @ Apr 19 2006, 15:31) Ци...   Apr 19 2006, 12:18
|- - alogvinov   Цитата(Andy Mozzhevilov @ Apr 19 2006, 16...   Apr 20 2006, 05:26
|- - Andy Mozzhevilov   Цитата(alogvinov @ Apr 20 2006, 11:26) По...   Apr 20 2006, 05:34
|- - DASM   Цитата(alogvinov @ Apr 20 2006, 09:26) Ци...   Apr 20 2006, 06:24
|- - dxp   Цитата(alogvinov @ Apr 20 2006, 12:26) По...   Apr 20 2006, 06:30
|- - alogvinov   Цитата(dxp @ Apr 20 2006, 10:30) Цитата(a...   Apr 20 2006, 10:15
- - Electrovoicer   Всем спасибо, буду щупать uCOS-II. на местном фтп ...   Apr 19 2006, 05:48
- - Electrovoicer   а CrossWorks не надо, и все иже с ним. Я с этим со...   Apr 19 2006, 06:01
- - volkanaft   http://www.caxapa.ru/echo/arm.html?id=53619...   Apr 19 2006, 09:22
- - DASM   мужики, вы правда зря Nucleus игнорируете.. неплох...   Apr 19 2006, 09:54
|- - alogvinov   Цитата(DASM @ Apr 19 2006, 13:54) мужики,...   Apr 20 2006, 04:30
|- - dxp   Цитата(zltigo @ Apr 21 2006, 13:20) -Безб...   Apr 21 2006, 06:54
|- - zltigo   Цитата(dxp @ Apr 21 2006, 09:54) Ну да, т...   Apr 21 2006, 07:25
|- - dxp   Цитата(zltigo @ Apr 21 2006, 14:25) Ну а ...   Apr 21 2006, 09:23
|- - zltigo   В какую-то параною скатывается разговор. Почему _...   Apr 21 2006, 15:45
- - Electrovoicer   так... а в uCOS-II какое количество задач поддержи...   Apr 19 2006, 10:18
- - vet   64 задачи. Да, должны быть разными; впрочем, лично...   Apr 19 2006, 10:54
- - jasper   Цитата64 задачи. Начиная с версии 2.80 255!...   Apr 19 2006, 11:54
|- - Andy Mozzhevilov   Цитата(jasper @ Apr 19 2006, 17:54) Цитат...   Apr 19 2006, 12:06
- - Electrovoicer   кстати а программу для мониторинга висящих задач/з...   Apr 19 2006, 12:53
|- - Evgeny_CD   Цитата(Electrovoicer @ Apr 19 2006, 16:53...   Apr 19 2006, 20:02
|- - Andy Mozzhevilov   Цитата(Evgeny_CD @ Apr 20 2006, 02:02) Ци...   Apr 20 2006, 02:52
- - DASM   FTP лежит, но думаю вот это оно http://www.segger....   Apr 20 2006, 03:20
- - Electrovoicer   спасибо! и все же что такое C-SPY?   Apr 20 2006, 04:52
- - jasper   Цитатаи все же что такое C-SPY? Так называется деб...   Apr 20 2006, 05:13
- - Evgeny_CD   Если я ничего не путаю, в uCOS 2.81 появилась реал...   Apr 20 2006, 09:10
- - DASM   нифигаааа не понял......   Apr 20 2006, 09:43
- - sensor_ua   В TNKernel и uCOS-II сохраняется регистр статуса и...   Apr 20 2006, 09:51
- - sensor_ua   Специально скачал последнюю FreeRTOS 4.0.1, а то р...   Apr 20 2006, 17:50
- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 20:50) са...   Apr 20 2006, 18:54
|- - sensor_ua   Цитата(zltigo @ Apr 20 2006, 21:54) Цитат...   Apr 20 2006, 19:04
- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 22:04) Ну...   Apr 20 2006, 19:28
|- - sensor_ua   Цитата(zltigo @ Apr 20 2006, 22:28) Цитат...   Apr 20 2006, 20:12
- - zltigo   Цитата(sensor_ua @ Apr 20 2006, 23:12) На...   Apr 20 2006, 20:51
|- - sensor_ua   Цитата(zltigo @ Apr 20 2006, 23:51) Цитат...   Apr 21 2006, 07:44
- - DASM   объясните неразумному, почему EnterCriticalSection...   Apr 21 2006, 05:46
|- - Andy Mozzhevilov   Цитата(DASM @ Apr 21 2006, 11:46) объясни...   Apr 21 2006, 05:58
- - DASM   а мне всегда казалось, что назначение критических ...   Apr 21 2006, 06:01
|- - Andy Mozzhevilov   Цитата(DASM @ Apr 21 2006, 12:01) а мне в...   Apr 21 2006, 06:26
- - vet   назначение критических секций - не допустить однов...   Apr 21 2006, 06:35
- - DASM   Andy , ты перепутал семафор с мьютексом. К тому же...   Apr 21 2006, 06:43
|- - zltigo   Цитата(DASM @ Apr 21 2006, 09:43) Дж.Рихт...   Apr 21 2006, 06:48
|- - Andy Mozzhevilov   Цитата(DASM @ Apr 21 2006, 12:43) Andy , ...   Apr 21 2006, 06:50
- - DASM   Извините за ошибки распознования текста finereader...   Apr 21 2006, 06:51
- - DASM   ДАЕШЬ 64-битную WIndows в embedded !!!   Apr 21 2006, 06:58
- - Electrovoicer   мда... я примерно одно слово понял из всего написа...   Apr 21 2006, 07:29
- - DASM   не всякий автомобилист знает, как устроена автомат...   Apr 21 2006, 07:31
- - zuy   А DASM вроде как прав получается, касательно крити...   Apr 21 2006, 07:35
|- - Andy Mozzhevilov   Цитата(zuy @ Apr 21 2006, 13:35) А DASM в...   Apr 21 2006, 08:13
- - DASM   ну так еще бы Рихтер был не прав..   Apr 21 2006, 07:37
- - vet   http://en.wikipedia.org/wiki/Critical_section   Apr 21 2006, 07:42
|- - DASM   Цитата(vet @ Apr 21 2006, 11:42) http://e...   Apr 21 2006, 07:45
|- - dxp   Цитата(DASM @ Apr 21 2006, 14:45) Цитата(...   Apr 21 2006, 09:40
- - vet   Продолжаю цитирование. A solution to the critical ...   Apr 21 2006, 07:57
- - DASM   Продолжу несогласие, Критическая секция защишает Р...   Apr 21 2006, 07:58
- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 10:44) Во...   Apr 21 2006, 08:02
- - vet   DASM Ресурс можно защищать и мьютексами, они для э...   Apr 21 2006, 08:04
- - DASM   тогда предлагаю прямо и говорить "я называю к...   Apr 21 2006, 08:13
- - sensor_ua   У меня железка с неким ногодрыганием, устроенным т...   Apr 21 2006, 08:20
|- - Andy Mozzhevilov   Цитата(sensor_ua @ Apr 21 2006, 14:20) Пр...   Apr 21 2006, 08:42
|- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 11:20) У ...   Apr 21 2006, 16:17
|- - sensor_ua   Цитата(zltigo @ Apr 21 2006, 19:17) Цитат...   Apr 21 2006, 16:23
|- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 19:23) Я ...   Apr 21 2006, 16:32
|- - sensor_ua   Цитата(zltigo @ Apr 21 2006, 19:32) Цитат...   Apr 21 2006, 17:05
|- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 20:05) Я ...   Apr 21 2006, 19:06
|- - sensor_ua   Цитата(zltigo @ Apr 21 2006, 22:06) Цитат...   Apr 21 2006, 19:45
|- - zltigo   Цитата(sensor_ua @ Apr 21 2006, 22:45) Жа...   Apr 21 2006, 20:19
- - sensor_ua   ЦитатаНу, это значит "не минус" smile.gi...   Apr 21 2006, 08:46
- - zuy   to: Andy Mozzhevilov Действительно реализация кри...   Apr 21 2006, 08:49
- - DASM   правильно, конкуренции нет, но КУСОК КОДА то испол...   Apr 21 2006, 08:56
- - zuy   Ааааа, все, понял к чему пример. Как раз к прерыва...   Apr 21 2006, 09:01
- - DASM   1) У всех этих экземпляров естественно один и тотж...   Apr 21 2006, 09:47
- - yuri_t   Дело все в том,что понятие критическая секция ( мо...   Apr 21 2006, 09:53
- - yuri_t   И еще: IMHO, пользователь любой ОS от Windows/Li...   Apr 21 2006, 12:22
|- - Evgeny_CD   Цитата(yuri_t @ Apr 21 2006, 16:22) IMHO,...   Apr 21 2006, 12:47
- - DASM   одобрям-с =)   Apr 21 2006, 12:27
- - sensor_ua   2 yuri_t о TNKernel в текущем релизе int tn_cpu_...   Apr 21 2006, 15:13
- - sensor_ua   2 zltigo У меня насчёт правильности запрещения/ра...   Apr 21 2006, 16:08
- - DASM   Читаю, нервно хихикаю :-) Надеюсь автор поста полу...   Apr 21 2006, 16:23
- - yuri_t   To sensor_ua ------------------- Учитывая Ваш и...   Apr 21 2006, 16:36
|- - sensor_ua   Цитата(yuri_t @ Apr 21 2006, 19:36) To se...   Apr 21 2006, 17:15
- - yuri_t   To sensor_ua ------------------- Ситуация, когда...   Apr 21 2006, 17:33
|- - sensor_ua   Цитата(yuri_t @ Apr 21 2006, 20:33) To se...   Apr 21 2006, 18:07
- - yuri_t   Когда я писал "Например Visual C/C++ 6 (Micro...   Apr 21 2006, 18:24
- - DASM   по-моему глюк с областью видимостью наблюдался у V...   Apr 21 2006, 18:28
- - yuri_t   To DASM ------------ Вы правы.   Apr 21 2006, 18:53
2 страниц V   1 2 >


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

 


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


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