|
Требуется совет по выбору RTOS, программист я хреновый |
|
|
|
Apr 18 2006, 19:16
|

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

|
Созревает проект на LPC213x. Сюдя по всему конечным автоматом на таймере обойтись не получится ввиду большого числа событий и источников прерываний. Это на мой профанский взгляд. Да и надо наконец научиться писать с использованием RTOS. В связи с чем просьба к общественности посоветовать ПРОСТУЮ RTOS. И не просто посоветовать, а подсказать где ее взять. В принципе и купить можно, но сначала хотелось бы пощупать. Главное чтобы софт был качественно задокументирован, а то в С++ я как свинья в апельсинах, разбираться с исходниками не буду да и не смогу наверное. Мне бы на пальцах показать, как создать тред и исполнить в нем мой код. Соответственно хотелось бы иметь готовый порт на мой процик. Вытесняющая она должна быть или невытесняющая, еще не понял. Чтобы это понять, желательно Ваши примеры задач, для которых то или иное больше подходит. Также просьба не отвечать вроде "да на хрена тебе ртос", "атмел sam7 рулит" и "ваще надо на асме писать"
С уважением, я
--------------------
"А я все помню, я был не пьяный!.." (С)Владимир Семенович
|
|
|
|
|
 |
Ответов
|
Apr 21 2006, 08:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
У меня железка с неким ногодрыганием, устроенным типа импровизированной шины. Как известно, GPIO сами не имеют в АРМ операций чтение-модификация-запись, дык ещё в железке есть выборки внешних устройств на "шине" через опять же GPIO. Если подвигать GPIO в прерывании, а оно может возникнуть когда двигались GPIO вне прерывания, чегой-то нужно сохранять. Т.е. либо в административном порядке запрещать использовать GPIO в прерывании, либо реализовать атомарность каким-либо способом. АРМ позволяет, например, выполнить SWI, можно просто запрещать прерывания на входе в критическую секцию, при выходе - разрешать, но тогда если при входе если были запрещены прерывания, при выходе они разрешатся... иначе нужно при входе не просто запрещать, а сохранять регистр статуса, затем запрещать прерывания, а при выходе всего-лишь восстанавливать что было. Можно вообще завести обработчик IRQ, в который вваливаться через VICSoftInt, а там творить чего угодно, пока не разрешили вложенные прерывания  ... Цитата(Andy Mozzhevilov @ Apr 21 2006, 11:13)  Цитата(zuy @ Apr 21 2006, 13:35)  А DASM вроде как прав получается, касательно критической секции. Если Таненбаума книгу "Современные ОС" посмотреть, так там написано, что Критическая секция служит для того, чтобы предотвратить одновременный доступ к обшим данным. Одно из требований, это то, что в критической области не могут находиться одновременно 2 процесса. Но для этого действительно не обязательно запрещать прерывания. Поток находящийся в крит.секции, может вытесниться, но если какой другой поток захочет в нее войти, он должен ожидать пока она освободится.
В общем, спор о терминах. В принципе можно называть критической секцией любую секцию, где предотвращается одновременный доступ к каким-либо ресурсам из разных процессов. Способ реализации может быть, как методом запрета прерываний, так и с организацией доступа через бинарный семафор (или можно применить модное слово мютекс  ) или какой-нибудь флаг. Причем иногда доступ запретом прерываний вообще может оказаться не приемлем, потому как ресурс, доступ к которому разделяется, может сам работать через прерывания, например захватили uart, передали строку символов, освободили uart. Понятно, что разделить доступ к такому ресурсу через запрет прерываний нельзя. Другое дело, когда надо сделать действие, достаточно короткое и быстрое, но требующее также гарантий ограничения доступа к этом ресурсу. Например, работа со связанными списками. Вставка элемента списка в цепочку должна быть сделана в критической секции. Но пользование в этом случае системных сервисов ОС (типа мютексов) - нецелесообразно, потому как накладные расходы возрастут раз в 100 по сравнению с методом разрешения/запрещения прерываний. И совсем другое дело, когда говорится о критических секциях, используемых в самой ОС, то есть когда сервисы ОС прописываются. Здесь термин "критическая секция" как раз всегда означает запрещение прерываний. А речь как раз о них и была (выше по теме). У меня терминология (моя локальная) устоялась так, что критической секцией я называю секцию, где запрещены прерывания, и не важно, используется в проекте ОС или нет. Цитата(sensor_ua @ Apr 21 2006, 13:44)  Пока пороюсь поищу что такое #+0xC0, а то "чукча не читатель";))) Может подскажете, где? А то ARM7TDMI Data Sheet (ARM DDI 0029E) не помогает... #0xC0 маска для запрета IRQ и FIQ прерываний Маска 0x80 для регистра CPSR - это запрет IRQ , а 0x40 - для запрета FIQ. Простите, не указал точно - мне непонятно только "#+"
--------------------
aka Vit
|
|
|
|
|
Apr 21 2006, 16:17
|

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

|
Цитата(sensor_ua @ Apr 21 2006, 11:20)  У меня железка с неким ногодрыганием, устроенным типа импровизированной шины. Как известно, GPIO сами не имеют в АРМ операций чтение-модификация-запись, дык ещё в железке есть выборки внешних устройств на "шине" через опять же GPIO. Если подвигать GPIO в прерывании, а оно может возникнуть когда двигались GPIO вне прерывания, чегой-то нужно сохранять. Т.е. либо в административном порядке запрещать использовать GPIO в прерывании, либо реализовать атомарность каким-либо способом. АРМ позволяет, например, выполнить SWI, можно просто запрещать прерывания на входе в критическую секцию, при выходе - разрешать, но тогда если при входе если были запрещены прерывания, при выходе они разрешатся... иначе нужно при входе не просто запрещать, а сохранять регистр статуса, затем запрещать прерывания, а при выходе всего-лишь восстанавливать что было. Можно вообще завести обработчик IRQ, в который вваливаться через VICSoftInt, а там творить чего угодно, пока не разрешили вложенные прерывания  ... Я не понял :-( Вообще ничего из вышеизложенного не понял. Если речь идет о том, что Вы имеете некоторую процедуру,которая для обеспечения ее непрерывности обрамлена critical и по этой причине ее нельзя вызывать из обработчика прерывания, то 0. Нужно делать вещи максимально близкие к естественным. 1. Делается процедура без запретов. 2. Для работы в прерывании вызывается прямо или через прямую макроподстановку 3. Для прочего использования через макрос-обертку с __disable/enable. Если обработчики прерываний в отдельном файле, то макроимена могут быть вообще одинаковыми. В результате начисто отпадают все ненужные навороты как в виде 'счетчиков', так и ввиде 'сохранений', заодно не надо вникать в реализацию critical в каждой конкретной операционке. Все выглядит (живой пример) примерно так: Код //----------------------------------------------------------- // Read/Write SLIC Registers with CLOSED interrupts void wr_sreg_int( BYTE channel, BYTE reg, BYTE value ); ...... //----------------------------------------------------------- // Read/Write SLIC Registers #define wr_sreg( x, y, z ) \ { __disable_interrupt(); \ wr_sreg_int( x, y, z ); \ __enable_interrupt(); }
...... Если всенеприменнейше хотите critical, то можете добавить свой critical для обработчиков прерываний, единственной функцией которого будет наращивание/уменьшение 'счетчика'. Цитата(sensor_ua @ Apr 21 2006, 19:08)  2 zltigo
У меня насчёт правильности запрещения/разрешения прерываний вопрос к Вам остался. Представьте себе, что пишет подпрограмму с критической секцией не Вы, а коллега. Вы эту подпрограмму интегрируете в свой проект. Ответьте, пожалуйста, на каком основании Ваш коллега имеет право разрешать прерывания (при выходе из критической секции), если он не узнаЁт при запрещении (при входе в критическую секцию), были ли они (прерывания) разрешены? Так они и не будут разрешены если Вы вызвали его из критической секции и соответственно счетчик на входе в подпрограмму колеги уже не будет 0. Ежели коллега, или Вы пожелает в _прикладной_ программе воспользоваться прямым запретом/разрешением вместо critical , то, как здесь уже было замечено, надо наказывать, ибо против лома нет приема.
Сообщение отредактировал zltigo - Apr 21 2006, 16:26
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 21 2006, 16:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата(zltigo @ Apr 21 2006, 19:17)  Цитата(sensor_ua @ Apr 21 2006, 11:20)  У меня железка с неким ногодрыганием, устроенным типа импровизированной шины. Как известно, GPIO сами не имеют в АРМ операций чтение-модификация-запись, дык ещё в железке есть выборки внешних устройств на "шине" через опять же GPIO. Если подвигать GPIO в прерывании, а оно может возникнуть когда двигались GPIO вне прерывания, чегой-то нужно сохранять. Т.е. либо в административном порядке запрещать использовать GPIO в прерывании, либо реализовать атомарность каким-либо способом. АРМ позволяет, например, выполнить SWI, можно просто запрещать прерывания на входе в критическую секцию, при выходе - разрешать, но тогда если при входе если были запрещены прерывания, при выходе они разрешатся... иначе нужно при входе не просто запрещать, а сохранять регистр статуса, затем запрещать прерывания, а при выходе всего-лишь восстанавливать что было. Можно вообще завести обработчик IRQ, в который вваливаться через VICSoftInt, а там творить чего угодно, пока не разрешили вложенные прерывания  ... Я не понял :-( Вообще ничего из вышеизложенного не понял. Если речь идет о том, что Вы имеете некоторую процедуру,которая для обеспечения ее непрерывности обрамлена critical и по этой причине ее нельзя вызывать из обработчика прерывания, то 0. Нужно делать вещи максимально близкие к естественным. 1. Делается процедура без запретов. 2. Для работы в прерывании вызывается прямо или через прямую макроподстановку 3. Для прочего использования через макрос-обертку с __disable/enable. Если обработчики прерываний в отдельном файле, то макроимена могут быть вообще одинаковыми. В результате начисто отпадают все ненужные навороты как в виде 'счетчиков', так и ввиде 'сохранений', заодно не надо вникать в реализацию critical в каждой конкретной операционке. Все выглядит (живой пример) примерно так: Код //----------------------------------------------------------- // Read/Write SLIC Registers with CLOSED interrupts void wr_sreg_int( BYTE channel, BYTE reg, BYTE value ); ...... //----------------------------------------------------------- // Read/Write SLIC Registers #define wr_sreg( x, y, z ) \ { __disable_interrupt(); \ wr_sreg_int( x, y, z ); \ __enable_interrupt(); }
...... Цитата(sensor_ua @ Apr 21 2006, 19:08)  2 zltigo
У меня насчёт правильности запрещения/разрешения прерываний вопрос к Вам остался. Представьте себе, что пишет подпрограмму с критической секцией не Вы, а коллега. Вы эту подпрограмму интегрируете в свой проект. Ответьте, пожалуйста, на каком основании Ваш коллега имеет право разрешать прерывания (при выходе из критической секции), если он не узнаЁт при запрещении (при входе в критическую секцию), были ли они (прерывания) разрешены? Так они и не будут разрешены если Вы вызвали его из критической секции и соответственно счетчик на входе в подпрограмму колеги уже не будет 0. Ежели коллега, или Вы пожелает в _прикладной_ программе воспользоваться прямым запретом/разрешением вместо critical , то, как здесь уже было замечено, надо наказывать, ибо против лома нет приема. Я о варианте, когда в основной программе прерывания в какой-то прекрасный момент выключены не в критической секции. Как быть с разрешением в подпрограмме коллеги?
--------------------
aka Vit
|
|
|
|
|
Apr 21 2006, 17:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата(zltigo @ Apr 21 2006, 19:32)  Цитата(sensor_ua @ Apr 21 2006, 19:23)  Я о варианте, когда в основной программе прерывания в какой-то прекрасный момент выключены не в критической секции. Как быть с разрешением в подпрограмме коллеги?
Мне казалось, что я ответил. У меня, тогда больше нет слов для обьяснения :-(. Попробуйте перечитать написанное в моем предыдущем посте. ИМХО, Вы приняли как за оскорбление мое мнение об критической секции в конкретной ОС - FreeRTOS и, рассказав о недостатках реализации в другой ОС- TNKernel (а точнее других, потому как ассемблерная часть в uCOS-II и TNKernel совпадает, вероятно и в других ОС) пытаетесь доказать, что сам механизм выбран неверно, а я от Вас пытаюсь получить четкие пояснения преимуществ/недостатков механизма, который в коммерческой ОС uCOS-II не применяется, хотя написано, что о нем хорошо знают. Я не понимаю как можно не проверив, было ли разрешено прерывание перед входом в критическую секцию, после окончания таковой его взводить. Вы же мне о Вашем мнении об разных ОС и макрообертках
--------------------
aka Vit
|
|
|
|
Сообщений в этой теме
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 sensor_ua А я решил в попытке решения подобной задачи (LPC21... Apr 19 2006, 10:14 zltigo Цитата(sensor_ua @ Apr 19 2006, 13:14) А ... Apr 19 2006, 18:27  sensor_ua Цитата(zltigo @ Apr 19 2006, 21:27) Цитат... Apr 20 2006, 09:36   zltigo Цитата(sensor_ua @ Apr 20 2006, 12:36) В ... Apr 20 2006, 16:44    dxp Цитата(zltigo @ Apr 20 2006, 23:44) Тепер... Apr 21 2006, 05:42     zltigo Цитата(dxp @ Apr 21 2006, 08:42) А зачем ... Apr 21 2006, 06:20      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 Andy Mozzhevilov Цитата(sensor_ua @ Apr 21 2006, 14:20) Пр... Apr 21 2006, 08:42     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 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|