State_Maschine

Jul 03, 2006 113 Replies

enum {S0=0, S1, S2, S3, S4...} state;

Точно.

Ещё интересный вариант -- указатель на функцию-состояние. Впрочем, я склоняюсь к тому, чтобы иметь состояние представимое в числовом виде (как в случае с switch-case) и дополнительно указатель на функцию, для быстрого выбора нужного состояния (первое нужно для просверки состояния в других автоматах, а действия в разных состояниях могут быть объединены в одну функцию). Плюс нужен какой-то планировщик для запуска автоматов. Иначе неэффективно, тратится масса времени на бесполезные проверки условий переходов.

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

Tue Jul 04 2006 19:12, Nicolas Minakov wrote to Olga Nonova:

NM> Ольга, так а что у Вас получилось?

Да, у меня все работает. Гложет только ощущение неэффективности компиляции, которая впрочем с лихвой компенсируется быстродействием процессора.

NM> Чем компилировали? Под какой камень? Тут достаточно квалифицированных NM> людей, чтоб помочь, конечно если оно Вам действительно нужно.

Спасибо на добром слове. А то я уже отчаялась получить в ответ что-либо, кроме бессмысленного хамства. Работаю я с MCF5270 "ColdFire", это из серии 68K от FreeScale. Пакет разработки на С++ от GNU. И я столкнулась с проблемой, что в С++ (не только в GNU компайлере!) оператор switch производит перебор всех case-ов, пока не произойдет сравнение с искомым. Та-же история и в Дельи. Внимание, вопрос: Какие есть варианты реализовать в С++ или Дельфях максимально эффективное ветвление, чтоб без перебора и без ограничений на тип выражения case-ов?

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

Hello Dmitry!

04 Jul 06 07:18, you wrote to Olga Nonova:

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

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

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

Anatoly

Афтары зажигают аж жуть. Во-первых не всех. А вплоть до log2(N). А во вторых есть и табличный метод. И наконец -O3 -Wall и -S в студию.

ðÒÉ×ÅÔ, Olga !

04 Jul 06 , 18:34 Olga Nonova ÐÉÓÁÌ Ë Alexandr Torres:

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

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

HÅ ÐÏÌØÚÏ×ÁÔØÓÑ ÜÔÉÍ äHë. ëÁË ÖÅ Åݣ?

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... ÷ÉÇ×ÁÍ ÉÚ ÓÌÏÎÏ×ÏÊ ËÏÓÔÉ

ðÒÉ×ÅÔ, Anatoly !

05 Jul 06 , 00:27 Anatoly Mashanov ÐÉÓÁÌ Ë Dmitry Orlov:

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

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

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

ðÏÉÓË - ÎÅ ÏÂÑÚÁÔÅÌØÎÏ ÌÉÎÅÊÎÙÊ. äÁÖÅ ÂÅÚ ÉÎÓÔÒÕËÃÉÉ ÔÁÂÌÉÞÎÏÇÏ ÐÅÒÅÈÏÄÁ ÍÏÖÎÏ ×ÍÅÓÔÏ cmp ax,0 je label_0 cmp ax,1 je label_1 .... ÓÄÅÌÁÔØ ÐÏÉÓË ÐÏÌÏ×ÉÎÎÙÍ ÄÅÌÅÎÉÅÍ Ó o(log(n)) ÓÒÁ×ÎÅÎÉÑÍÉ ×ÍÅÓÔÏ n.

. ó Õ×ÁÖÅÎÉÅÍ, HÉËÉÔÁ. icq:240059686, lj-user:nicka_startcev ... ÷ÉÇ×ÁÍ ÉÚ ÓÌÏÎÏ×ÏÊ ËÏÓÔÉ

Hi Olga!

04 Jul 06 18:48, Olga Nonova wrote to Slav Matveev:

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> ÞÔÏ ËÏÍÐÉÌØÎÅÔ ËÏÍÐÉÌÑÔÏÒ- ÔÏÖÅ ÏÞÅÎØ ÉÎÔÅÒÅÓÎÏ.

ÓÕÄÁÒÙÎÑ! ÎÁ
formatting link
ÒÁÚÄÁÀÔ ÚÁÂÅÓÐÌÁÔÎÏ ÎÅÐÌÏÈÏÊ ËÏÍÐÉÌÑÔÏÒ ó/ó++. ðÏÞÅÍÕ ÂÙ ×ÁÍ ÎÅ ÚÁÉÍÅÔØ ÓÅÂÅ ËÏÍÐÉÌÑÔÏÒ É ÎÅ ÐÏÜËÓÐÅÒÉÍÅÎÔÉÒÏ×ÁÔØ × ËÁËÏÊ ÁÓÓÅÍÂÌÅÒÎÙÊ ËÏÄ ËÁËÏÊ ÉÓÈÏÄÎÙÊ ÔÅËÓÔ ÐÒÅÏÂÒÁÚÕÅÔÓÑ? íÏÖÅÔ ÂÙÔØ ÎÁ ÐÏÎÉÍÁÎÉÅ ×ÁÓ ÎÁÔÏÌËÎÅÔ ÒÕÇÁÎØ ËÏÍÐÌÑÔÏÒÁ: case label does not reduce to an integer constant ? ÷ÁÛ ÖÅ ÄÅÔÓËÉÊ ÌÅÐÅÔ ÔÒÁÎÓÌÉÒÕÅÔÓÑ × ËÏÄ:

movb SomeChar, %al movsbl %al,%eax movl %eax, -4(%ebp) cmpl $65, -4(%ebp) je .L3 cmpl $66, -4(%ebp) je .L4 jmp .L2 .L3: call Do_A jmp .L5 .L4: call Do_B jmp .L5 .L2: call Do_Default .L5:

÷ ÓÌÕÞÁÅ Ó ÂÏÌØÛÉÍ ËÏÌÉÞÅÓÔ×ÏÍ case'Ï× × ÍÅÎÅÅ ËÒÁÓÉ×ÙÊ ËÏÄ Ó jmp'ÏÍ ÐÏ ÔÁÂÌÉÃÅ. åÓÌÉ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÔÏÌØËÏ Do_A(), Á ÎÅ { ... } × ÁÓÓÅÍÂÌÅÒÅ ÍÏÖÎÏ ÂÙÌÏ ÂÙ ÏÂÏÊÔÉÓØ call'ÏÍ ÐÏ ÔÁÂÌÉÃÅ. ÎÏ ÎÉËÔÏ ÎÅ ÍÅÛÁÅÔ ×ÍÅÓÔÏ ÔÁËÏÇÏ swtich'Á ÓÄÅÌÁÔØ ÍÁÓÓÉ× ÕËÁÚÁÔÅÌÅÊ ÎÁ ÆÕÎËÃÉÉ É ×ÙÚÙ×ÁÔØ ÆÕÎËÃÉÀ ÐÏ ÉÎÄÅËÓÕ SomeChar-'A'.

ps. ÕËÁÚÁÎÎÙÊ ËÏÄ ÓÇÅÎÅÒÉÒÏ×ÁÎ gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)

Slav.

Hello, Igor! You wrote to Olga Nonova on Tue, 04 Jul 2006 00:21:58 +0400:

IU> ñ ÚÎÁÀ ÔÏÌØËÏ Ä×Á ÓÐÏÓÏÂÁ. ÷ÔÏÒÏÊ ÜÔÏ ÍÁÓÓÉ× ÓÓÙÌÏË ÎÁ ÆÕÎËÃÉÉ. ôÁËÖÅ IU> ÈÏÔÅÌÏÓØ ÂÙ ÕÚÎÁÔØ ÅÝÅ ÓÐÏÓÏÂÙ. GCC ÐÏÚ×ÏÌÑÅÔ ÄÅÌÁÔØ ÕËÁÚÁÔÅÌÉ ÎÁ ÍÅÔËÉ, É ÄÅÌÁÔØ goto ÎÁ ÜÔÉ ÕËÁÚÁÔÅÌÉ. ôÏ ÅÓÔØ, ÍÏÖÎÏ ÓÄÅÌÁÔØ ÍÁÓÓÉ× ÓÓÙÌÏË ÎÁ ÍÅÔËÉ. ðÒÉÍÅÒÎÏ ÔÁË:

void *states[] = { &&a, &&b, &&c }; for(;;) { goto states[i]; ... a: do_state_1(); ... continue; b: do_state_2(); ... continue; c: do_state_3(); ... continue; }

÷ÐÒÏÞÅÍ, ÏÎ ÓÁÍ ÕÍÅÅÔ ÒÁÓËÒÙ×ÁÔØ switch × ÔÁËÏÊ ÍÁÓÓÉ×, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ ÎÅ ÎÁÄÏ ÐÏÌØÚÏ×ÁÔØÓÑ ÎÅÓÔÁÎÄÁÒÔÎÙÍÉ ÒÁÓÛÉÒÅÎÉÑÍÉ C.

With best regards, Serg.

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

Wed Jul 05 2006 12:48, Slav Matveev wrote to Olga Nonova:

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

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

SM> сударыня! на

formatting link
раздают забесплатно неплохой SM> компилятор С/С++. Почему бы вам не заиметь себе компилятор и SM> не поэкспериментировать в какой ассемблерный код какой SM> исходный текст преобразуется? SM> Может быть на понимание вас натолкнет ругань SM> комплятора: case label does not reduce to an integer constant ?

SM> Ваш же детский лепет транслируется в код:

SM> movb SomeChar, %al SM> movsbl %al,%eax SM> movl %eax, -4(%ebp) SM> cmpl $65, -4(%ebp) SM> je .L3 SM> cmpl $66, -4(%ebp) SM> je .L4 SM> jmp .L2 SM> .L3: SM> call Do_A SM> jmp .L5 SM> .L4: SM> call Do_B SM> jmp .L5 SM> .L2: SM> call Do_Default SM> .L5:

Иными словами, видим полный перебор case-ов. Что и требовалось доказать.

SM> В случае с большим количеством case'ов в менее красивый код SM> с jmp'ом по таблице.

Да-да, речь идет именно о количестве case-ов в районе десятка. И как же тогда получить "красивый код" с таблицей jmp-ов, если выражение при switch не дает, как я Вам представила на примере, регулярных значений из ряда 0,1,2...? Hикак этого у Вас не получится, а по-прежнему будет тухлый перебор всех подряд.

Если действительно только Do_A(), а не SM> { ... } в ассемблере можно было бы обойтись call'ом по таблице. SM> но никто не мешает вместо такого swtich'а сделать массив SM> указателей на функции и вызывать функцию по индексу SomeChar-'A'.

Выношу на Ваш суд мое решение State_Machine, максимально приближенное к оптимальному ассемблерному решению ветвления по указателям. Обращаю особое внимание- мой вариант не требует ни целочисленных индексов, ни таблиц jmp-ов. Ветвление производится максимально быстро и с фиксированной задержкой.

//Вот три макроса для построения любой State_Machine.

#define StateMachine(MyName) void(*MyName)() #define ExecStateOf(StateMachine) (*StateMachine)() #define SetState(StateMachine,NewState) StateMachine=NewState;

//Среди переменных задачи декларируете указатель

StateMachine(SM);

//И пишете действия в состояниях в виде функций, например, их три штуки void State3() {/*DoSomthing3*/;} void State2() {/*DoSomthing2*/;} void State1() {/*DoSomthing1*/;}

//Затем в исполняемых кодах инициализируете конечный автомат SetState(SM,State1); // и приступаете к циклическим вызовам его действий ExecStateOf(SM); //Внутри этих действий Вам не возбраняется переключать состояния SetState(SM,StateN);

У меня, к сожалению, не получается получить ассемблерный текст watcom-овского компилятора. Может Вы попробуете оценить эффективность такого решения? Hиже полный исходный текст консольного приложения для C++. Сколько в нем занимает выполнение непосредственно ExecStateOf(SM)? Была бы чрезвычайно благодарна.

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

#include <iostream>

#include <stdlib.h>

#define StateMachine(MyName) void(*MyName)() #define ExecStateOf(StateMachine) (*StateMachine)() #define SetState(StateMachine,NewState) StateMachine=NewState;

using namespace std;

StateMachine(SM);

void State3() {cout << "3" << endl;} void State2() {cout << "2" << endl; SetState(SM,State3);} void State1() {cout << "1" << endl; SetState(SM,State2);}

int main(int argc, char *argv[]) { SetState(SM,State1); ExecStateOf(SM); ExecStateOf(SM); ExecStateOf(SM);

system("PAUSE"); return 0; }

С чего бы это? Строковые константы представимы как целые с соответствующим ASCII кодом...

Не полный, а до первого совпадения. Что это доказывает -- я не знаю. Но умаю, что ничего.

Компилятр в отличии от вас не дурак и понимает, что в случае небольшого числа вариантов таблица -- неоптимальный вариант.

Думаешь, если Писать В дРеБезЖащёМ рГисТРе -- оно лучше заработает? Вот что хуже -- точно. Я даже скажу почэему -- макрос не отличить от функции.

Поная ерунда. В Keil для x51 замучаешься ручками (придётся тки скрипт написать) линкерный файл править, догадайся для чего... Плс я уже писал

-- числовой номер он важен и первичен. А это -- лишь мето д оптимизации.

Обязательно в дребезжащем регистре. А то не заработает! И ещё незабудьте озаботиться вопросом области видимости переменных вашего автомата.

При этом он уже выполняет переход из /неизвестного состояния/ в первое. Ключевое слово -- неизвестного.

^^^^^^^^^^

Вас так беспокоил десяток-другой тактов на switch-case?

formatting link
Там проделана достаточно большая работа.

Это не C++, это -- херня.

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

Wed Jul 05 2006 21:36, Kirill Frolov wrote to Olga Nonova:

KF> Это не C++, это -- херня.

Херня, оно может быть и херня. Hо, ведь прекрасно работает! Очень быстро и с фиксированным временем на любое ветвление. Что кроет любые Ваши обсирания вокруг да около.

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

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

Wed Jul 05 2006 08:20, Ruslan Mohniuc wrote to Olga Nonova:

RM> Комментарии, надеюсь, не нужны?

В данном случае не нужны. Попробуйте теперь: case 'A':.... case 'ы':.... case '1':.... case 'Ж':....

Коментарии нужны?

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

Hello, Olga! You wrote to Ruslan Mohniuc on Wed, 5 Jul 2006 21:22:49 +0000 (UTC):

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

ON> Wed Jul 05 2006 08:20, Ruslan Mohniuc wrote to Olga Nonova:

RM>> ëÏÍÍÅÎÔÁÒÉÉ, ÎÁÄÅÀÓØ, ÎÅ ÎÕÖÎÙ?

ON> ÷ ÄÁÎÎÏÍ ÓÌÕÞÁÅ ÎÅ ÎÕÖÎÙ. ðÏÐÒÏÂÕÊÔÅ ÔÅÐÅÒØ: ON> case 'A':.... ON> case 'Ù':.... ON> case '1':.... ON> case 'ö':....

ON> ëÏÍÅÎÔÁÒÉÉ ÎÕÖÎÙ?

äÁ. ËÏÍÍÕÎÔÁÒÉÉ ÎÕÖÎÙ. öÅÌÁÔÅÌØÎÏ × ×ÉÄÅ ÁÎÁÌÉÚÁ äîë ÔÏÇÏ ÐÒÏÇÒÁÍÍÉÓÔÁ. ËÏÔÏÒÙÊ ÓÄÅÌÁÌ ÔÁËÉÅ ÓÏÓÔÏÑÎÉÑ × ÓÔÅÊÔ-ÍÁÛÉÎÅ. ÷ ËÒÁÊÎÅÍ ÓÌÕÞÁÊ - ÅÇÏ IQ*100, ÎÅ ÌÀÂÌÀ ÄÒÏÂÎÙÅ ÃÉÆÒÙ Ó ÎÕÌÅ×ÙÍ ÃÅÌÙÍ.

With best regards, Alexandr Torres.

[ öÁÍÓÔ×Õ ÂÏÊ ! ]

2:461/28, E-mail: snipped-for-privacy@yahoo.com

formatting link

Hi Kirill!

05 Jul 06 20:34, Kirill Frolov wrote to Slav Matveev:

KF> ó ÞÅÇÏ ÂÙ ÜÔÏ? óÔÒÏËÏ×ÙÅ ËÏÎÓÔÁÎÔÙ ÐÒÅÄÓÔÁ×ÉÍÙ ËÁË ÃÅÌÙÅ Ó KF> ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍ ASCII ËÏÄÏÍ...

Ñ ÈÏÔÅÌ ÓËÁÚÁÔØ ÞÔÏ ÅÓÌÉ ËÏÎÓÔÁÎÔÁ reduce to an integer ÔÏ ×ÓÅ ÎÏÒÍÁÌØÎÏ, Á ÅÓÌÉ does not reduce - ÎÁÄÏ ÞÔÏ-ÔÏ ÐÒÅÄÐÒÉÎÉÍÁÔØ.

Slav.

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

Thu Jul 06 2006 01:57, Alexandr Torres wrote to Olga Nonova:

ON>> case 'A':.... ON>> case 'ы':.... ON>> case '1':.... ON>> case 'Ж':....

ON>> Коментарии нужны?

AT> Да. коммунтарии нужны.

Извольте. Кто программировал ПЛИСы знают, что состояния State_Machine часто задают принудительно в виде управляющих кодовых последовательностей. Эти последовательности выбирают как удобно, не обязательно в виде целых чисел, бегущей "1" или кода Грея. Для ваших любимых ПИКов- это может быть значение в регистре порта вывода, на котором хочется получить желаемую лично Вам последовательность кодов. Таким образом, выражением при switch будет именно этот порт, и вполне может оказаться необходимым распознавать на нем значения из моего примера: 'A','ы','1','Ж'.

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

PS. ДHК не беспокоит?

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

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

2006 07:10:54 +0000 (UTC):

ON>>> case 'A':.... ON>>> case 'Ù':.... ON>>> case '1':.... ON>>> case 'ö':....

ON>>> ëÏÍÅÎÔÁÒÉÉ ÎÕÖÎÙ?

AT>> äÁ. ËÏÍÍÕÎÔÁÒÉÉ ÎÕÖÎÙ.

ON> éÚ×ÏÌØÔÅ. ëÔÏ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÌ ðìéóÙ ÚÎÁÀÔ, ÞÔÏ ÓÏÓÔÏÑÎÉÑ ON> State_Machine ÞÁÓÔÏ ÚÁÄÁÀÔ ÐÒÉÎÕÄÉÔÅÌØÎÏ × ×ÉÄÅ ÕÐÒÁ×ÌÑÀÝÉÈ ËÏÄÏ×ÙÈ

÷ ÓÌÕÞÁÅ ÕÐÒÁ×ÌÑÀÝÉÈ ÐÒÏÇÒÁÍÍ - ÎÅ ÞÁÓÔÏ.

ON> PS. äHë ÎÅ ÂÅÓÐÏËÏÉÔ?

âÅÓÐÏËÏÑÔ ÏÛÉÂËÉ × äîë ×ÁÛÅÇÏ ËÏÌÌÅËÔÉ×Á.

dima

formatting link

Hello, Olga! You wrote to Alexandr Torres on Thu, 6 Jul 2006 07:10:54 +0000 (UTC):

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

ON> Thu Jul 06 2006 01:57, Alexandr Torres wrote to Olga Nonova:

ON>>> case 'A':.... ON>>> case 'Ù':.... ON>>> case '1':.... ON>>> case 'ö':....

ON>>> ëÏÍÅÎÔÁÒÉÉ ÎÕÖÎÙ?

AT>> äÁ. ËÏÍÍÕÎÔÁÒÉÉ ÎÕÖÎÙ.

ON> éÚ×ÏÌØÔÅ. ëÔÏ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÌ ðìéóÙ ÚÎÁÀÔ, ÞÔÏ ÓÏÓÔÏÑÎÉÑ State_Machine

íÙ ÎÅ ÏÂÓÕÖÄÁÅÍ ðìéóÙ É AHDL/VHDL, ÍÙ ÏÂÓÕÖÄÅÍ ÍÉËÒÏËÏÎÔÒÏÌÌÅÒÙ É C/Asm.

ON> ÞÁÓÔÏ ÚÁÄÁÀÔ ÐÒÉÎÕÄÉÔÅÌØÎÏ × ×ÉÄÅ ÕÐÒÁ×ÌÑÀÝÉÈ ËÏÄÏ×ÙÈ ON> ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÅÊ. üÔÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ×ÙÂÉÒÁÀÔ ËÁË ÕÄÏÂÎÏ, ÎÅ ON> ÏÂÑÚÁÔÅÌØÎÏ × ×ÉÄÅ ÃÅÌÙÈ ÞÉÓÅÌ, ÂÅÇÕÝÅÊ "1" ÉÌÉ ËÏÄÁ çÒÅÑ. äÌÑ ×ÁÛÉÈ ON> ÌÀÂÉÍÙÈ ðéëÏ×- ÜÔÏ ÍÏÖÅÔ ÂÙÔØ ÚÎÁÞÅÎÉÅ × ÒÅÇÉÓÔÒÅ ÐÏÒÔÁ ×Ù×ÏÄÁ, ÎÁ ON> ËÏÔÏÒÏÍ ÈÏÞÅÔÓÑ ÐÏÌÕÞÉÔØ ÖÅÌÁÅÍÕÀ ÌÉÞÎÏ ÷ÁÍ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ËÏÄÏ×. ON> ôÁËÉÍ ÏÂÒÁÚÏÍ, ×ÙÒÁÖÅÎÉÅÍ ÐÒÉ switch ÂÕÄÅÔ ÉÍÅÎÎÏ ÜÔÏÔ ÐÏÒÔ, É ×ÐÏÌÎÅ ON> ÍÏÖÅÔ ÏËÁÚÁÔØÓÑ ÎÅÏÂÈÏÄÉÍÙÍ ÒÁÓÐÏÚÎÁ×ÁÔØ ÎÁ ÎÅÍ ÚÎÁÞÅÎÉÑ ÉÚ ÍÏÅÇÏ ON> ÐÒÉÍÅÒÁ: 'A','Ù','1','ö'.

ðÒÏÞÉÔÁÊÔÅ ÎÁËÏÎÅà ×ÓÅÍ ËÏÌÌÅËÔÉ×ÏÍ ÁÆÆÔÏÒÏ× ËÎÉÖËÕ ÐÏ óÉ, Á ÚÁÏÄÎÏ ÐÏÕÞÉÔÅÌØ ÐÉÓÁÔØ ÜÈÏÔÁÖÎÙÊ ÓÏÆÔ. üÔÏ ×ÁÍ ÐÏÍÏÖÅ × ÄÁÌØÎÅÊÛÅÍ ÄÁÁÔØ ×ÁÛÉ "ÂÅÓÃÅÎÎÙÅ ÒÅËÏÍÅÎÄÁÃÉÉ" (ÁËÁ "ÔÒÅÓËÏÔÎÀ") × ÜÈÁÈ.

ON> ÷ÓÅÇÏ ÷ÁÍ èÏÒÏÛÅÇÏ ON> ïÌØÇÁ

ON> PS. äHë ÎÅ ÂÅÓÐÏËÏÉÔ?

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

Hi Olga!

06 Jul 06 01:22, Olga Nonova wrote to Ruslan Mohniuc:

ON> ÷ ÄÁÎÎÏÍ ÓÌÕÞÁÅ ÎÅ ÎÕÖÎÙ. ðÏÐÒÏÂÕÊÔÅ ÔÅÐÅÒØ: ON> case 'A':.... ON> case 'Ù':.... ON> case '1':.... ON> case 'ö':....

ON> ëÏÍÅÎÔÁÒÉÉ ÎÕÖÎÙ?

ÎÕÖÎÙ. Ñ ÐÒÏÂÏ×ÁÌ. Ä×Á ÒÁÚÁ. Ó ÞÉÓÌÁÍÉ É Ó ÌÉÔÅÒÁÍÉ (ÞÔÏ, ÓÏÂÓÔ×ÅÎÎÏ ÔÏ ÖÅ ÓÁÍÏÅ, ÔÏÌØËÏ × ÐÒÏÆÉÌØ). Ä×Á ÓÒÁ×ÎÅÎÉÑ: ÎÁ ÍÉÎÉÍÁÌØÎÕÀ ËÏÎÓÔÁÎÔÕ É ÎÁ ÍÁËÓÉÍÁÌØÎÕÀ, ÄÁÌØÛÅ ÐÅÒÅÈÏÄ ÐÏ ÔÁÂÌÉÃÅ. ôÁÂÌÉÃÁ, ÐÒÁ×ÄÁ, ÐÏÌÕÞÁÅÔÓÑ ÄÀÖÅ "ÐÒÏÒÅÖÅÎÎÁÑ". á ×ÁÛÁ ÓÈÅÍÁ ÎÅ ÏÞÅÎØ ÈÏÒÏÛÏ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ËÏÇÄÁ ÓÏÓÔÏÑÎÉÑ ÎÁÄÏ ÂÕÄÅÔ ËÕÄÁ-ÌÉÂÏ ÐÅÒÅÄÁ×ÁÔØ ÉÌÉ ÐÒÉÎÉÍÁÔØ, ÎÁÐÒÉÍÅÒ. áÄÒÅÓ ÆÕÎËÃÉÉ × ÜÔÏÍ ÓÌÕÞÁÅ ÎÅ ÓÁÍÁÑ ÌÕÞÛÁÑ ËÏÎÓÔÁÎÔÁ, ÐÏ-ÍÏÅÍÕ.

Slav.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required