State_Maschine

Jul 03, 2006 113 Replies

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



Очень хочется узнать, как наиболее эффективно в С реализовать subj. Простейший прием через оператор switch мне известен, но ведь он, похоже, работает перебором всех case-ов. А это проигрыш в скорости. Также интересует - кто-нибудь делал класс subj-а для C++? Поделитесь пожалуйста.



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


Hello, Olga!

(03 éÀÌ 06 23:42), Olga Nonova ÐÉÓáÌ All: ON> ïÞÅÎØ ÈÏÞÅÔÓÑ ÕÚÎÁÔØ, ËÁË ÎÁÉÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ subj. ON> ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ÏÎ, ON> ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×. ÄÏ ÔÅÈ ÐÏÒ ÐÏËÁ ÎÅ ÓÒÁÂÏÔÁÅÔ, ÄÁÌØÛÅ ÂÒÅÊË. ON> á ÜÔÏ ÐÒÏÉÇÒÙÛ × ÓËÏÒÏÓÔÉ. ñ ÚÎÁÀ ÔÏÌØËÏ Ä×Á ÓÐÏÓÏÂÁ. ÷ÔÏÒÏÊ ÜÔÏ ÍÁÓÓÉ× ÓÓÙÌÏË ÎÁ ÆÕÎËÃÉÉ. ôÁËÖÅ ÈÏÔÅÌÏÓØ ÂÙ ÕÚÎÁÔØ ÅÝÅ ÓÐÏÓÏÂÙ.

úù. õÄÉ×ÉÔÅÌØÎÏ, ÎÏ ÉÍÅÎÎÏ ÓÅÇÏÄÎÑ É ÍÎÅ ÐÏÎÁÄÏÂÉÌÁÓØ ÍÁÛÉÎÁ ÓÏÓÔÏÑÎÉÊ. ïËÁÚÙ×ÁÅÔÓÑ ÕÖÅ ×ÞÅÒÁ:)

With best regards, Igor. Time: 01:21 Date: 04 éÀÌ 06

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Olga Nonova! You wrote in conference fido7.ru.embedded to All on Mon, 3 Jul 2006 19:42:45

+0000 (UTC):

ON> ïÞÅÎØ ÈÏÞÅÔÓÑ ÕÚÎÁÔØ, ËÁË ÎÁÉÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ subj. ON> ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ÏÎ, ON> ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×.

ïÔËÒÏÊÔÅ ÄÌÑ ÓÅÂÑ ÏÐÅÒÁÔÏÒ break

dima

formatting link

ðÒÉ×ÅÔ, Olga !

03 Jul 06 , 23:42 Olga Nonova ÐÉÓÁÌ Ë All:

ON> ïÞÅÎØ ÈÏÞÅÔÓÑ ÕÚÎÁÔØ, ËÁË ÎÁÉÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ subj. ON> ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ÏÎ, ON> ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×. á ÜÔÏ ÐÒÏÉÇÒÙÛ × ÓËÏÒÏÓÔÉ.

äÉÚÁÓÓÅÂÌÉÒÏ×ÁÔØ ÓËÏÍÐÉÌÉÒÏ×ÁÎÎÙÊ Ó ÏÐÔÉÍÉÚÁÃÉÅÊ ËÏÄ ÐÒÏÂÏ×ÁÌÉ? ðÏÐÒÏÂÕÊÔÅ. íÎÏÇÏ ÉÎÔÅÒÅÓÎÏÇÏ Õ×ÉÄÉÔÅ.

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... óÐÁÒÉ×ÁÎÉÅ ÜÌÅËÔÒÏÎÏ× ÐÏÄ ËÏÎÔÒÏÌÅÍ ÐÒÉÎÃÉÐÁ ðÁÕÌÉ

Hi Olga!

03 Jul 06 23:42, Olga Nonova wrote to All:

ON> ïÞÅÎØ ÈÏÞÅÔÓÑ ÕÚÎÁÔØ, ËÁË ÎÁÉÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ subj. ON> ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ÏÎ, ON> ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×. á ÜÔÏ ÐÒÏÉÇÒÙÛ × ÓËÏÒÏÓÔÉ. ON> ôÁËÖÅ ÉÎÔÅÒÅÓÕÅÔ - ËÔÏ-ÎÉÂÕÄØ ÄÅÌÁÌ ËÌÁÓÓ subj-Á ÄÌÑ C++? ðÏÄÅÌÉÔÅÓØ ON> ÐÏÖÁÌÕÊÓÔÁ.

ÁÇÁ. ÐÅÒÅÂÏÒÏÍ. ÓÒÁÚÕ ×ÉÄÎÏ ÂÏÌØÛÏÇÏ ÚÎÁÔÏËÁ ÑÚÙËÁ ãÅ.

movl .L8(%eax), %eax jmp *%eax ....

.L8: .long .L2 .long .L3 .long .L4 .long .L2 .long .L2 .long .L2 .long .L5 .long .L6 .long .L7

...

.L3: subl $12, %esp pushl $.LC0 call puts addl $16, %esp jmp .L2 ...

.L2: leave ret

éÓÈÏÄÎÙÊ ÔÅËÓÔ:

switch( i ) { case 1: puts("1"); break; case 2: puts("2"); break; case 6: puts("6"); break; case 7: puts("7"); break; case 8: puts("8"); break; }

Slav.

Hello, Olga! You wrote to All on Mon, 3 Jul 2006 19:42:45 +0000 (UTC):

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

ON> ïÞÅÎØ ÈÏÞÅÔÓÑ ÕÚÎÁÔØ, ËÁË ÎÁÉÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ subj. ON> ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ÏÎ, ON> ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×. á ÜÔÏ ÐÒÏÉÇÒÙÛ × ÓËÏÒÏÓÔÉ.

îÅÏÂÑÚÁÔÅÌØÎÏ. îÁÐÒÉÍÅÒ × ôÁËÓËÉÎÇÅ ÄÌÑ 51-È - ÍÏÖÎÏ ÂÙÌÏ ÐÅÒÅËÌÀÞÁÔØ ÐÒÁÇÍÏÊ ÒÅÖÉÍ ÒÁÂÏÔÙ Ó×ÉÔÞÁ ÓÒÁ×ÎÅÎÉÅÍ/ÐÏ ÔÁÂÌÉÃÅ.

With best regards, Alexandr Torres. E-mail: snipped-for-privacy@yahoo.com [ öÁÍÓÔ×Õ ÂÏÊ !]

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

Tue Jul 04 2006 12:58, Alexandr Torres wrote to Olga Nonova:

ON>> Простейший прием через оператор switch мне известен, но ведь он, ON>> похоже, работает перебором всех case-ов. А это проигрыш в скорости.

AT> Hеобязательно. AT> Hапример в Такскинге для 51-х - можно было переключать прагмой режим AT> работы свитча сравнением/по таблице.

Во втором случае, по-видимому становилось обязательным требование, чтобы выражение при switch принимало значения 0,1,2,3... Т.е. индекс для таблицы jamp-ов. Иначе я не представляю, как пользоваться такой таблицей.

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

Hello, Olga! You wrote to Alexandr Torres on Tue, 4 Jul 2006 09:12:38 +0000 (UTC):

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

ON> Tue Jul 04 2006 12:58, Alexandr Torres wrote to Olga Nonova:

ON>>> ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ÏÎ, ON>>> ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×. á ÜÔÏ ÐÒÏÉÇÒÙÛ × ÓËÏÒÏÓÔÉ.

AT>> HÅÏÂÑÚÁÔÅÌØÎÏ. AT>> HÁÐÒÉÍÅÒ × ôÁËÓËÉÎÇÅ ÄÌÑ 51-È - ÍÏÖÎÏ ÂÙÌÏ ÐÅÒÅËÌÀÞÁÔØ ÐÒÁÇÍÏÊ ÒÅÖÉÍ AT>> ÒÁÂÏÔÙ Ó×ÉÔÞÁ ÓÒÁ×ÎÅÎÉÅÍ/ÐÏ ÔÁÂÌÉÃÅ.

ON> ÷Ï ×ÔÏÒÏÍ ÓÌÕÞÁÅ, ÐÏ-×ÉÄÉÍÏÍÕ ÓÔÁÎÏ×ÉÌÏÓØ ÏÂÑÚÁÔÅÌØÎÙÍ ÔÒÅÂÏ×ÁÎÉÅ, ON> ÞÔÏÂÙ ×ÙÒÁÖÅÎÉÅ ÐÒÉ switch ÐÒÉÎÉÍÁÌÏ ÚÎÁÞÅÎÉÑ 0,1,2,3...

÷ ÓÔÅÊÔ-ÍÁÛÉÎÅ, ËÁË ÐÒÁ×ÉÌÏ, ÐÏ ÄÒÕÇÏÍÕ É ÎÅ ÂÙ×ÁÅÔ.

With best regards, Alexandr Torres. E-mail: snipped-for-privacy@yahoo.com [ öÁÍÓÔ×Õ ÂÏÊ !]

Hi Olga!

04 Jul 06 13:12, Olga Nonova wrote to Alexandr Torres:

AT>> HÁÐÒÉÍÅÒ × ôÁËÓËÉÎÇÅ ÄÌÑ 51-È - ÍÏÖÎÏ ÂÙÌÏ ÐÅÒÅËÌÀÞÁÔØ ÐÒÁÇÍÏÊ AT>> ÒÅÖÉÍ ÒÁÂÏÔÙ Ó×ÉÔÞÁ ÓÒÁ×ÎÅÎÉÅÍ/ÐÏ ÔÁÂÌÉÃÅ.

ON> ÷Ï ×ÔÏÒÏÍ ÓÌÕÞÁÅ, ÐÏ-×ÉÄÉÍÏÍÕ ÓÔÁÎÏ×ÉÌÏÓØ ÏÂÑÚÁÔÅÌØÎÙÍ ÔÒÅÂÏ×ÁÎÉÅ, ON> ÞÔÏÂÙ ×ÙÒÁÖÅÎÉÅ ÐÒÉ switch ÐÒÉÎÉÍÁÌÏ ÚÎÁÞÅÎÉÑ 0,1,2,3... ô.Å. ÉÎÄÅËÓ ON> ÄÌÑ ÔÁÂÌÉÃÙ jamp-Ï×. éÎÁÞÅ Ñ ÎÅ ÐÒÅÄÓÔÁ×ÌÑÀ, ËÁË ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁËÏÊ ON> ÔÁÂÌÉÃÅÊ.

ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ÚÎÁÞÅÎÉÑ ×ÅÄÕÔ ÎÁ ËÏÎÅà swtich'Á.

Slav.

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

Tue Jul 04 2006 13:37, Alexandr Torres wrote to Olga Nonova:

AT>>> работы свитча сравнением/по таблице.

ON>> Во втором случае, по-видимому становилось обязательным требование, ON>> чтобы выражение при switch принимало значения 0,1,2,3...

AT> В стейт-машине, как правило, по другому и не бывает.

Однако, не знаю как в просто С, но в С++ нет никаких ограничений на тип и значения выражения при switch. Именно такая универсальность и вынуждает компилятор реализовать перебор со сранением, что для ембеднутых устройств не есть хорошо.

По поводу "по другому не бывает" о нумерации состояний как 0,1,2..., то в макроассемблере есть чрезвычайно изящное решение с использованием indirect jmp-а, а регистр-указатель принимает значения непосредственно адресов меток перехода. Имена меток и несут в себе название стейтов. При этом не надо никаких таблиц jmp-ов и перекодировок из индексов в физические адреса. Жаль, что ничего подобного в С реализовать похоже нельзя.

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

Hello, Olga! You wrote to Alexandr Torres on Tue, 4 Jul 2006 10:45:28 +0000 (UTC):

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

ON> Tue Jul 04 2006 13:37, Alexandr Torres wrote to Olga Nonova:

AT>>>> ÒÁÂÏÔÙ Ó×ÉÔÞÁ ÓÒÁ×ÎÅÎÉÅÍ/ÐÏ ÔÁÂÌÉÃÅ.

ON>>> ÷Ï ×ÔÏÒÏÍ ÓÌÕÞÁÅ, ÐÏ-×ÉÄÉÍÏÍÕ ÓÔÁÎÏ×ÉÌÏÓØ ÏÂÑÚÁÔÅÌØÎÙÍ ÔÒÅÂÏ×ÁÎÉÅ, ON>>> ÞÔÏÂÙ ×ÙÒÁÖÅÎÉÅ ÐÒÉ switch ÐÒÉÎÉÍÁÌÏ ÚÎÁÞÅÎÉÑ 0,1,2,3...

AT>> ÷ ÓÔÅÊÔ-ÍÁÛÉÎÅ, ËÁË ÐÒÁ×ÉÌÏ, ÐÏ ÄÒÕÇÏÍÕ É ÎÅ ÂÙ×ÁÅÔ.

ON> ïÄÎÁËÏ, ÎÅ ÚÎÁÀ ËÁË × ÐÒÏÓÔÏ ó, ÎÏ × ó++ ÎÅÔ ÎÉËÁËÉÈ ÏÇÒÁÎÉÞÅÎÉÊ ÎÁ ÔÉÐ ON> É ÚÎÁÞÅÎÉÑ ×ÙÒÁÖÅÎÉÑ ÐÒÉ switch.

äÅÌÏ ÎÅ × ÏÇÒÁÎÉÞÅÎÉÑÈ ÎÁ ÔÉÐ × Ó×ÉÔÞÅ, Á ÎÁ äîë ÒÁÚÒÁÂÏÔÞÉËÁ, ÐÉÛÕÝÅÇÏ ÓÔÅÊ-ÍÁÛÉÎÕ.

ON> ðÏ ÐÏ×ÏÄÕ "ÐÏ ÄÒÕÇÏÍÕ ÎÅ ÂÙ×ÁÅÔ" Ï ÎÕÍÅÒÁÃÉÉ ÓÏÓÔÏÑÎÉÊ ËÁË 0,1,2..., ÔÏ ON> × ÍÁËÒÏÁÓÓÅÍÂÌÅÒÅ ÅÓÔØ ÞÒÅÚ×ÙÞÁÊÎÏ ÉÚÑÝÎÏÅ ÒÅÛÅÎÉÅ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ON> indirect jmp-Á, Á ÒÅÇÉÓÔÒ-ÕËÁÚÁÔÅÌØ ÐÒÉÎÉÍÁÅÔ ÚÎÁÞÅÎÉÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ON> ÁÄÒÅÓÏ× ÍÅÔÏË ÐÅÒÅÈÏÄÁ. éÍÅÎÁ ÍÅÔÏË É ÎÅÓÕÔ × ÓÅÂÅ ÎÁÚ×ÁÎÉÅ ÓÔÅÊÔÏ×. ON> ðÒÉ ÜÔÏÍ ÎÅ ÎÁÄÏ ÎÉËÁËÉÈ ÔÁÂÌÉà jmp-Ï× É ÐÅÒÅËÏÄÉÒÏ×ÏË ÉÚ ÉÎÄÅËÓÏ× × ON> ÆÉÚÉÞÅÓËÉÅ ÁÄÒÅÓÁ. öÁÌØ, ÞÔÏ ÎÉÞÅÇÏ ÐÏÄÏÂÎÏÇÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ ÐÏÈÏÖÅ ON> ÎÅÌØÚÑ.

é ÎÅ ÎÁÄÏ ÓÁÍÏÍÕ, ËÏÍÐÉÌÑÔÏÒ ×ÓÅ ÓÄÅÌÁÅÔ, ÅÓÌÉ ÏÎ ÎÅ ÕÂÏÇÉÊ.

With best regards, Alexandr Torres. E-mail: snipped-for-privacy@yahoo.com [ öÁÍÓÔ×Õ ÂÏÊ !]

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Olga Nonova! You wrote in conference fido7.ru.embedded to Alexandr Torres on Tue, 4 Jul

2006 10:45:28 +0000 (UTC):

AT>>>> ÒÁÂÏÔÙ Ó×ÉÔÞÁ ÓÒÁ×ÎÅÎÉÅÍ/ÐÏ ÔÁÂÌÉÃÅ.

ON>>> ÷Ï ×ÔÏÒÏÍ ÓÌÕÞÁÅ, ÐÏ-×ÉÄÉÍÏÍÕ ÓÔÁÎÏ×ÉÌÏÓØ ÏÂÑÚÁÔÅÌØÎÙÍ ÔÒÅÂÏ×ÁÎÉÅ, ON>>> ÞÔÏÂÙ ×ÙÒÁÖÅÎÉÅ ÐÒÉ switch ÐÒÉÎÉÍÁÌÏ ÚÎÁÞÅÎÉÑ 0,1,2,3...

AT>> ÷ ÓÔÅÊÔ-ÍÁÛÉÎÅ, ËÁË ÐÒÁ×ÉÌÏ, ÐÏ ÄÒÕÇÏÍÕ É ÎÅ ÂÙ×ÁÅÔ.

ON> ïÄÎÁËÏ, ÎÅ ÚÎÁÀ ËÁË × ÐÒÏÓÔÏ ó, ÎÏ × ó++ ÎÅÔ ÎÉËÁËÉÈ ÏÇÒÁÎÉÞÅÎÉÊ ÎÁ

÷Ù ÎÅ ÚÎÁÅÔÅ ÎÉ ËÁË × ÐÒÏÓÔÏ ó ÎÉ ËÁË × ó++, ×Ù ×ÏÏÂÝÅ ÎÉ ÈÒÅÎÁ ÎÅ ÚÎÁÅÔÅ.

ON> ÔÉÐ É ÚÎÁÞÅÎÉÑ ×ÙÒÁÖÅÎÉÑ ÐÒÉ switch.

âÒÅÄ. ôÏÌØËÏ ÃÅÌÏÅ (É ÅÇÏ ×ÁÒÉÁÎÔÙ)

ON> éÍÅÎÎÏ ÔÁËÁÑ ÕÎÉ×ÅÒÓÁÌØÎÏÓÔØ É ×ÙÎÕÖÄÁÅÔ ËÏÍÐÉÌÑÔÏÒ ÒÅÁÌÉÚÏ×ÁÔØ ÐÅÒÅÂÏÒ ON> ÓÏ ÓÒÁÎÅÎÉÅÍ, ÞÔÏ ÄÌÑ ÅÍÂÅÄÎÕÔÙÈ ÕÓÔÒÏÊÓÔ× ÎÅ ÅÓÔØ ÈÏÒÏÛÏ.

âÒÅÄ.

ON> ðÏ ÐÏ×ÏÄÕ "ÐÏ ÄÒÕÇÏÍÕ ÎÅ ÂÙ×ÁÅÔ" Ï ÎÕÍÅÒÁÃÉÉ ÓÏÓÔÏÑÎÉÊ ËÁË 0,1,2..., ON> ÔÏ × ÍÁËÒÏÁÓÓÅÍÂÌÅÒÅ ÅÓÔØ ÞÒÅÚ×ÙÞÁÊÎÏ ÉÚÑÝÎÏÅ ÒÅÛÅÎÉÅ Ó ON> ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ indirect jmp-Á, Á ÒÅÇÉÓÔÒ-ÕËÁÚÁÔÅÌØ ÐÒÉÎÉÍÁÅÔ

÷ ËÁËÏÍ ÉÍÅÎÎÏ ÍÁËÒÏÁÓÓÅÍÂÌÅÒÅ?

ON> ÚÎÁÞÅÎÉÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÁÄÒÅÓÏ× ÍÅÔÏË ÐÅÒÅÈÏÄÁ. éÍÅÎÁ ÍÅÔÏË É ÎÅÓÕÔ ON> × ÓÅÂÅ ÎÁÚ×ÁÎÉÅ ÓÔÅÊÔÏ×. ðÒÉ ÜÔÏÍ ÎÅ ÎÁÄÏ ÎÉËÁËÉÈ ÔÁÂÌÉà jmp-Ï× É ON> ÐÅÒÅËÏÄÉÒÏ×ÏË ÉÚ ÉÎÄÅËÓÏ× × ÆÉÚÉÞÅÓËÉÅ ÁÄÒÅÓÁ. öÁÌØ, ÞÔÏ ÎÉÞÅÇÏ ON> ÐÏÄÏÂÎÏÇÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ ÐÏÈÏÖÅ ÎÅÌØÚÑ.

÷ ó ÜÔÏ ×Ï-ÐÅÒ×ÙÈ, ÍÏÖÎÏ ÒÅÁÌÉÚÏ×ÁÔØ ÐÒÑÍÏ - ÍÁÓÓÉ× ÁÄÒÅÓÏ× ÆÕÎËÃÉÊ É ÉÈ ×ÙÚÏ× ÐÏ ÉÎÄÅËÓÕ. á ÍÏÖÎÏ ÓÏÎÓÔÒÕËÃÉÅÊ case. ÷Ï ÞÔÏ ÓËÏÍÐÉÌÉÒÕÅÔÓÑ ÔÏ ÉÌÉ ÄÒÕÇÏÅ ÚÁ×ÉÓÉÔ ÏÔ ×ÏÚÍÏÖÎÏÓÔÅÊ ÃÅÌÅ×ÏÊ ÐÌÁÔÆÏÒÍÙ.

dima

formatting link

Hello Olga.

04 Jul 06 18:48, you wrote to Slav Matveev:

ïÌØÇÁ, ÔÁË Á ÞÔÏ Õ ÷ÁÓ ÐÏÌÕÞÉÌÏÓØ? þÅÍ ËÏÍÐÉÌÉÒÏ×ÁÌÉ? ðÏÄ ËÁËÏÊ ËÁÍÅÎØ? ôÕÔ ÄÏÓÔÁÔÏÞÎÏ Ë×ÁÌÉÆÉÃÉÒÏ×ÁÎÎÙÈ ÌÀÄÅÊ, ÞÔÏ ÐÏÍÏÞØ, ËÏÎÅÞÎÏ ÅÓÌÉ ÏÎÏ ÷ÁÍ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÎÕÖÎÏ. Nicolas

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

Tue Jul 04 2006 15:23, Alexandr Torres wrote to Olga Nonova:

ON>> Однако, не знаю как в просто С, но в С++ нет никаких ограничений на тип ON>> и значения выражения при switch.

AT> Дело не в ограничениях на тип в свитче, а на ДHК разработчика, пишущего AT> стей-машину.

А как быть с ДHК авторов C++?

ON>> По поводу "по другому не бывает" о нумерации состояний как 0,1,2..., то ON>> в макроассемблере есть чрезвычайно изящное решение с использованием ON>> indirect jmp-а, а регистр-указатель принимает значения непосредственно ON>> адресов меток перехода. Имена меток и несут в себе название стейтов. ON>> При этом не надо никаких таблиц jmp-ов и перекодировок из индексов в ON>> физические адреса. Жаль, что ничего подобного в С реализовать похоже ON>> нельзя.

AT> И не надо самому, компилятор все сделает, если он не убогий.

"Это вряд-ли".(с) Просто, здесь один из тех случаев, когда ассемблер лучше ЯВУ.

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

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

Tue Jul 04 2006 15:05, Slav Matveev wrote to Olga Nonova:

ON>> ... становилось обязательным требование, ON>> чтобы выражение при switch принимало значения 0,1,2,3... Т.е. индекс ON>> для таблицы jamp-ов. Иначе я не представляю, как пользоваться такой ON>> таблицей.

SM> неиспользуемые значения ведут на конец swtich'а.

Проблема в другом. В С++ нормально, но неэффективно для ембеднутых работает такая конструкция переключателя:

switch (SomeChar) { case 'A': Do_A(); break; case 'B': Do_B(); break; default: Dо_Default(); break; }

Допустима в С (без плюсов) такая конструкция из значений case-ов? И что компильнет компилятор- тоже очень интересно.

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

Hello, Olga! You wrote to Alexandr Torres on Tue, 4 Jul 2006 14:34:44 +0000 (UTC):

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

ON> Tue Jul 04 2006 15:23, Alexandr Torres wrote to Olga Nonova:

ON>>> ïÄÎÁËÏ, ÎÅ ÚÎÁÀ ËÁË × ÐÒÏÓÔÏ ó, ÎÏ × ó++ ÎÅÔ ÎÉËÁËÉÈ ÏÇÒÁÎÉÞÅÎÉÊ ÎÁ ON>>> ÔÉÐ É ÚÎÁÞÅÎÉÑ ×ÙÒÁÖÅÎÉÑ ÐÒÉ switch.

AT>> äÅÌÏ ÎÅ × ÏÇÒÁÎÉÞÅÎÉÑÈ ÎÁ ÔÉÐ × Ó×ÉÔÞÅ, Á ÎÁ äHë ÒÁÚÒÁÂÏÔÞÉËÁ, AT>> ÐÉÛÕÝÅÇÏ ÓÔÅÊ-ÍÁÛÉÎÕ.

ON> á ËÁË ÂÙÔØ Ó äHë Á×ÔÏÒÏ× C++?

á ÐÒÉÞÅÍ ÔÕÔ ÏÎÉ Ë ÓÔÅÊÔ-ÍÁÛÉÎÅ?

ON>>> ðÏ ÐÏ×ÏÄÕ "ÐÏ ÄÒÕÇÏÍÕ ÎÅ ÂÙ×ÁÅÔ" Ï ÎÕÍÅÒÁÃÉÉ ÓÏÓÔÏÑÎÉÊ ËÁË 0,1,2..., ON>>> ÔÏ × ÍÁËÒÏÁÓÓÅÍÂÌÅÒÅ ÅÓÔØ ÞÒÅÚ×ÙÞÁÊÎÏ ÉÚÑÝÎÏÅ ÒÅÛÅÎÉÅ Ó ON>>> ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ indirect jmp-Á, Á ÒÅÇÉÓÔÒ-ÕËÁÚÁÔÅÌØ ÐÒÉÎÉÍÁÅÔ ÚÎÁÞÅÎÉÑ ON>>> ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÁÄÒÅÓÏ× ÍÅÔÏË ÐÅÒÅÈÏÄÁ. éÍÅÎÁ ÍÅÔÏË É ÎÅÓÕÔ × ÓÅÂÅ ON>>> ÎÁÚ×ÁÎÉÅ ÓÔÅÊÔÏ×. ðÒÉ ÜÔÏÍ ÎÅ ÎÁÄÏ ÎÉËÁËÉÈ ÔÁÂÌÉà jmp-Ï× É ON>>> ÐÅÒÅËÏÄÉÒÏ×ÏË ÉÚ ÉÎÄÅËÓÏ× × ÆÉÚÉÞÅÓËÉÅ ÁÄÒÅÓÁ. öÁÌØ, ÞÔÏ ÎÉÞÅÇÏ ON>>> ÐÏÄÏÂÎÏÇÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ ÐÏÈÏÖÅ ÎÅÌØÚÑ.

AT>> é ÎÅ ÎÁÄÏ ÓÁÍÏÍÕ, ËÏÍÐÉÌÑÔÏÒ ×ÓÅ ÓÄÅÌÁÅÔ, ÅÓÌÉ ÏÎ ÎÅ ÕÂÏÇÉÊ.

ON> "üÔÏ ×ÒÑÄ-ÌÉ".(Ó) ðÒÏÓÔÏ, ÚÄÅÓØ ÏÄÉÎ ÉÚ ÔÅÈ ÓÌÕÞÁÅ×, ËÏÇÄÁ ÁÓÓÅÍÂÌÅÒ ON> ÌÕÞÛÅ ñ÷õ.

ïÞÅÒÅÄÎÁÑ ÇÌÕÐÏÓÔØ "ËÏÌÌÅËÔÉÆÆÁ ÁÆÆÔÁÒÏ×". ON> ÷ÓÅÇÏ ÷ÁÍ èÏÒÏÛÅÇÏ ON> ïÌØÇÁ

With best regards, Alexandr Torres. E-mail: snipped-for-privacy@yahoo.com [ öÁÍÓÔ×Õ ÂÏÊ !]

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Olga Nonova! You wrote in conference fido7.ru.embedded to Alexandr Torres on Tue, 4 Jul

2006 14:34:44 +0000 (UTC):

ON>>> ïÄÎÁËÏ, ÎÅ ÚÎÁÀ ËÁË × ÐÒÏÓÔÏ ó, ÎÏ × ó++ ÎÅÔ ÎÉËÁËÉÈ ÏÇÒÁÎÉÞÅÎÉÊ ON>>> ÎÁ ÔÉÐ É ÚÎÁÞÅÎÉÑ ×ÙÒÁÖÅÎÉÑ ÐÒÉ switch.

AT>> äÅÌÏ ÎÅ × ÏÇÒÁÎÉÞÅÎÉÑÈ ÎÁ ÔÉÐ × Ó×ÉÔÞÅ, Á ÎÁ äHë ÒÁÚÒÁÂÏÔÞÉËÁ, AT>> ÐÉÛÕÝÅÇÏ ÓÔÅÊ-ÍÁÛÉÎÕ.

ON> á ËÁË ÂÙÔØ Ó äHë Á×ÔÏÒÏ× C++?

ðÒÏÂÌÅÍÁ × äîë ÔÅÈ, ËÔÏ ÂÅÒÅÔÓÑ ÏÃÅÎÉ×ÁÔØ ÑÚÙËÉ ÎÉ ÒÁÚÕ ÉÈ ÎÅ ÚÎÁÑ.

ON>>> ðÏ ÐÏ×ÏÄÕ "ÐÏ ÄÒÕÇÏÍÕ ÎÅ ÂÙ×ÁÅÔ" Ï ÎÕÍÅÒÁÃÉÉ ÓÏÓÔÏÑÎÉÊ ËÁË ON>>> 0,1,2..., ÔÏ × ÍÁËÒÏÁÓÓÅÍÂÌÅÒÅ ÅÓÔØ ÞÒÅÚ×ÙÞÁÊÎÏ ÉÚÑÝÎÏÅ ÒÅÛÅÎÉÅ Ó ON>>> ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ indirect jmp-Á, Á ÒÅÇÉÓÔÒ-ÕËÁÚÁÔÅÌØ ÐÒÉÎÉÍÁÅÔ ON>>> ÚÎÁÞÅÎÉÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÁÄÒÅÓÏ× ÍÅÔÏË ÐÅÒÅÈÏÄÁ. éÍÅÎÁ ÍÅÔÏË É ON>>> ÎÅÓÕÔ × ÓÅÂÅ ÎÁÚ×ÁÎÉÅ ÓÔÅÊÔÏ×. ON>>> ðÒÉ ÜÔÏÍ ÎÅ ÎÁÄÏ ÎÉËÁËÉÈ ÔÁÂÌÉà jmp-Ï× É ÐÅÒÅËÏÄÉÒÏ×ÏË ÉÚ ÉÎÄÅËÓÏ× ON>>> × ÆÉÚÉÞÅÓËÉÅ ÁÄÒÅÓÁ. öÁÌØ, ÞÔÏ ÎÉÞÅÇÏ ÐÏÄÏÂÎÏÇÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ ON>>> ÐÏÈÏÖÅ ÎÅÌØÚÑ.

AT>> é ÎÅ ÎÁÄÏ ÓÁÍÏÍÕ, ËÏÍÐÉÌÑÔÏÒ ×ÓÅ ÓÄÅÌÁÅÔ, ÅÓÌÉ ÏÎ ÎÅ ÕÂÏÇÉÊ.

ON> "üÔÏ ×ÒÑÄ-ÌÉ".(Ó) ðÒÏÓÔÏ, ÚÄÅÓØ ÏÄÉÎ ÉÚ ÔÅÈ ÓÌÕÞÁÅ×, ËÏÇÄÁ ÁÓÓÅÍÂÌÅÒ ON> ÌÕÞÛÅ ñ÷õ.

üÔÏ ËÁË ÒÁÚ × ÔÏÞÎÏÓÔÉ ÏÂÒÁÔÎÙÊ ÜÔÏÍÕ ÐÒÉÍÅÒ.

dima

formatting link

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Olga Nonova! You wrote in conference fido7.ru.embedded to Slav Matveev on Tue, 4 Jul 2006 14:48:55

+0000 (UTC):

ON>>> ... ÓÔÁÎÏ×ÉÌÏÓØ ÏÂÑÚÁÔÅÌØÎÙÍ ÔÒÅÂÏ×ÁÎÉÅ, ÞÔÏÂÙ ×ÙÒÁÖÅÎÉÅ ÐÒÉ ON>>> switch ÐÒÉÎÉÍÁÌÏ ÚÎÁÞÅÎÉÑ 0,1,2,3... ô.Å. ÉÎÄÅËÓ ÄÌÑ ÔÁÂÌÉÃÙ ON>>> jamp-Ï×. éÎÁÞÅ Ñ ÎÅ ÐÒÅÄÓÔÁ×ÌÑÀ, ËÁË ÐÏÌØÚÏ×ÁÔØÓÑ ÔÁËÏÊ ÔÁÂÌÉÃÅÊ.

SM>> ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ÚÎÁÞÅÎÉÑ ×ÅÄÕÔ ÎÁ ËÏÎÅà swtich'Á.

ON> ðÒÏÂÌÅÍÁ × ÄÒÕÇÏÍ.

÷ äîë ÞÌÅÎÏ× ×ÁÛÅÇÏ ËÏÌÌÅËÔÉ×Á.

ON> ÷ ó++ ÎÏÒÍÁÌØÎÏ, ÎÏ ÎÅÜÆÆÅËÔÉ×ÎÏ ÄÌÑ ÅÍÂÅÄÎÕÔÙÈ ÒÁÂÏÔÁÅÔ ÔÁËÁÑ ON> ËÏÎÓÔÒÕËÃÉÑ ÐÅÒÅËÌÀÞÁÔÅÌÑ:

îÏÒÍÁÌØÎÏ É ×ÐÏÌÎÅ ÜÆÆÅËÔÉ×ÎÏ.

ON> switch (SomeChar) { ON> case 'A': Do_A(); break; ON> case 'B': Do_B(); break; ON> default: DÏ_Default(); break; ON> }

ON> äÏÐÕÓÔÉÍÁ × ó (ÂÅÚ ÐÌÀÓÏ×) ÔÁËÁÑ ËÏÎÓÔÒÕËÃÉÑ ÉÚ ÚÎÁÞÅÎÉÊ case-Ï×?

ëÏÎÅÞÎÏ, Á ÕÞÅÂÎÉË ÐÏ ó ÎÅ ÐÒÏÂÏ×ÁÌÉ ÞÉÔÁÔØ?

ON> é ÞÔÏ ËÏÍÐÉÌØÎÅÔ ËÏÍÐÉÌÑÔÏÒ- ÔÏÖÅ ÏÞÅÎØ ÉÎÔÅÒÅÓÎÏ.

óËÏÍÐÉÌÉÒÕÊÔÅ É ÓÍÏÔÒÉÔÅ.

dima

formatting link

 X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Anatoly Mashanov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Tue, 04 Jul

2006 23:27:48 +0400:

ON>>> ïÞÅÎØ ÈÏÞÅÔÓÑ ÕÚÎÁÔØ, ËÁË ÎÁÉÂÏÌÅÅ ÜÆÆÅËÔÉ×ÎÏ × ó ÒÅÁÌÉÚÏ×ÁÔØ ON>>> subj. ðÒÏÓÔÅÊÛÉÊ ÐÒÉÅÍ ÞÅÒÅÚ ÏÐÅÒÁÔÏÒ switch ÍÎÅ ÉÚ×ÅÓÔÅÎ, ÎÏ ×ÅÄØ ON>>> ÏÎ, ÐÏÈÏÖÅ, ÒÁÂÏÔÁÅÔ ÐÅÒÅÂÏÒÏÍ ×ÓÅÈ case-Ï×.

DO>> ïÔËÒÏÊÔÅ ÄÌÑ ÓÅÂÑ ÏÐÅÒÁÔÏÒ break

AM> ðÒÉÞÅÍ ÚÄÅÓØ break?

åÓÌÉ ÎÅ ÎÕÖÎÏ ×ÓÅ ÐÅÒÅÂÉÒÁÔØ.

AM> break ÎÁ ÕÒÏ×ÎÅ ÍÁÛÉÎÎÏÇÏ ÑÚÙËÁ ÚÁÍÅÎÑÅÔÓÑ ÎÁ ÅÄÉÎÓÔ×ÅÎÎÙÊ ÏÐÅÒÁÔÏÒ AM> ÐÅÒÅÈÏÄÁ. á ÏÐÅÒÁÔÏÒ switch × ÏÂÝÅÍ ÓÌÕÞÁÅ ÚÁÍÅÎÑÅÔÓÑ ÎÁ ÃÅÐÏÞËÕ AM> ÕÓÌÏ×ÎÙÈ ÏÐÅÒÁÔÏÒÏ× ÐÅÒÅÈÏÄÁ ÐÏ ÏÄÎÏÍÕ ÎÁ ÕÓÌÏ×ÉÅ.

éÌÉ, ÞÔÏ ÞÁÝÅ, ÎÁ ÐÅÒÅÈÏÄ ÐÏ ÔÁÂÌÉÃÅ. ÷ ÎÅËÏÔÏÒÙÈ ËÏÍÐÉÌÑÔÏÒÁÈ ÜÔÏ ÐÒÁÇÍÁÍÉ ÚÁÄÁÅÔÓÑ, Á ÎÅËÏÔÏÒÙÅ ÓÁÍÉ ×ÙÂÉÒÁÀÔ ÂÏÌÅÅ ËÏÍÐÁËÔÎÙÊ ËÏÄ.

AM> éÎÁÞÅ ÇÏ×ÏÒÑ, ÎÁ ËÁÖÄÙÊ case N ÍÙ ÐÏÌÕÞÁÅÍ movf state,w; xorlw N; AM> btfsc status,z; bra next_case (üÔÏ Ñ ÄÌÑ ÐÉËÁ ÐÉÛÕ - ÍÏÖÎÏ ÂÙÌÏ ÂÙ AM> ÐÏÓÔÁ×ÉÔØ É ÌÀÂÕÀ ÄÒÕÇÕÀ ÍÁÛÉÎÕ) - É ÔÁËÉÈ ÓÒÁ×ÎÅÎÉÊ ÍÎÏÇÏ!

á ×ÏÔ ÞÔÏ ÎÁÓÔÏÑÝÉÊ ËÏÍÐÉÌÑÔÏÒ ÐÉÛÅÔ ÄÌÑ ÓÌÕÞÁÑ ÓÒÁ×ÎÅÎÉÊ:

46 ;bits.c: 28: switch (c)

47 07E3 2FED goto l5 48 07E4 l6 49 ;bits.c: 29: { 50 07E4 3002 movlw 2 51 07E5 2FEB goto L3 52 07E6 l7 53 ;bits.c: 31: case 'c': f(5); break; 54 07E6 3005 movlw 5 55 07E7 2FEB goto L3 56 07E8 l8 57 ;bits.c: 32: case 'f': f(7); break; 58 07E8 3007 movlw 7 59 07E9 2FEB goto L3 60 07EA l9 61 ;bits.c: 33: case 'd': f(3); break; 62 07EA 3003 movlw 3 63 07EB L3 64 07EB 27D7 fcall _f 65 07EC 2FFC goto l4 66 07ED l5 67 07ED 1283 bcf 3,5 68 07EE 1303 bcf 3,6 ;carry unused 69 07EF 0820 movf _c,w 70 07F0 3A61 xorlw 97 71 07F1 1903 btfsc 3,2 72 07F2 2FE4 goto l6 73 07F3 3A02 xorlw 2 74 07F4 1903 btfsc 3,2 75 07F5 2FE6 goto l7 76 07F6 3A07 xorlw 7 77 07F7 1903 btfsc 3,2 78 07F8 2FEA goto l9 79 07F9 3A02 xorlw 2 80 07FA 1903 btfsc 3,2 81 07FB 2FE8 goto l8 82 07FC l4 ÷ÁÒÉÁÎÔ Ó ÔÁÂÌÉÃÅÊ ÓÌÉÛËÏÍ ÇÒÏÍÏÚÄËÉÊ ÄÌÑ ÚÄÅÓØ.

dima

formatting link

formatting link
раздел автоматы. Там ещё ссылки есть.

Афтары жжоте. При достаточно большом числе вариантов это реализуется (опреатор switch) -- таблично.

А класс со всми насквозь виртуальнымми функциями -- это не проигрыш в скорости. А то у некоторых архитектур ещё сложности с вызовом по ссылке...

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required