sheduler and micro-sheduler problem

Nov 11, 2005 35 Replies

Здравствуйте



Все мы, программируя embedded устройства, рано или поздно сталкиваемся с разными инструментальными средствами (шедулерами), которые позволяют организовать многозадачность.



Это и горячо любимый в народе UCOS от товарища Лабросса, и другие похожие средства. Чаще всего они выпускаются в виде библиотек.



Эти шедулеры среди прочего предоставляют сервис по созданию задач и средства для межзадачной синхронизации/коммуникации. Чаще всего средства для межзадачной синхронизации называются семафорами. Эти же семафоры используются и для синхронизации задач с внешними событиями (прерываниями).



Работая с некоторыми из таких шедулеров я постоянно натыкался на следующую проблему: задача может ждать семафора ( т.е.события), но не может ждать двух и более семафоров (событий), объединеных какой-либо логической функцией.



Приведу пример: - задача ждет приема по какому-либо каналу связи. Если приема в течении какого-то времени нет, задача должна выйти из ожидания приема и заняться чем-то другим. Обычно такой алгоритм реализуется с помощью спецсемафора с таймаутом. В то время, как логичный путь решения проблемы - дать возможность задаче ждать события приема ИЛИ события срабатывания таймера.



Более общий случай - ожидания трех событий, объединенных по ИЛИ. Например, ИЛИ нажатие кнопки, ИЛИ приход команды по сети, ИЛИ прерывание по таймеру.



В тех средствах, с которыми я работал, не было возможности ожидать несколько семафоров, связанных произвольной логической функцией. Приходилось на уровне прерывания самому объединять события и только потом выставлять один обобщенный семафор.



Вопросы:


  1. Знает ли кто-нибудь, как правильно надо построить работу при необходимости синхронизовать задачу не с одним, а с несколькими семафорами?


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

  2. В виндах и юниксе тоже нет средств для объединения нескольких событий на системном уровне. Может быть я хочу странного и эта проблема решается как-то по-другому?

Спасибо Basil.


Fri Nov 11 2005 14:04, Basil Burtakov wrote to All:

BB> âÏÌÅÅ ÏÂÝÉÊ ÓÌÕÞÁÊ - ÏÖÉÄÁÎÉÑ ÔÒÅÈ ÓÏÂÙÔÉÊ, ÏÂßÅÄÉÎÅÎÎÙÈ ÐÏ éìé. BB> HÁÐÒÉÍÅÒ, éìé ÎÁÖÁÔÉÅ ËÎÏÐËÉ, éìé ÐÒÉÈÏÄ ËÏÍÁÎÄÙ ÐÏ ÓÅÔÉ, éìé ÐÒÅÒÙ×ÁÎÉÅ BB> ÐÏ ÔÁÊÍÅÒÕ.

á ÆÌÁÇÉ × uCOS - ÜÔÏ ÎÅ ÔÏ, ÞÔÏ ÔÅÂÅ ÎÕÖÎÏ?

icq 44341220

BB>> Более общий случай - ожидания трех событий, объединенных по ИЛИ. BB>> Hапример, ИЛИ нажатие кнопки, ИЛИ приход команды по сети, ИЛИ BB>> прерывание по таймеру.

AM> А флаги в uCOS - это не то, что тебе нужно?

AM> icq 44341220

Что за флаги? Последняя версия uCOS, которую я использовал это 2.04. В ней были sempahores, message mailboxes and message queues и еще мьютексы. А что такое флаги? Это что-то новое в uCOS-строении?

Fri Nov 11 2005 14:52, Basil Burtakov wrote to Andy Mozzhevilov:

AM>> á ÆÌÁÇÉ × uCOS - ÜÔÏ ÎÅ ÔÏ, ÞÔÏ ÔÅÂÅ ÎÕÖÎÏ?

BB> þÔÏ ÚÁ ÆÌÁÇÉ? ðÏÓÌÅÄÎÑÑ ×ÅÒÓÉÑ uCOS, ËÏÔÏÒÕÀ Ñ ÉÓÐÏÌØÚÏ×ÁÌ ÜÔÏ 2.04. ÷ BB> ÎÅÊ ÂÙÌÉ sempahores, message mailboxes and message queues É ÅÝÅ ÍØÀÔÅËÓÙ. BB> á ÞÔÏ ÔÁËÏÅ ÆÌÁÇÉ? üÔÏ ÞÔÏ-ÔÏ ÎÏ×ÏÅ × uCOS-ÓÔÒÏÅÎÉÉ?

ÎÁÞÉÎÁÑ Ó ×ÅÒÓÉÉ 2.52 × ucos ÅÓÔØ ÔÁËÏÊ ÓÅÒ×ÉÓ - ÆÌÁÇÉ
formatting link
icq 44341220

Fri Nov 11 2005 14:04, Basil Burtakov wrote to All:

BB> Все мы, программируя embedded устройства, рано или поздно BB> сталкиваемся с разными инструментальными средствами (шедулерами),

Шедулер --> планировщик.

BB> 2. Есть ли какие-нибудь ########, которые позволяют ждать нескольких BB> событий, связанных произвольной логической функцией?

Произвольной? А на кой это надо?

BB> 3. В виндах и юниксе тоже нет средств для объединения нескольких событий BB> на системном уровне. Может быть я хочу странного и эта проблема BB> решается как-то по-другому?

man select || WaitForMultipleObjects

Hello, Basil! You wrote to All on Fri, 11 Nov 2005 12:04:40 +0000 (UTC):

BB> 1. úÎÁÅÔ ÌÉ ËÔÏ-ÎÉÂÕÄØ, ËÁË ÐÒÁ×ÉÌØÎÏ ÎÁÄÏ ÐÏÓÔÒÏÉÔØ ÒÁÂÏÔÕ ÐÒÉ ÎÅÏÂÈÏÄÉÍÏÓÔÉ BB> ÓÉÎÈÒÏÎÉÚÏ×ÁÔØ ÚÁÄÁÞÕ ÎÅ Ó ÏÄÎÉÍ, Á Ó ÎÅÓËÏÌØËÉÍÉ ÓÅÍÁÆÏÒÁÍÉ?

äÁ, ÄÁ, Ñ ÚÎÁÀ :-) üÔÏ ÍÎÏÇÏËÒÁÔÎÏ ÏÐÉÓÁÎÁÑ Õ ËÌÁÓÓÉËÏ× ÐÒÏÂÌÅÍÁ - ÚÁÄÁÞÁÍ á É ÷ ÔÒÅÂÕÀÔÓÑ ÒÅÓÕÒÓÙ 1 É 2. úÁÄÁÞÁ á ÚÁÈ×ÁÔÙ×ÁÅÔ ÒÅÓÕÒÓ 1 É ÖÄÅÔ ÏÓ×ÏÂÏÖÄÅÎÉÑ ÒÅÓÕÒÓÁ 2, ÚÁÄÁÞÁ ÷ ÚÁÈ×ÁÔÙ×ÁÅÔ ÒÅÓÕÒÓ 2 É ÖÄÅÔ ÏÓ×ÏÂÏÖÄÅÎÉÑ ÒÅÓÕÒÓÁ 1 - ËÌÁÓÓÉÞÅÓËÉÊ deadlock. ðÏÜÔÏÍÕ ÔÕÔ ÄÅÌÏ ÎÅ × ÓÒÅÄÓÔ×ÁÈ ïó ÉÌÉ "ÛÅÄÕÌÅÒÁ", Á × ÐÒÁ×ÉÌØÎÏÍ ÎÁÚÎÁÞÅÎÉÉ ÓÅÍÁÆÏÒÏ× ÒÅÓÕÒÓÁÍ. úÁÄÁÞÁ, ÚÁÈ×ÁÔÉ× ÏÄÉÎ ÒÅÓÕÒÓ, ÎÅ ÄÏÌÖÎÁ ÖÄÁÔØ ÏÓ×ÏÂÏÖÄÅÎÉÑ ÄÒÕÇÏÇÏ - ÎÁÄÏ ÏÔÒÁÂÏÔÁÔØ ÜÔÏÔ ÒÅÓÕÒÓ, ÏÓ×ÏÂÏÄÉÔØ ÅÇÏ É ÔÏÌØËÏ ÐÏÓÌÅ ÜÔÏÇÏ ÖÄÁÔØ ÏÓ×ÏÂÏÖÄÅÎÉÑ ÄÒÕÇÏÇÏ. åÓÌÉ ÖÅ ÔÅÂÅ ×Ï ÞÔÏ ÂÙ ÔÏ ÎÉ ÓÔÁÌÏ ÎÅÏÂÈÏÄÉÍÙ ÓÒÁÚÕ Ä×Á ÒÅÓÕÒÓÁ, ÔÏ ÄÏÌÖÅÎ ÂÙÔØ ÏÂßÑ×ÌÅÎ ÓÅÍÁÆÏÒ, ÓÉÄÅÔÅÌØÓÔ×ÕÀÝÉÊ Ï ÚÁÎÑÔÏÓÔÉ ÓÒÁÚÕ ÏÂÏÉÈ ÒÅÓÕÒÓÏ×, É ÒÁÂÏÔÁÔØ ÞÅÒÅÚ ÎÅÇÏ. ëÏÎÅÞÎÏ, ÍÏÖÅÔ ÂÙÔØ ÎÁÐÉÓÁÎÁ ÐÒÏÇÒÁÍÁ Ó ÎÁÒÕÛÅÎÉÅÍ ÜÔÏÇÏ ÐÒÁ×ÉÌÁ, ÎÏ ÜÔÏ ÐÏÔÅÎÃÉÁÌØÎÙÅ ÇÒÁÂÌÉ, É ÖÄÁÔØ ÐÏÄÄÅÒÖËÉ ïó ÔÁËÏÇÏ ÒÅÖÉÍÁ, ÍÎÅ ËÁÖÅÔÓÑ, ÎÅ ÓÔÏÉÔ. ôÁËÉÅ ÓÉÔÕÁÃÉÉ ÒÁÚÒÕÌÉ×ÁÀÔÓÑ ÔÏÌØËÏ ×ÒÕÞÎÕÀ, ÐÒÉÍÅÎÉÔÅÌØÎÏ Ë ËÏÎËÒÅÔÎÏÊ ÚÁÄÁÞÅ. åÓÌÉ ÓÏ×ÓÅÍ ÎÉËÁË ÎÅ ÒÁÚÒÕÌÉ×ÁÅÔÓÑ (ÔÁËÏÅ ×ÏÚÍÏÖÎÏ × ÏÞÅÎØ ÓÌÏÖÎÙÈ ÓÉÓÔÅÍÁÈ) - ÍÏÖÎÏ ÏÇÒÁÎÉÞÉÔØ ×ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÒÅÓÕÒÓÁ, ÔÁË ÓÄÅÌÁÎÏ, ÎÁÐÒÉÍÅÒ, × Win - Ô.Î. "ÓÐÉÎ-ÂÌÏËÉÒÏ×ËÁ" ÍÏÖÅÔ ÂÙÔØ ÎÅ ÂÏÌÅÅ 25 ÍÓ, ÉÎÁÞÅ ÓÎÉÍÁÅÔÓÑ. îÏ ÏÐÙÔ ÐÏËÁÚÙ×ÁÅÔ, ÞÔÏ ÚÌÏÕÐÏÔÒÅÂÌÅÎÉÅ ÐÏÄÏÂÎÙÍ ÓÐÏÓÏÂÁÍÉ ÒÁÚÒÅÛÅÎÉÑ ËÏÎÆÌÉËÔÏ× ÒÁÎÏ ÉÌÉ ÐÏÚÄÎÏ ×ÓÅ ÒÁ×ÎÏ ÐÒÉ×ÏÄÉÔ Ë BSOD :-)

BB> 3. ÷ ×ÉÎÄÁÈ É ÀÎÉËÓÅ ÔÏÖÅ ÎÅÔ ÓÒÅÄÓÔ× ÄÌÑ ÏÂßÅÄÉÎÅÎÉÑ ÎÅÓËÏÌØËÉÈ ÓÏÂÙÔÉÊ BB> ÎÁ ÓÉÓÔÅÍÎÏÍ ÕÒÏ×ÎÅ. íÏÖÅÔ ÂÙÔØ Ñ ÈÏÞÕ ÓÔÒÁÎÎÏÇÏ É ÜÔÁ ÐÒÏÂÌÅÍÁ BB> ÒÅÛÁÅÔÓÑ ËÁË-ÔÏ ÐÏ-ÄÒÕÇÏÍÕ? éÍÅÎÎÏ!

With best regards, Sergey Zabelin. E-mail: snipped-for-privacy@telemak.ru

Sat Nov 12 2005 01:15, Sergey Zabelin wrote to Basil Burtakov:

SZ> úÁÄÁÞÁ á ÚÁÈ×ÁÔÙ×ÁÅÔ ÒÅÓÕÒÓ 1 É SZ> ÖÄÅÔ ÏÓ×ÏÂÏÖÄÅÎÉÑ ÒÅÓÕÒÓÁ 2, ÚÁÄÁÞÁ ÷ ÚÁÈ×ÁÔÙ×ÁÅÔ ÒÅÓÕÒÓ 2 É ÖÄÅÔ SZ> ÏÓ×ÏÂÏÖÄÅÎÉÑ ÒÅÓÕÒÓÁ 1 - ËÌÁÓÓÉÞÅÓËÉÊ deadlock. SZ> ðÏÜÔÏÍÕ ÔÕÔ ÄÅÌÏ ÎÅ × ÓÒÅÄÓÔ×ÁÈ ïó ÉÌÉ "ÛÅÄÕÌÅÒÁ", Á × ÐÒÁ×ÉÌØÎÏÍ SZ> ÎÁÚÎÁÞÅÎÉÉ ÓÅÍÁÆÏÒÏ× ÒÅÓÕÒÓÁÍ. SZ> ôÁËÉÅ ÓÉÔÕÁÃÉÉ ÒÁÚÒÕÌÉ×ÁÀÔÓÑ ÔÏÌØËÏ ×ÒÕÞÎÕÀ, SZ> ÐÒÉÍÅÎÉÔÅÌØÎÏ Ë ËÏÎËÒÅÔÎÏÊ ÚÁÄÁÞÅ.

òÅÓÕÒÓÙ ÄÅÌÁÀÔÓÑ × ×ÉÄÅ ÓÅÒ×ÅÒÏ×. úÁÄÁÞÉ ×ÓÔÁÀÔ × ÏÞÅÒÅÄØ ÚÁÐÒÏÓÏ× Ë ÓÅÒ×ÅÒÁÍ. ÷ÓÅ ÕÓÐÅÛÎÏ ÒÁÚÒÕÌÉ×ÁÅÔÓÑ.

VLV

"úÁÞÅÍ ÓÔÁÄÁÍ ÄÁÒÙ Ó×ÏÂÏÄÙ? éÈ ÎÁÄÏ ÒÅÚÁÔØ ÉÌÉ ÓÔÒÉÞØ" (ðÕÛËÉÎ)

Здравствуйте, Уважаемый Basil!

Fri Nov 11 2005 14:04, Basil Burtakov wrote to All:

BB> Работая с некоторыми из таких шедулеров я BB> постоянно натыкался на следующую проблему: задача может ждать семафора BB> ( т.е.события), но не может ждать двух и более семафоров (событий), BB> объединеных какой-либо логической функцией.

Почему-то сразу думается, что ожидание трех семафоров означает неправильное разбиение общей задачи на параллельные процессы. Может, разбить помельче, чтоб в каждой задаче оказалось по одному месту, где она ожидает Trigg? Hо, если Вы считаете такое невозможным, то обращаю Ваше внимание на процедуры из UCOS, которые работают без ожидания внешнего события. Зато возвращают результат опроса каждого конкретного семафора. Вполне можно разобраться, какой из многих сработал.

Всего Вам Хорошего Ольга

Sat Nov 12 2005 20:15, Olga Nonova wrote to Basil Burtakov:

BB>> ÏÂßÅÄÉÎÅÎÙÈ ËÁËÏÊ-ÌÉÂÏ ÌÏÇÉÞÅÓËÏÊ ÆÕÎËÃÉÅÊ.

ON> ðÏÞÅÍÕ-ÔÏ ÓÒÁÚÕ ÄÕÍÁÅÔÓÑ, ÞÔÏ ÏÖÉÄÁÎÉÅ ÔÒÅÈ ÓÅÍÁÆÏÒÏ× ÏÚÎÁÞÁÅÔ ON> ÎÅÐÒÁ×ÉÌØÎÏÅ ÒÁÚÂÉÅÎÉÅ ÏÂÝÅÊ ÚÁÄÁÞÉ ÎÁ ÐÁÒÁÌÌÅÌØÎÙÅ ÐÒÏÃÅÓÓÙ. íÏÖÅÔ, ON> ÒÁÚÂÉÔØ ÐÏÍÅÌØÞÅ, ÞÔÏÂ × ËÁÖÄÏÊ ÚÁÄÁÞÅ ÏËÁÚÁÌÏÓØ ÐÏ ÏÄÎÏÍÕ ÍÅÓÔÕ, ÇÄÅ ÏÎÁ ON> ÏÖÉÄÁÅÔ Trigg? HÏ, ÅÓÌÉ ÷Ù ÓÞÉÔÁÅÔÅ ÔÁËÏÅ ÎÅ×ÏÚÍÏÖÎÙÍ, ÔÏ ÏÂÒÁÝÁÀ ÷ÁÛÅ ON> ×ÎÉÍÁÎÉÅ ÎÁ ÐÒÏÃÅÄÕÒÙ ÉÚ UCOS, ËÏÔÏÒÙÅ ÒÁÂÏÔÁÀÔ ÂÅÚ ÏÖÉÄÁÎÉÑ ×ÎÅÛÎÅÇÏ ON> ÓÏÂÙÔÉÑ. úÁÔÏ ×ÏÚ×ÒÁÝÁÀÔ ÒÅÚÕÌØÔÁÔ ÏÐÒÏÓÁ ËÁÖÄÏÇÏ ËÏÎËÒÅÔÎÏÇÏ ÓÅÍÁÆÏÒÁ. ON> ÷ÐÏÌÎÅ ÍÏÖÎÏ ÒÁÚÏÂÒÁÔØÓÑ, ËÁËÏÊ ÉÚ ÍÎÏÇÉÈ ÓÒÁÂÏÔÁÌ.

æÌÁÇÉ × uCOS-II ÓÐÁÓÕÔ ÍÁÔØ ÒÕÓÓËÏÊ ÄÅÍÏËÒÁÔÉÉ.

wbr, Andy (2:5080/76.6)

ðÒÉ×ÅÔ Basil!

11 Nov 05 15:04, Basil Burtakov ÐÉÓÁÌ All:

BB> âÏÌÅÅ ÏÂÝÉÊ ÓÌÕÞÁÊ - ÏÖÉÄÁÎÉÑ ÔÒÅÈ ÓÏÂÙÔÉÊ, ÏÂßÅÄÉÎÅÎÎÙÈ ÐÏ éìé. BB> HÁÐÒÉÍÅÒ, éìé ÎÁÖÁÔÉÅ ËÎÏÐËÉ, éìé ÐÒÉÈÏÄ ËÏÍÁÎÄÙ ÐÏ ÓÅÔÉ, éìé BB> ÐÒÅÒÙ×ÁÎÉÅ ÐÏ ÔÁÊÍÅÒÕ.

BB> ÷ ÔÅÈ ÓÒÅÄÓÔ×ÁÈ, Ó ËÏÔÏÒÙÍÉ Ñ ÒÁÂÏÔÁÌ, ÎÅ ÂÙÌÏ ×ÏÚÍÏÖÎÏÓÔÉ ÏÖÉÄÁÔØ BB> ÎÅÓËÏÌØËÏ ÓÅÍÁÆÏÒÏ×, Ó×ÑÚÁÎÎÙÈ ÐÒÏÉÚ×ÏÌØÎÏÊ ÌÏÇÉÞÅÓËÏÊ ÆÕÎËÃÉÅÊ. BB> ðÒÉÈÏÄÉÌÏÓØ ÎÁ ÕÒÏ×ÎÅ ÐÒÅÒÙ×ÁÎÉÑ ÓÁÍÏÍÕ ÏÂßÅÄÉÎÑÔØ ÓÏÂÙÔÉÑ É ÔÏÌØËÏ BB> ÐÏÔÏÍ ×ÙÓÔÁ×ÌÑÔØ ÏÄÉÎ ÏÂÏÂÝÅÎÎÙÊ ÓÅÍÁÆÏÒ.

÷Ï-ÐÅÒ×ÙÈ, × ÕÐÏÍÑÎÕÔÏÍ ÔÏÂÏÊ uCOS ÅÓÔØ ÆÌÁÇÉ. úÁÞÁÄÁ ÍÏÖÅÔ ÖÄÁÔØ ÕÓÔÁÎÏ×ËÉ ÉÌÉ ÓÂÒÏÓÁ ÏÄÎÏÇÏ ÉÚ ÎÅÓËÏÌØËÉÈ ÉÌÉ ×ÓÅÈ ÕËÁÚÁÎÎÙÈ ÔÏÂÏÊ ÆÌÁÇÏ×. ëÁÖÄÏÅ ÖÅ ÓÏÂÙÔÉÅ ÄÏÌÖÎÏ ÌÉÛØ ÕÓÔÁÎÏ×ÉÔØ ÉÌÉ ÓÂÒÏÓÉÔØ Ó×ÏÊ ÆÌÁÇ. ÷Ï-×ÔÏÒÙÈ, ÅÓÔØ ÔÁËÁÑ ×ÅÝØ ËÁË ÏÞÅÒÅÄÉ. ïÎÉ ÐÏÚ×ÏÌÑÀÔ ÓÔÒÏÉÔØ ÂÅÓËÏÎÅÞÎÏ ÓÌÏÖÎÙÅ ÕÐÒÁ×ÌÑÅÍÙÅ ÓÏÂÙÔÉÑÍÉ ÓÉÓÔÅÍÙ, Ô.Ë. ÏÞÅÒÅÄÉ ÂÅÚÒÁÚÌÉÞÎÏ, ËÁËÏÇÏ ÒÏÄÁ ÄÁÎÎÙÅ ÞÅÒÅÚ ÎÅÅ ÐÅÒÅÄÁÀÔÓÑ:

// ÁÂÓÔÒÁËÔÎÙÊ ËÌÁÓÓ ÓÏÂÙÔÉÑ class TEvent { public: TEvent(void) {} virtual ~TEvent(void) {} virtual EvType type(void) const = 0; virtual EvData * data(void) const = 0; virtual const char *as_string(void) const = 0; };

// ÏÖÉÄÁÅÍ ËÁËÏÇÏ-ÔÏ ÓÏÂÙÔÉÑ TEvent *ev = OSQPend(ev_queue, timeout); // üÔÉ ÔÒÉ ÓÔÒÏÞËÉ if(ev == NULL) // ÉÍÅÅÔ ÓÍÙÓÌ ÏÆÏÒÍÉÔØ ev = new TEventTimeout; // ËÁË ÏÔÄÅÌØÎÙÊ ×ÙÚÏ×

syslog(LOG_DEBUG, "got event: %s", ev->as_string() );

switch( ev->type() ) { ...... }

BB> ÷ÏÐÒÏÓÙ:

BB> 1. úÎÁÅÔ ÌÉ ËÔÏ-ÎÉÂÕÄØ, ËÁË ÐÒÁ×ÉÌØÎÏ ÎÁÄÏ ÐÏÓÔÒÏÉÔØ ÒÁÂÏÔÕ ÐÒÉ BB> ÎÅÏÂÈÏÄÉÍÏÓÔÉ ÓÉÎÈÒÏÎÉÚÏ×ÁÔØ ÚÁÄÁÞÕ ÎÅ Ó ÏÄÎÉÍ, Á Ó ÎÅÓËÏÌØËÉÍÉ BB> ÓÅÍÁÆÏÒÁÍÉ?

á ÎÅÔ ÅÄÉÎÓÔ×ÅÎÎÏ ÐÒÁ×ÉÌØÎÏÇÏ ÓÐÏÓÏÂÁ.

BB> 3. ÷ ×ÉÎÄÁÈ É ÀÎÉËÓÅ ÔÏÖÅ ÎÅÔ ÓÒÅÄÓÔ× ÄÌÑ ÏÂßÅÄÉÎÅÎÉÑ ÎÅÓËÏÌØËÉÈ BB> ÓÏÂÙÔÉÊ ÎÁ ÓÉÓÔÅÍÎÏÍ ÕÒÏ×ÎÅ. íÏÖÅÔ ÂÙÔØ Ñ ÈÏÞÕ ÓÔÒÁÎÎÏÇÏ É ÜÔÁ BB> ÐÒÏÂÌÅÍÁ ÒÅÛÁÅÔÓÑ ËÁË-ÔÏ ÐÏ-ÄÒÕÇÏÍÕ?

ëÒÏÍÅ ÓÅÍÁÆÏÒÏ× É ÏÞÅÒÅÄÅÊ ÅÓÔØ select(2), ÅÓÔØ sigaction(2)... ÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... úÁÐÁÄÎÏ-ÕÒÁÌØÓËÏÅ ÒÅÇÉÏÎÁÌØÎÏÅ ÏÂÝÅÓÔ×Ï ÄÏÂÒÏ×ÏÌØÎÙÈ ÕÞÒÅÄÉÔÅÌÅÊ.

Здравствуйте, Уважаемый Andy!

Sun Nov 13 2005 09:29, Andy Mozzhevilov wrote to Olga Nonova:

AM> Флаги в uCOS-II спасут мать русской демократии.

А просто в uCOS, без "-II" ? Человек по-моему спрашивал про первую редакцию uCOS. Кроме того, опрос флагов, по-нашему наверное "полинг", в цикле такого опроса все равно придется вставить ожидание чего-то из арсенала uCOS, иначе такой полинг флагов наглухо заблокирует другие задачи.

Всего Вам Хорошего Ольга

Mon Nov 14 2005 09:37, Olga Nonova wrote to Andy Mozzhevilov:

ON> From: "Olga Nonova" snipped-for-privacy@starline.ee

ON> úÄÒÁ×ÓÔ×ÕÊÔÅ, õ×ÁÖÁÅÍÙÊ Andy!

ON> Sun Nov 13 2005 09:29, Andy Mozzhevilov wrote to Olga Nonova:

AM>> æÌÁÇÉ × uCOS-II ÓÐÁÓÕÔ ÍÁÔØ ÒÕÓÓËÏÊ ÄÅÍÏËÒÁÔÉÉ.

ON> á ÐÒÏÓÔÏ × uCOS, ÂÅÚ "-II" ? þÅÌÏ×ÅË ÐÏ-ÍÏÅÍÕ ÓÐÒÁÛÉ×ÁÌ ÐÒÏ ÐÅÒ×ÕÀ ON> ÒÅÄÁËÃÉÀ uCOS. ëÒÏÍÅ ÔÏÇÏ, ÏÐÒÏÓ ÆÌÁÇÏ×, ÐÏ-ÎÁÛÅÍÕ ÎÁ×ÅÒÎÏÅ "ÐÏÌÉÎÇ", × ON> ÃÉËÌÅ ÔÁËÏÇÏ ÏÐÒÏÓÁ ×ÓÅ ÒÁ×ÎÏ ÐÒÉÄÅÔÓÑ ×ÓÔÁ×ÉÔØ ÏÖÉÄÁÎÉÅ ÞÅÇÏ-ÔÏ ÉÚ ON> ÁÒÓÅÎÁÌÁ uCOS, ÉÎÁÞÅ ÔÁËÏÊ ÐÏÌÉÎÇ ÆÌÁÇÏ× ÎÁÇÌÕÈÏ ÚÁÂÌÏËÉÒÕÅÔ ÄÒÕÇÉÅ ON> ÚÁÄÁÞÉ.

þÔÅÎÉÅ ÄÏËÕÍÅÎÔÁÃÉÉ ÔÁËÖÅ ÏÂÙÞÎÏ ÉÚÂÁ×ÌÑÅÔ ÏÔ ×ÙÄ×ÉÖÅÎÉÑ ÓÏÂÓÔ×ÅÎÎÙÈ ×ÅÒÓÉÊ É ÎÅÌÅÐÙÈ ÄÏÇÁÄÏË.

icq 44341220

AM>>> Флаги в uCOS-II спасут мать русской демократии.

ON>> А просто в uCOS, без "-II" ? Человек по-моему спрашивал про первую ON>> редакцию uCOS. Кроме того, опрос флагов, по-нашему наверное "полинг", в ON>> цикле такого опроса все равно придется вставить ожидание чего-то из ON>> арсенала uCOS, иначе такой полинг флагов наглухо заблокирует другие ON>> задачи.

В том то и идея, чтобы избавиться от поллинга. Даже если это поллинг семафоров. :-)

AM> Чтение документации также обычно избавляет от выдвижения собственных AM> версий AM> и нелепых догадок.

Да, похоже флаги это то, что нужно. Только функция ожидания у них жестко задана - либо анд, либо ор. Однако можно, наверное, доработать напильником и ввести параметр - маску ожидания. Или набраться наглости и Лаббросу написать.

Mon Nov 14 2005 11:26, Basil Burtakov wrote to Andy Mozzhevilov:

AM>> þÔÅÎÉÅ ÄÏËÕÍÅÎÔÁÃÉÉ ÔÁËÖÅ ÏÂÙÞÎÏ ÉÚÂÁ×ÌÑÅÔ ÏÔ ×ÙÄ×ÉÖÅÎÉÑ ÓÏÂÓÔ×ÅÎÎÙÈ AM>> ×ÅÒÓÉÊ AM>> É ÎÅÌÅÐÙÈ ÄÏÇÁÄÏË.

BB> äÁ, ÐÏÈÏÖÅ ÆÌÁÇÉ ÜÔÏ ÔÏ, ÞÔÏ ÎÕÖÎÏ. ôÏÌØËÏ ÆÕÎËÃÉÑ ÏÖÉÄÁÎÉÑ Õ ÎÉÈ ÖÅÓÔËÏ BB> ÚÁÄÁÎÁ - ÌÉÂÏ ÁÎÄ, ÌÉÂÏ ÏÒ. ïÄÎÁËÏ ÍÏÖÎÏ, ÎÁ×ÅÒÎÏÅ, ÄÏÒÁÂÏÔÁÔØ BB> ÎÁÐÉÌØÎÉËÏÍ É ××ÅÓÔÉ ÐÁÒÁÍÅÔÒ - ÍÁÓËÕ ÏÖÉÄÁÎÉÑ. éÌÉ ÎÁÂÒÁÔØÓÑ ÎÁÇÌÏÓÔÉ É BB> ìÁÂÂÒÏÓÕ ÎÁÐÉÓÁÔØ.

çÄÅ ÒÅÁÌØÎÏ ÍÏÖÅÔ ÐÏÔÒÅÂÏ×ÁÔØÓÑ ÏÖÉÄÁÎÉÅ ÂÏÌÅÅ ÓÌÏÖÎÏÊ ÌÏÇÉÞÅÓËÏÊ ÆÕÎËÃÉÉ ? HÁÓËÏÌØËÏ Ñ ÐÏÍÎÀ, ÍÏÖÎÏ ÄÅÌÁÔØ OR ÉÌÉ AND ÆÕÎËÃÉÀ ÄÌÑ ÚÁÄÁÎÎÏÊ ÍÁÓËÉ. ôÏ ÅÓÔØ ÍÏÖÎÏ ËÏÎÓÔÒÕÉÒÏ×ÁÔØ 2 ×ÉÄÁ ÓÏÂÙÔÉÊ: 1.ÏÖÉÄÁÎÉÅ ÓÂÒÏÓÁ ÉÌÉ ÕÓÔÁÎÏ×ËÉ ÈÏÔÑ ÂÙ ÏÄÎÏÇÏ ÉÚ ÓÐÉÓËÁ (ÍÁÓËÉ). 2.ÏÖÉÄÁÎÉÅ ÓÂÒÏÓÁ ÉÌÉ ÕÓÔÁÎÏ×ËÉ ×ÓÅÈ ÓÏÂÙÔÉÊ ÉÚ ÓÐÉÓËÁ (ÍÁÓËÉ).

OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err)

flags - ÓÐÉÓÏË (aka ÍÁÓËÁ) ÏÖÉÄÁÅÍÙÈ ÆÌÁÇÏ× wait_type - OS_FLAG_WAIT_CLR_ALL You will wait for ALL bits in 'mask' to be clear (0) OS_FLAG_WAIT_SET_ALL You will wait for ALL bits in 'mask' to be set (1) OS_FLAG_WAIT_CLR_ANY You will wait for ANY bit in 'mask' to be clear (0) OS_FLAG_WAIT_SET_ANY You will wait for ANY bit in 'mask' to be set (1)

icq 44341220

BB>> Да, похоже флаги это то, что нужно. Только функция ожидания у них жестко BB>> задана - либо анд, либо ор. Однако можно, наверное, доработать BB>> напильником и ввести параметр - маску ожидания. Или набраться наглости и BB>> Лаббросу написать.

AM> Где реально может потребоваться ожидание более сложной логической функции

Да где угодно. Зависит от построения системы и от задачи. Более общий случай лучше менее общего, тем более, что получается он почти бесплатно.

AM> ? Hасколько я помню, можно делать OR или AND функцию для заданной маски. AM> То есть можно конструировать 2 вида событий: AM> 1.ожидание сброса или установки хотя бы одного из списка (маски). AM> 2.ожидание сброса или установки всех событий из списка (маски).

AM> OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, AM> INT16U timeout, INT8U *err)

AM> flags - список (aka маска) ожидаемых флагов AM> wait_type - AM> OS_FLAG_WAIT_CLR_ALL You will wait for ALL bits in 'mask' to be clear AM> (0) OS_FLAG_WAIT_SET_ALL You will wait for ALL bits in 'mask' to be set AM> (1) OS_FLAG_WAIT_CLR_ANY You will wait for ANY bit in 'mask' to be AM> clear (0) OS_FLAG_WAIT_SET_ANY You will wait for ANY bit in 'mask' to AM> be set (1)

Надо в поле flags передавать не признак сравнения, а саму искомую маску поля флагов. А внутри функции OSFlagPend сравнивать ее по условию "равно-не равно" с текущим состоянием.

Mon Nov 14 2005 13:50, Basil Burtakov wrote to Andy Mozzhevilov:

BB>>> äÁ, ÐÏÈÏÖÅ ÆÌÁÇÉ ÜÔÏ ÔÏ, ÞÔÏ ÎÕÖÎÏ. ôÏÌØËÏ ÆÕÎËÃÉÑ ÏÖÉÄÁÎÉÑ Õ ÎÉÈ BB>>> ÖÅÓÔËÏ ÚÁÄÁÎÁ - ÌÉÂÏ ÁÎÄ, ÌÉÂÏ ÏÒ. ïÄÎÁËÏ ÍÏÖÎÏ, ÎÁ×ÅÒÎÏÅ, ÄÏÒÁÂÏÔÁÔØ BB>>> ÎÁÐÉÌØÎÉËÏÍ É ××ÅÓÔÉ ÐÁÒÁÍÅÔÒ - ÍÁÓËÕ ÏÖÉÄÁÎÉÑ. éÌÉ ÎÁÂÒÁÔØÓÑ ÎÁÇÌÏÓÔÉ BB>>> É ìÁÂÂÒÏÓÕ ÎÁÐÉÓÁÔØ.

AM>> çÄÅ ÒÅÁÌØÎÏ ÍÏÖÅÔ ÐÏÔÒÅÂÏ×ÁÔØÓÑ ÏÖÉÄÁÎÉÅ ÂÏÌÅÅ ÓÌÏÖÎÏÊ ÌÏÇÉÞÅÓËÏÊ AM>> ÆÕÎËÃÉÉ

BB> äÁ ÇÄÅ ÕÇÏÄÎÏ.

üÔÏ ÎÅ ÏÔ×ÅÔ. HÁÐÒÉÍÅÒ, Ñ ÉÓÐÏÌØÚÏ×ÁÌ ÆÌÁÇÉ ÄÌÑ ÏÖÉÄÁÎÉÑ ÌÀÂÏÇÏ ÓÏÂÙÔÉÑ ÉÚ ÏÐÒÅÄÅÌÅÎÎÏÇÏ ÎÁÂÏÒÁ × ÏÄÎÏÊ ÚÁÄÁÞÅ, Ó ÐÏÓÌÅÄÕÀÝÉÍ ÁÎÁÌÉÚÏÍ ÆÌÁÇÏ× É ÏÂÓÌÕÖÉ×ÁÎÉÅÍ ÜÔÏÇÏ ÓÏÂÙÔÉÑ. åÓÌÉ ÂÙ ÓÅÒ×ÉÓÁ ÆÌÁÇÏ× ÎÅ ÂÙÌÏ, ÎÕÖÎÏ ÂÙÌÏ ÂÙ ÉÓËÕÓÓÔÅÎÎÏ, ÎÁÐÒÉÍÅÒ ÚÁ×ÏÄÉÔØ ÐÅÒÅÍÅÎÎÕÀ ÂÉÔÏ×ÙÈ ÆÌÁÇÏ×, É Ó×ÑÚÙ×ÁÔØ ÅÅ ÉÚÍÅÎÅÎÉÅ Ó ÓÅÍÁÆÏÒÏÍ. ìÉÂÏ ÄÅÌÁÔØ queue É ÐÉÈÁÔØ × ÎÅÅ ÎÅ ÕËÁÚÁÔÅÌÉ, Á ÐÒÑÍÏ ÍÁÓËÉ ÓÏÂÙÔÉÊ, É ÒÁÚÇÒÅÂÁÔØ × ÚÁÄÁÞÅ. üÔÏ ÎÅ ÏÞÅÎØ ËÒÁÓÉ×Ï, ÆÌÁÇÉ ÕÄÏÂÎÅÅ. òÅÁÌØÎÏÇÏ ÐÒÉÍÅÒÁ, ÇÄÅ ÂÙ ÍÏÇÌÏ ÐÏÎÁÄÏÂÉÔØÓÑ ÏÖÉÄÁÎÉÅ ÆÌÁÇÏ×, ÕÓÔÁÎÏ×ÌÅÎÎÙÈ × ÏÐÒÅÄÅÌÅÎÎÏÊ ËÏÍÂÉÎÁÃÉÉ, Ñ ÐÒÉÄÕÍÁÔØ ÎÅ ÍÏÇÕ.

BB> úÁ×ÉÓÉÔ ÏÔ ÐÏÓÔÒÏÅÎÉÑ ÓÉÓÔÅÍÙ É ÏÔ ÚÁÄÁÞÉ. âÏÌÅÅ ÏÂÝÉÊ BB> ÓÌÕÞÁÊ ÌÕÞÛÅ ÍÅÎÅÅ ÏÂÝÅÇÏ, ÔÅÍ ÂÏÌÅÅ, ÞÔÏ ÐÏÌÕÞÁÅÔÓÑ ÏÎ ÐÏÞÔÉ ÂÅÓÐÌÁÔÎÏ.

âÏÌÅÅ ÕÎÉ×ÅÒÓÁÌØÎÙÅ ÒÅÛÅÎÉÑ ÔÒÅÂÕÀÔ ÂÏÌØÛÉÈ ÒÅÓÕÒÓÏ×, × ÏÂÝÅÍ ÓÌÕÞÁÅ. HÕÖÎÏ ÇÄÅ-ÔÏ ÐÒÏ×ÅÓÔÉ ÇÒÁÎÉÃÕ, É ÓËÁÚÁÔØ - ÞÔÏ ÄÁÌØÎÅÊÛÉÊ ÕÎÉ×ÅÒÓÁÌÉÚÍ ÎÅ ÉÍÅÅÔ ÓÍÙÓÌÁ × 99% ÓÌÕÞÁÅ×, É ÕÔÑÖÅÌÅÎÉÅ ÍÅÈÁÎÉÚÍÁ ÒÁÄÉ 1% ÎÅÏÐÒÁ×ÄÁÎÏ.

AM>> ? HÁÓËÏÌØËÏ Ñ ÐÏÍÎÀ, ÍÏÖÎÏ ÄÅÌÁÔØ OR ÉÌÉ AND ÆÕÎËÃÉÀ ÄÌÑ ÚÁÄÁÎÎÏÊ AM>> ÍÁÓËÉ. ôÏ ÅÓÔØ ÍÏÖÎÏ ËÏÎÓÔÒÕÉÒÏ×ÁÔØ 2 ×ÉÄÁ ÓÏÂÙÔÉÊ: AM>> 1.ÏÖÉÄÁÎÉÅ ÓÂÒÏÓÁ ÉÌÉ ÕÓÔÁÎÏ×ËÉ ÈÏÔÑ ÂÙ ÏÄÎÏÇÏ ÉÚ ÓÐÉÓËÁ (ÍÁÓËÉ). AM>> 2.ÏÖÉÄÁÎÉÅ ÓÂÒÏÓÁ ÉÌÉ ÕÓÔÁÎÏ×ËÉ ×ÓÅÈ ÓÏÂÙÔÉÊ ÉÚ ÓÐÉÓËÁ (ÍÁÓËÉ).

BB> HÁÄÏ × ÐÏÌÅ flags ÐÅÒÅÄÁ×ÁÔØ ÎÅ ÐÒÉÚÎÁË ÓÒÁ×ÎÅÎÉÑ, Á ÓÁÍÕ ÉÓËÏÍÕÀ ÍÁÓËÕ BB> ÐÏÌÑ ÆÌÁÇÏ×.

ôÁË É ÄÅÌÁÅÔÓÑ.

BB> á ×ÎÕÔÒÉ ÆÕÎËÃÉÉ OSFlagPend ÓÒÁ×ÎÉ×ÁÔØ ÅÅ ÐÏ ÕÓÌÏ×ÉÀ BB> "ÒÁ×ÎÏ-ÎÅ ÒÁ×ÎÏ" Ó ÔÅËÕÝÉÍ ÓÏÓÔÏÑÎÉÅÍ.

éÍÈÏ, × ÐÏÌÎÅ ÄÏÓÔÁÔÏÞÎÏ ÔÅÈ 4 ÒÅÖÉÍÏ× ÓÒÁ×ÎÅÎÉÑ, ËÏÔÏÒÙÅ ÚÁÌÏÖÅÎÙ. ðÏÄ ÎÉÈ ÍÏÖÎÏ ÕÖÅ ÐÒÉÞÅÓÁÔØ ×ÓÀ ÏÓÔÁÌØÎÕÀ ÌÏÇÉËÕ ÕÓÔÁÎÏ×ËÉ/ÓÂÒÏÓÁ ÆÌÁÇÏ×.

icq 44341220

AM>>> Где реально может потребоваться ожидание более сложной логической AM>>> функции

BB>> Да где угодно.

AM> Это не ответ. AM> Hапример, я использовал флаги для ожидания любого события из AM> определенного набора в одной задаче, с последующим анализом флагов и AM> обслуживанием этого события. Если бы сервиса флагов не было, нужно было AM> бы искусстенно, например заводить переменную битовых флагов, и связывать AM> ее изменение с семафором. Либо делать queue и пихать в нее не указатели, AM> а прямо маски событий, и разгребать в задаче. Это не очень красиво, AM> флаги удобнее. AM> Реального примера, где бы могло понадобиться ожидание флагов, AM> установленных AM> в определенной комбинации, я придумать не могу.

Например есть 3 релейных сигнала. Приходят асинхронно от внешних датчиков (от объекта управления). Сигналы такие: температура превысила порог, давление привысило порог и заглушка открыта-закрыта. Задачу надо запускать если два сигнала true а третий false.

Типовое решение - в прерываниях устанавливаем семафоры (флаги). А задача ждет нужной комбинации. Причем сложность лог. ф-ции может быть и больше. Не зря у Лабросса до 32 флагов.

BB>> Зависит от построения системы и от задачи. Более общий BB>> случай лучше менее общего, тем более, что получается он почти бесплатно.

AM> Более универсальные решения требуют больших ресурсов, в общем случае. AM> Hужно где-то провести границу, и сказать - что дальнейший универсализм не AM> имеет смысла в 99% случаев, и утяжеление механизма ради 1% неоправдано.

AM>>> ? Hасколько я помню, можно делать OR или AND функцию для заданной AM>>> маски. То есть можно конструировать 2 вида событий: AM>>> 1.ожидание сброса или установки хотя бы одного из списка (маски). AM>>> 2.ожидание сброса или установки всех событий из списка (маски).

BB>> Hадо в поле flags передавать не признак сравнения, а саму искомую маску BB>> поля флагов.

AM> Так и делается.

BB>> А внутри функции OSFlagPend сравнивать ее по условию BB>> "равно-не равно" с текущим состоянием.

AM> Имхо, в полне достаточно тех 4 режимов сравнения, которые заложены. AM> Под них можно уже причесать всю остальную логику установки/сброса флагов.

Минимализм ведет к оверхеду в других местах. Например, в Си есть сравнение на больше и меньше, равно, не равно, больше или равно меньше или равно. Хотя теоретически можно было бы обойтись половиной критериев.

AM> icq 44341220

Mon Nov 14 2005 14:47, Basil Burtakov wrote to Andy Mozzhevilov:

AM>> òÅÁÌØÎÏÇÏ ÐÒÉÍÅÒÁ, ÇÄÅ ÂÙ ÍÏÇÌÏ ÐÏÎÁÄÏÂÉÔØÓÑ ÏÖÉÄÁÎÉÅ ÆÌÁÇÏ×, AM>> ÕÓÔÁÎÏ×ÌÅÎÎÙÈ AM>> × ÏÐÒÅÄÅÌÅÎÎÏÊ ËÏÍÂÉÎÁÃÉÉ, Ñ ÐÒÉÄÕÍÁÔØ ÎÅ ÍÏÇÕ.

BB> HÁÐÒÉÍÅÒ ÅÓÔØ 3 ÒÅÌÅÊÎÙÈ ÓÉÇÎÁÌÁ. ðÒÉÈÏÄÑÔ ÁÓÉÎÈÒÏÎÎÏ ÏÔ ×ÎÅÛÎÉÈ ÄÁÔÞÉËÏ× BB> (ÏÔ ÏÂßÅËÔÁ ÕÐÒÁ×ÌÅÎÉÑ). óÉÇÎÁÌÙ ÔÁËÉÅ: ÔÅÍÐÅÒÁÔÕÒÁ ÐÒÅ×ÙÓÉÌÁ ÐÏÒÏÇ, BB> ÄÁ×ÌÅÎÉÅ ÐÒÉ×ÙÓÉÌÏ ÐÏÒÏÇ É ÚÁÇÌÕÛËÁ ÏÔËÒÙÔÁ-ÚÁËÒÙÔÁ. úÁÄÁÞÕ ÎÁÄÏ BB> ÚÁÐÕÓËÁÔØ ÅÓÌÉ Ä×Á ÓÉÇÎÁÌÁ true Á ÔÒÅÔÉÊ false.

åÓÌÉ ÔÙ ÉÍÅÅÛØ ××ÉÄÕ × ÜÔÏÍ ÐÒÉÍÅÒÅ, ÞÔÏ 2 ÐÅÒ×ÙÈ ÓÉÇÎÁÌÁ == 1, Á ÔÒÅÔÉÊ ÓÉÇÎÁÌ == 0, ÎÏ ÎÉÞÅÇÏ ÎÅ ÓÔÏÉÔ ÐÒÏÉÎ×ÅÒÔÉÒÏ×ÁÔØ ÔÒÅÔÉÊ ÓÉÇÎÁÌ × ÎÕÖÎÏÍ ÒÁÚÒÑÄÅ ÆÌÁÇÏ×, É Ó×ÅÓÔÉ ÚÁÄÁÞÕ Ë ÏÖÉÄÁÎÉÀ ÓÏÂÙÔÉÑ ÕÓÔÁÎÏ×ËÉ ×ÓÅÈ ÆÌÁÇÏ×. åÓÌÉ ÔÙ ÉÍÅÅÛØ ××ÉÄÕ ÏÖÉÄÁÎÉÅ ÕÓÔÁÎÏ×ËÉ ÌÀÂÙÈ Ä×ÕÈ ÆÌÁÇÏ× ÉÚ ÔÒÅÈ (ÉÌÉ × ÂÏÌÅÅ ÏÂÝÅÊ ÐÏÓÔÁÎÏ×ËÅ, ÌÀÂÙÈ K ÉÚ N), ÔÏ ÜÔÏ ÕÖÅ ÎÅ ÓÏ×ÓÅÍ ÚÁÄÁÞÁ ËÏÍÂÉÎÁÔÏÒÎÏÊ ÌÏÇÉËÉ, ÔÏ ÅÓÔØ ÏÎÁ ËÏÎÅÞÎÏ ÍÏÖÅÔ ÔÁËÏ×ÏÊ ÂÙÔØ, ÎÏ × ÏÂÝÅÍ ÓÌÕÞÁÅ ÂÏÌÅÅ ÏÐÔÉÍÁÌØÎÏ ÒÅÛÁÅÔÓÑ ÔÁÂÌÉÞÎÏ. ôÁËÏÊ ×ÏÚÍÏÖÎÏÓÔÉ × ÓÅÒ×ÉÓÅ ÆÌÁÇÏ× ucos ÎÅÔ, É Ñ ÓÞÉÔÁÀ, ÞÔÏ ÔÁËÁÑ ×ÏÚÍÏÖÎÏÔØ ÉÚÌÉÛÎÑ, ×Ï ×ÓÑËÏÍ ÓÌÕÞÁÅ Ñ ÎÅ ÍÏÇÕ ÐÒÉÄÕÍÁÔØ ÐÒÉÍÅÒÏ×, ÇÄÅ ÜÔÏ ÍÏÖÅÔ ÐÏÔÒÅÂÏ×ÁÔØÓÑ.

wbr, Andy (2:5080/76.6)

Hello Alex.

13 Nov 05 15:03, you wrote to Basil Burtakov:

AM> // ÁÂÓÔÒÁËÔÎÙÊ ËÌÁÓÓ ÓÏÂÙÔÉÑ AM> class TEvent { AM> public: AM> TEvent(void) {} AM> virtual ~TEvent(void) {} AM> virtual EvType type(void) const = 0; AM> virtual EvData * data(void) const = 0; AM> virtual const char *as_string(void) const = 0; AM> };

AM> // ÏÖÉÄÁÅÍ ËÁËÏÇÏ-ÔÏ ÓÏÂÙÔÉÑ AM> TEvent *ev = OSQPend(ev_queue, timeout); // üÔÉ ÔÒÉ ÓÔÒÏÞËÉ AM> if(ev == NULL) // ÉÍÅÅÔ ÓÍÙÓÌ AM> ÏÆÏÒÍÉÔØ AM> ev = new TEventTimeout; // ËÁË ÏÔÄÅÌØÎÙÊ ×ÙÚÏ×

AM> syslog(LOG_DEBUG, "got event: %s", ev->as_string() );

AM> switch( ev->type() ) AM> { AM> ...... AM> }

çÏ×ÏÒÑÔ ÖÅ ËÌÁÓÓÉËÉ: "äÅÔÉ, ÅÓÌÉ Õ ×ÁÓ ÐÏÑ×ÉÌÏÓØ ÖÅÌÁÎÉÅ ÎÁÐÉÓÁÔØ type-swith, ÔÏ ÞÔÏ-ÔÏ ÓÏ×ÓÅÍ ÎÅ × ÐÏÒÑÄËÅ Ó ÄÉÚÁÊÎÏÍ, ÖÅÌÁÔÅÌØÎÏ ÅÝÅ ÒÁÚ ÐÏÄÕÍÁÔØ É ÅÇÏ ÐÅÒÅÓÍÏÔÒÅÔØ". ðÏÞÅÍÕ ÂÙ × ÄÁÎÎÏÍ ÓÌÕÞÁÅ ÎÅ ÉÚÏÂÒÅÓÔÉ virtual EvResult TEvent::Process(SomeData)=0; É ×ÍÅÓÔÏ switch ÐÒÏÓÔÏ ×ÙÚÙ×ÁÔØ ev->Process(); ? äÁ, ÄÒÕÇÉÅ ËÌÁÓÓÉËÉ ÓÏ×ÅÔÕÀÔ ÓÒÁÚÕ ÖÅ ÚÁÄÕÍÙ×ÁÔØÓÑ Ï ÏÂÌÅÇÞÅÎÉÉ ÒÁÓÛÉÒÅÎÉÑ ÉÅÒÁÒÈÉÉ ËÌÁÓÓÏ×, ÐÒÏÉÚ×ÏÄÎÙÈ ÏÔ TEvent, ÄÁÖÅ ÅÓÌÉ ÜÔÏ ÎÅ ÐÒÉÇÏÄÉÔÓÑ, ÔÏ ÐÏÚ×ÏÌÉÔ Õ×ÉÄÅÔØ ÎÅËÏÔÏÒÙÅ ×ÅÝÉ × ÎÏ×ÏÍ Ó×ÅÔÅ :)

Dmitry

Здравствуйте, Уважаемый Andy!

Mon Nov 14 2005 10:07, Andy Mozzhevilov wrote to Olga Nonova:

AM>>> Флаги в uCOS-II спасут мать русской демократии.

ON>> А просто в uCOS, без "-II" ? Человек по-моему спрашивал про первую ON>> редакцию uCOS. Кроме того, опрос флагов, по-нашему наверное "полинг", в ON>> цикле такого опроса все равно придется вставить ожидание чего-то из ON>> арсенала uCOS, иначе такой полинг флагов наглухо заблокирует другие ON>> задачи.

AM> Чтение документации также обычно избавляет от выдвижения собственных AM> версий и нелепых догадок.

Я и прочитала в своей версии uCOS, что нет там никаких флагов. А есть варианты функций без ожидания. Что делать? Следовать Вашему нелепому в своем менторстве совету и продолжать изучать документацию?

Всего Вам Хорошего Ольга

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required