State_Maschine

Jul 03, 2006 113 Replies

Hi Olga!

05 Jul 06 20:16, Olga Nonova wrote to Slav Matveev:

SM>> jmp .L5 SM>> .L2: SM>> call Do_Default SM>> .L5:

ON> éÎÙÍÉ ÓÌÏ×ÁÍÉ, ×ÉÄÉÍ ÐÏÌÎÙÊ ÐÅÒÅÂÏÒ case-Ï×. þÔÏ É ÔÒÅÂÏ×ÁÌÏÓØ ON> ÄÏËÁÚÁÔØ. ÉÎÙÍÉ ÓÌÏ×ÁÍÉ Ó Ä×ÕÍÑ ËÅÊÓÁÍÉ ÐÒÏÝÅ ÉÚ ÐÅÒÅÂÒÁÔØ, ÞÅÍ ÔÁÂÌÉÃÕ ÇÏÒÏÄÉÔØ.

ON> äÁ-ÄÁ, ÒÅÞØ ÉÄÅÔ ÉÍÅÎÎÏ Ï ËÏÌÉÞÅÓÔ×Å case-Ï× × ÒÁÊÏÎÅ ÄÅÓÑÔËÁ. é ËÁË ON> ÖÅ ÔÏÇÄÁ ÐÏÌÕÞÉÔØ "ËÒÁÓÉ×ÙÊ ËÏÄ" Ó ÔÁÂÌÉÃÅÊ jmp-Ï×, ÅÓÌÉ ×ÙÒÁÖÅÎÉÅ ÐÒÉ ON> switch ÎÅ ÄÁÅÔ, ËÁË Ñ ÷ÁÍ ÐÒÅÄÓÔÁ×ÉÌÁ ÎÁ ÐÒÉÍÅÒÅ, ÒÅÇÕÌÑÒÎÙÈ ÚÎÁÞÅÎÉÊ ON> ÉÚ ÒÑÄÁ 0,1,2...? HÉËÁË ÜÔÏÇÏ Õ ÷ÁÓ ÎÅ ÐÏÌÕÞÉÔÓÑ, Á ÐÏ-ÐÒÅÖÎÅÍÕ ÂÕÄÅÔ ON> ÔÕÈÌÙÊ ÐÅÒÅÂÏÒ ×ÓÅÈ ÐÏÄÒÑÄ. éÎÙÍÉ ÓÌÏ×ÁÍÉ Õ ×ÁÓ ÏÞÅ×ÉÄÎÁÑ ÍÕÌØÔÉÑÄÅÒÎÏÓÔØ × ÍÏÚÇÁÈ, ÐÒÉ ÜÔÏÍ ÏÄÎÏ ÑÄÒÏ ÎÅ ÄÅÌÉÔÓÑ ÐÏÌÕÞÅÎÎÏÊ ÉÎÆÏÒÍÁÃÉÅÊ Ó ÏÓÔÁÌØÎÙÍÉ. éÎÁÞÅ ÍÎÅ ÔÒÕÄÎÏ ÏÂßÑÓÎÉÔØ ÔÏÔ ÆÁËÔ, ÞÔÏ ÚÁÐÏÓÔÉ× × ÜÈÕ ÐÒÉÍÅÒ Ó ÔÁÂÌÉÃÅÊ ÄÌÑ ËÅÊÓÏ× ÎÅ 0,1,2,3 Ñ ×ÔÏÒÉÞÎÏ ×ÉÖÕ ×ÏÐÒÏÓ "Á ËÁË ÜÔÏ ÓÄÅÌÁÔØ". ÎÕ ÞÔÏ ÖÅ. ÐÏÐÒÏÂÕÀ ÅÝÅ ÒÁÚ ÏÂßÑÓÎÉÔØ, ÎÁÄÅÑÓØ ÞÔÏ ÜÔÏ ÐÉÓØÍÏ ÂÕÄÅÔ ÏÂÒÁÂÏÔÁÎÏ ÎÕÖÎÙÍ ÑÄÒÏÍ.

subl $65, %eax movl %eax, -20(%ebp) cmpl $25, -20(%ebp) ja .L10 movl -20(%ebp), %edx movl .L8(,%edx,4), %eax jmp *%eax .... .L8: .long .L3 .long .L4 .long .L10 .long .L10 .long .L5 .long .L10 ....

éÓÈÏÄÎÙÊ ÔÅËÓÔ switch( c) { case 'A': A(); break; case 'B': B(); break; case 'E': E(); break; case 'Q': Q(); break; case 'Z': Z(); break; }

ps. movl SM, %eax call *%eax

Slav.

Awtory idioty, и любой спор с вами бессмысленен. Фиксированное время не заключается в подсчёте тактов.

Нужны. Кто бы ткнул в соответствующее место стандартам, где говорится об использовании ANSI, EBCDIC и прочих, и какое отношение к этому имеет CP866. UTF-7 как вариант, только как и в любой /многобайтовой/ кодировке там символьные константы вообще работать не будут...

Кто программировал вообще знают, что в языке C[++] есть понятие типа данных и перечислимых целых (enum). В крайнем случае -- макросы.

Бред. В switch выбирается /состояние/. Как оно соотносится с регистром порта в пике -- не представляю.

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

Thu Jul 06 2006 11:26, Alexandr Torres wrote to Olga Nonova:

ON>> Извольте. Кто программировал ПЛИСы знают, что состояния State_Machine

AT> Мы не обсуждаем ПЛИСы и AHDL/VHDL, мы обсуждем микроконтроллеры и C/Asm.

"Было бы бо-ольшой ошибкой так думать" (с). Да, ДHК все-же видимо Вас серьезно беспокоит. Пунктик, одним словом.

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

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

Thu Jul 06 2006 12:37, Kirill Frolov wrote to Olga Nonova:

KF> Awtory idioty, и любой спор с вами бессмысленен. Фиксированное время KF> не заключается в подсчёте тактов.

Слив засчитан.

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

Hello, Olga! You wrote to Alexandr Torres on Thu, 6 Jul 2006 09:25:41 +0000 (UTC):

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

ON> Thu Jul 06 2006 11:26, Alexandr Torres wrote to Olga Nonova:

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

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

ON> "âÙÌÏ ÂÙ ÂÏ-ÏÌØÛÏÊ ÏÛÉÂËÏÊ ÔÁË ÄÕÍÁÔØ" (Ó).

ðÏÎÑÔÎÏ. "ëÏÌÌÅËÔÉÆÆ" ÄÁÖÅ ÎÅ ÐÏÎÉÍÁÅÔ Ï ÞÅÍ ÉÄÅÔ ÒÅÞØ × ÏÂÓÕÖÄÅÎÉÉ.

ON> äÁ, äHë ×ÓÅ-ÖÅ ×ÉÄÉÍÏ ÷ÁÓ ÓÅÒØÅÚÎÏ ÂÅÓÐÏËÏÉÔ. ðÕÎËÔÉË, ÏÄÎÉÍ ÓÌÏ×ÏÍ.

äÁ ÎÅÔ, ×ÁÛÅ äîë ÍÅÎÑ ÎÅ ÂÅÓÐÏËÏÉÔ ÁÂÓÏÌÀÔÎÏ.

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

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

Thu Jul 06 2006 12:40, Kirill Frolov wrote to Olga Nonova:

KF> Кто программировал вообще знают, что в языке C[++] есть понятие типа KF> данных и перечислимых целых (enum). В крайнем случае -- макросы.

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

KF> Бред. В switch выбирается /состояние/. Как оно соотносится с регистром KF> порта в пике -- не представляю.

Вы не можете себе представить, как порт вывода управляет ножками ПИКа и одновременно же хранит код СОСТОЯHИЯ конечного автомата? Довольно странно для участника эхотага.

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

Hello, Olga! You wrote to Kirill Frolov on Thu, 6 Jul 2006 09:27:11 +0000 (UTC):

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

ON> Thu Jul 06 2006 12:37, Kirill Frolov wrote to Olga Nonova:

KF>>>> üÔÏ ÎÅ C++, ÜÔÏ -- ÈÅÒÎÑ. ??>>> èÅÒÎÑ, ÏÎÏ ÍÏÖÅÔ ÂÙÔØ É ÈÅÒÎÑ. HÏ, ×ÅÄØ ÐÒÅËÒÁÓÎÏ ÒÁÂÏÔÁÅÔ! ïÞÅÎØ ??>>> ÂÙÓÔÒÏ É Ó ÆÉËÓÉÒÏ×ÁÎÎÙÍ ×ÒÅÍÅÎÅÍ ÎÁ ÌÀÂÏÅ ×ÅÔ×ÌÅÎÉÅ. þÔÏ ËÒÏÅÔ ??>>> ÌÀÂÙÅ ÷ÁÛÉ ÏÂÓÉÒÁÎÉÑ ×ÏËÒÕÇ ÄÁ ÏËÏÌÏ.

KF>> Awtory idioty, É ÌÀÂÏÊ ÓÐÏÒ Ó ×ÁÍÉ ÂÅÓÓÍÙÓÌÅÎÅÎ. æÉËÓÉÒÏ×ÁÎÎÏÅ ×ÒÅÍÑ KF>> ÎÅ ÚÁËÌÀÞÁÅÔÓÑ × ÐÏÄÓޣÔÅ ÔÁËÔÏ×.

ON> óÌÉ× ÚÁÓÞÉÔÁÎ.

÷ÏÚÍÏÖÎÏ, ËÏÇÄÁ ËÁË Ñ ÕÖÅ ÇÏÏ×ÏÒÉÌ, ×ÁÛ ËÏÌÌÅËÔÉÆÆ ÐÒÏÞÉÔÁÅÔ ËÁËÕÀ-ÎÉÂÕÄØ ËÎÉÖËÕ ÐÏ óÉ, É ÏÔËÒÏÅÔ ÄÌÑ ÓÅÂÑ enum É ÒÁÚÂÅÒÅÔÓÑ ËÁË ÒÁÂÏÔÁÅÔ switch - ÎÁÓÔÕÐÉÔ "ÏÚÁÒÅÎÉÅ", É ×ÍÅÓÔÏ ÓÌÉ×Ï× "ËÏÌÅËÔÉÆÆ" ÎÁÞÎÅÔ ÕÞÉÔØÓÑ ÎÅ ÐÒÏÓÔÏ ÑÚÙËÁÍ ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ, ÎÏ É ËÁË × ÜÈÏÔÁÇÅ ÐÒÉÛÕÔÓÑ ÐÒÏÇÒÁÍÍÙ.

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

Hello, Olga! You wrote to Kirill Frolov on Thu, 6 Jul 2006 09:33:16 +0000 (UTC):

KF>> âÒÅÄ. ÷ switch ×ÙÂÉÒÁÅÔÓÑ /ÓÏÓÔÏÑÎÉÅ/. ëÁË ÏÎÏ ÓÏÏÔÎÏÓÉÔÓÑ Ó KF>> ÒÅÇÉÓÔÒÏÍ ÐÏÒÔÁ × ÐÉËÅ -- ÎÅ ÐÒÅÄÓÔÁ×ÌÑÀ.

ON> ÷Ù ÎÅ ÍÏÖÅÔÅ ÓÅÂÅ ÐÒÅÄÓÔÁ×ÉÔØ, ËÁË ÐÏÒÔ ×Ù×ÏÄÁ ÕÐÒÁ×ÌÑÅÔ ÎÏÖËÁÍÉ ðéëÁ É ON> ÏÄÎÏ×ÒÅÍÅÎÎÏ ÖÅ ÈÒÁÎÉÔ ËÏÄ óïóôïñHéñ ËÏÎÅÞÎÏÇÏ Á×ÔÏÍÁÔÁ? äÏ×ÏÌØÎÏ 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 Kirill Frolov on Thu, 6 Jul 2006 09:33:16

+0000 (UTC):

KF>> Кто программировал вообще знают, что в языке C[++] есть KF>> понятие типа данных и перечислимых целых (enum). В крайнем KF>> случае -- макросы.

ON> Hе надо строить из себя ментора-всезнайку. Попробуйте, лучше ON> компильнуть приведенный пример и посмотрите, как прекрасно ON> будет все работать.

У меня в большинстве программ есть конечные автоматы, построенные как раз на switch-case конструкции. И все прекрасно работает уже много лет на самых разных кристаллах.

KF>> Бред. В switch выбирается /состояние/. Как оно соотносится KF>> с регистром порта в пике -- не представляю.

ON> Вы не можете себе представить, как порт вывода управляет ON> ножками ПИКа и одновременно же хранит код СОСТОЯHИЯ конечного ON> автомата? Довольно странно для участника эхотага.

Для участнега, вроде вашего безграмотного коллективчега это абсолютно нормально. Для тех, кто реально занимается embedded (да и просто программированием) ваши предположения просто выглядят дико. Если в каком-то одном на тысячу или 10 тысяч случаев такое нужно, можно для этого случая подумать над оптимальным решением. Последний раз, когда я использовал ножки PIC'а как порт был когда я подключал к нему семисегментый индикатор, но выводилось туда вовсе не стостояние конечного автомата, и делалось это по таблице на 16 значений.

dima

formatting link

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

Thu Jul 06 2006 12:58, Slav Matveev wrote to Olga Nonova:

SM> нужны. я пробовал. два раза. с числами и с литерами (что, собственно SM> то же самое, только в профиль). SM> два сравнения: на минимальную константу и на максимальную, SM> дальше переход по таблице. Таблица, правда, получается дюже SM> "прореженная".

Вот-вот, уже чувствуете "накладные расходы" переходов по таблице.

SM> А ваша схема не очень хорошо будет работать когда состояния SM> надо будет куда-либо передавать или принимать, например. SM> Адрес функции в этом случае не самая лучшая константа, по-моему.

Чем плоха? Она в тексте программы точно такой же имеет всем понятное символическое имя. Програмисту даже не нужно знать, какой конкретно это будет физический адрес. Зато, еще раз повторяю, -1. нет никаких ограничений на тип выражения при switch, да и самого switch - тоже нет. -2.работает с максимальной скоростью ветвления через indirect jmp-ы, -3. никаких переборов case-ов, а значит - фиксированное время на ветвление по состояниям, что очень важно, например, для генерации временной последовательности кодов.

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

Hello Olga.

04 Jul 06 23:01, you wrote to me:

ðÏÓÍÏÔÒÅÌ, ÉÎÔÎÅÒÅÓÎÙÊ ËÁÍÅÎØ. á ÇÄÅ ÎÁÊÔÉ GCC ÐÏÄ MCF5270? íÎÅ ÖÅÌÁÔÅÌØÎÏ ÐÏÄ cygwin.

Nicolas

Мне это не интересно zanimatxsq perekompilqciej wsqkoj =u[i, тем более в дребезжаем регистре. У меня есть свои примеры. Работающие плохо. Я даже знаюгде и почему. А вы даже не понимаете о чёмм говорите.

Представить -- могу. 'А' 'ф' 'т' 'а' 'р' ' ' 'ж' 'ж' 'о' 'т' -- вот такие состояния. Номер состояния служит для хранения состояния, как бы странно это не звучало, а не для хранения данных. Тем более зачем их хранить, если они в порт уже записаны?

"В тексте программы". Автомат существует и за пределами текста программы.

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

Thu Jul 06 2006 23:56, Kirill Frolov wrote to Olga Nonova:

KF> "В тексте программы". Автомат существует и за пределами текста KF> программы.

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

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

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

Thu Jul 06 2006 19:41, Nicolas Minakov wrote to Olga Nonova:

NM> Посмотрел, интнересный камень. NM> А где найти GCC под MCF5270? Мне желательно под cygwin.

Бесплатно можно взять там-же, где лежат все GNU компиляторы. Однако, замучаешься настраивать опции и make-файлы, продираясь через завалы мысли авторов GNU. Я поступила проще- купила уже подготовленный GNU-пакет разработки для cygwin у фирмы NetBurner. Там все делается автоматом, кроме управления встроенной периферией кристалла.

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

Hi Olga!

06 Jul 06 17:03, Olga Nonova wrote to Slav Matveev:

SM>> ÎÁ ÍÉÎÉÍÁÌØÎÕÀ ËÏÎÓÔÁÎÔÕ É ÎÁ ÍÁËÓÉÍÁÌØÎÕÀ, ÄÁÌØÛÅ ÐÅÒÅÈÏÄ ÐÏ SM>> ÔÁÂÌÉÃÅ. ôÁÂÌÉÃÁ, ÐÒÁ×ÄÁ, ÐÏÌÕÞÁÅÔÓÑ ÄÀÖÅ "ÐÒÏÒÅÖÅÎÎÁÑ".

ON> ÷ÏÔ-×ÏÔ, ÕÖÅ ÞÕ×ÓÔ×ÕÅÔÅ "ÎÁËÌÁÄÎÙÅ ÒÁÓÈÏÄÙ" ÐÅÒÅÈÏÄÏ× ÐÏ ÔÁÂÌÉÃÅ.

÷ÁÍ ÛÁÛÅÞËÉ ÉÌÉ ÅÈÁÔØ?

SM>> á ×ÁÛÁ ÓÈÅÍÁ ÎÅ ÏÞÅÎØ ÈÏÒÏÛÏ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ËÏÇÄÁ ÓÏÓÔÏÑÎÉÑ SM>> ÎÁÄÏ ÂÕÄÅÔ ËÕÄÁ-ÌÉÂÏ ÐÅÒÅÄÁ×ÁÔØ ÉÌÉ ÐÒÉÎÉÍÁÔØ, ÎÁÐÒÉÍÅÒ. SM>> áÄÒÅÓ ÆÕÎËÃÉÉ × ÜÔÏÍ ÓÌÕÞÁÅ ÎÅ ÓÁÍÁÑ ÌÕÞÛÁÑ ËÏÎÓÔÁÎÔÁ, SM>> ÐÏ-ÍÏÅÍÕ.

ON> þÅÍ ÐÌÏÈÁ? ïÎÁ × ÔÅËÓÔÅ ÐÒÏÇÒÁÍÍÙ ÔÏÞÎÏ ÔÁËÏÊ ÖÅ ÉÍÅÅÔ ×ÓÅÍ ÐÏÎÑÔÎÏÅ ON> ÓÉÍ×ÏÌÉÞÅÓËÏÅ ÉÍÑ. ðÒÏÇÒÁÍÉÓÔÕ ÄÁÖÅ ÎÅ ÎÕÖÎÏ ÚÎÁÔØ, ËÁËÏÊ ËÏÎËÒÅÔÎÏ ON> ÜÔÏ ÂÕÄÅÔ ÆÉÚÉÞÅÓËÉÊ ÁÄÒÅÓ. á ÚÁ ÔÅËÓÔÏÍ? ÞÔÏ ÂÙ, ÎÁÐÒÉÍÅÒ process->getstatus() ×ÅÒÎÕÌ ËÏÎÓÔÁÎÔÕ, Á ÎÅ ÁÂÓÔÒÁËÔÎÏÅ 0x12345678. ON> úÁÔÏ, ÅÝÅ ÒÁÚ ÐÏ×ÔÏÒÑÀ, -1. ÎÅÔ ÎÉËÁËÉÈ ON> ÏÇÒÁÎÉÞÅÎÉÊ ÎÁ ÔÉÐ ×ÙÒÁÖÅÎÉÑ ÐÒÉ switch, á ÍÎÏÇÏ-ÌÉ Õ ×ÁÓ ÔÁËÉÈ ÔÉÐÏ×? ON> ÄÁ É ÓÁÍÏÇÏ switch - ÔÏÖÅ ÎÅÔ. -2.ÒÁÂÏÔÁÅÔ Ó ÍÁËÓÉÍÁÌØÎÏÊ ÓËÏÒÏÓÔØÀ ON> ×ÅÔ×ÌÅÎÉÑ ÞÅÒÅÚ indirect jmp-Ù, ÒÁÂÏÔÁÅÔ ÞÅÒÅÚ call É ÐÒÉ×ÏÄÉÔ Ë ÎÅÏÂÈÏÄÉÍÏÓÔÉ ÓÏÈÒÁÎÑÔØ- ×ÏÓÓÔÁÎÁ×ÌÉ×ÁÔØ ÏËÒÕÖÅÎÉÅ. ÔÁÂÌÉÞÎÙÊ jmp ÎÁ ÓÏÏÔ×ÅÔÓÔ×ÕÀÉÅ case'Ù ÎÉÞÅÇÏ ÎÅ ÓÏÈÒÁÎÑÅÔ, Á do_something ÌÅÇËÏ ÏÐÉÓÙ×ÁÅÔÓÑ ËÁË inline. ON> -3. ÎÉËÁËÉÈ ÐÅÒÅÂÏÒÏ× case-Ï×, Á ÚÎÁÞÉÔ - ÆÉËÓÉÒÏ×ÁÎÎÏÅ ×ÒÅÍÑ ON> ÎÁ ×ÅÔ×ÌÅÎÉÅ ÐÏ ÓÏÓÔÏÑÎÉÑÍ, ÞÔÏ ÏÞÅÎØ ×ÁÖÎÏ, ÎÁÐÒÉÍÅÒ, ÄÌÑ ÇÅÎÅÒÁÃÉÉ ON> ×ÒÅÍÅÎÎÏÊ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ËÏÄÏ×. á ÅÝÅ ÍÏÖÎÏ ÐÒÏÓÔÏ goto ÐÏ ×ÓÅÊ ÐÒÏÇÒÁÍÍÅ ÎÁËÉÄÁÔØ, ×ÏÏÂÝÅ ÂÕÄÅÔ ÓÕÐÅÒÂÙÓÔÒÏ! :)

÷ÅÔ×ÌÅÎÉÅ ×Ù ×ÓÅ ÒÁ×ÎÏ ÐÏÌÕÞÉÔÅ, ÅÓÌÉ ÔÏÌØËÏ Õ ×ÁÓ ÎÅ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÙÊ ÐÅÒÅÂÏÒ ÓÏÓÔÏÑÎÉÊ ÏÔ ÎÁÞÁÌØÎÏÇÏ Ë ËÏÎÅÞÎÏÍÕ. ëÓÔÁÔÉ, ×ÏÚÍÉÔÅ yacc ÉÌÉ bison É ÐÏÓÍÏÔÒÉÔÅ ËÁË ÏÎ ÓÔÒÏÉÔ ËÏÎÅÞÎÙÅ Á×ÔÏÍÁÔÙ.

Slav.

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

Fri Jul 07 2006 10:13, Slav Matveev wrote to Olga Nonova:

ON>> Вот-вот, уже чувствуете "накладные расходы" переходов по таблице.

SM> Вам шашечки или ехать?

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

SM>>> А ваша схема не очень хорошо будет работать когда состояния SM>>> надо будет куда-либо передавать или принимать, например. SM>>> Адрес функции в этом случае не самая лучшая константа, SM>>> по-моему.

ON>> Чем плоха? Она в тексте программы точно такой же имеет всем понятное ON>> символическое имя. Програмисту даже не нужно знать, какой конкретно ON>> это будет физический адрес.

SM> А за текстом? SM> что бы, например process->getstatus() вернул константу, SM> а не абстрактное 0x12345678.

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

ON>> Зато, еще раз повторяю, -1. нет никаких ON>> ограничений на тип выражения при switch,

SM> А много-ли у вас таких типов?

В конечном счете один- целое. Hо! Оно не из ряда 0,1,2...

ON>> да и самого switch - тоже нет. -2.работает с максимальной скоростью ON>> ветвления через indirect jmp-ы,

SM> работает через call и приводит к необходимости сохранять- SM> восстанавливать окружение.

Обращаю внимание- происходит вызов процедур без параметров, которые также ничего не возвращают. Приличный компилятор поймет, что "сохранять- восстанавливать окружение"- излишнее занятие. Hапример, С-компилятор IAR для AVR в этом случае просто вставляет ОДHУ команду icall. Правда проигрыш в скорости по сранению с ijmp все-же есть за счет ret из подпрограммы состояния. Hо если родить макрос ветвления с использованием ассемблерного текста, в котором будет именно indirect jmp, то быстрее уже ничего не придумаешь.

SM> табличный jmp на соответствуюие case'ы ничего не сохраняет, SM> а do_something легко описывается как inline.

"do_something" не обсуждается, т.к. одинаково в любом случае.

ON>> -3. никаких переборов case-ов, а значит - фиксированное время ON>> на ветвление по состояниям, что очень важно, например, для генерации ON>> временной последовательности кодов.

SM> Ветвление вы все равно получите, если только у вас SM> не последовательный перебор состояний от начального SM> к конечному.

Ветвление конечно получу, но оно будет занимать всегда фиксированное время. В отличие от switch-case-break с непредсказуемым по времени перебором, когда case-ы отнюдь не 0,1,2...

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

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

Hello, Olga Nonova! You wrote in conference fido7.ru.embedded to Slav Matveev on Fri, 7 Jul 2006 09:48:44

+0000 (UTC):

SM>> ÷ÁÍ ÛÁÛÅÞËÉ ÉÌÉ ÅÈÁÔØ?

ON> ðÒÏÓÔÏ ÏÂÒÁÝÁÀ ÷ÁÛÅ ×ÎÉÍÁÎÉÅ ÎÁ ÎÅÄÏÓÔÁÔËÉ ÔÁÂÌÉÞÎÏÇÏ ÍÅÔÏÄÁ, ËÏÇÄÁ ON> ×ÙÒÁÖÅÎÉÅ ÐÒÉ switch ÄÁÅÔ ÈÏÔØ É ÃÅÌÙÅ, ÎÏ ÎÅ ÉÚ ÎÁÔÕÒÁÌØÎÏÇÏ ÒÑÄÁ

âÌÅÓË. èÏÔÅÌÏÓØ ÂÙ Õ×ÉÄÅÔØ ÐÒÉÍÅÒ ÔÁËÏÇÏ ÃÅÌÏÇÏ, ÎÏ ÎÅ ÉÚ ÎÁÔÕÒÁÌØÎÏÇÏ ÒÑÄÁ, ÞÉÓÌÁ.

ON> ÚÎÁÞÅÎÉÑ. é ÜÔÁ ÓÉÔÕÁÃÉÑ ÎÅ ×ÙÓÏÓÁÎÁ ÉÚ ÐÁÌØÃÁ, ËÁË ÔÕÔ ÐÙÔÁÀÔÓÑ ON> ÐÒÅÄÓÔÁ×ÉÔØ ÎÅËÏÔÏÒÙÅ- (ÓÍ.

ïÎÁ ×ÙÓÏÓÁÎÁ ÉÚ ÄÒÕÇÏÇÏ ÏÒÇÁÎÁ ÍÕÖÓËÏÇÏ ÏÒÇÁÎÉÚÍÁ.

ON> ÍÏÊ ÐÒÉÍÅÒ ÈÒÁÎÅÎÉÑ ËÏÄÁ ÓÏÓÔÏÑÎÉÑ × ÒÅÇÉÓÔÒÅ ÐÏÒÔÁ ×Ù×ÏÄÁ).

ëÁË É ÜÔÏÔ ÐÒÉÍÅÒ, ×ÙÓÏÓÁÎ ÏÔ ÔÕÄÁ ÖÅ. äÅÌÏ ÐÏÌÅÚÎÏÅ, ÔÏÌØËÏ ÚÁÞÅÍ ÖÅ ÐÒÏÄÕËÔÙ ×ÙÓÁÓÙ×ÁÎÉÑ × ËÏÎÆÅÒÅÎÃÉÀ ×Ù×ÁÌÉ×ÁÔØ? èÒÁÎÉÔÅ ÉÈ ×ÎÕÔÒÉ Ó×ÏÅÇÏ ËÏÌÌÅËÔÉ×Á.

SM>> á ÍÎÏÇÏ-ÌÉ Õ ×ÁÓ ÔÁËÉÈ ÔÉÐÏ×?

ON> ÷ ËÏÎÅÞÎÏÍ ÓÞÅÔÅ ÏÄÉÎ- ÃÅÌÏÅ. HÏ! ïÎÏ ÎÅ ÉÚ ÒÑÄÁ 0,1,2...

éÎÔÅÒÅÓÎÏÅ ËÁËÏÅ ÃÅÌÏÅ...

dima

formatting link

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required