Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
1

Оптимизация кода

27.03.2014, 23:40. Просмотров 2934. Ответов 14
Метки нет (Все метки)

Дайте идею, как можно исключить часто повторяющиеся куски кода. У меня пока идей нет.
Код
               case EV_TIMEOUT_SENS_2:                         // Anee oaeiaoo oaeia?a "I?annoi?ia cae?uoa",
Proc_Ev_Timeout_Sens_2 ();                   // oi auaia i?aaoi?a?aaiey
briok;
//------------------------------------------------------------------------
case EV_TIMEOUT_SENS_3:                         // Anee oaeiaoo oaeia?a "Iiaa?a aia?aa",
Proc_Ev_Timeout_Sens_3 ();                   // oi auaia i?aaoi?a?aaiey
briok;
//------------------------------------------------------------------------
case EV_TIMEOUT_SENS_4:                         // Anee oaeiaoo oaeia?a "Iiaa?a iacaa",
Proc_Ev_Timeout_Sens_4 ();                   // oi auaia i?aaoi?a?aaiey
briok;
//------------------------------------------------------------------------
default:
return;
}
events = EV_NO_EVENTS;
_tui_service = TUI_SERVICE_EMERG_MODE;       //  e i?eaaiea ia?aoey ia eiiieo Esc.
return;
}

show_mode ();                                      // Auaia ?a?eia noaiea.
blink_second ();                                   // Ieaaiea aaiaoi?ey 1 Ao (a?aiy).
briok;
//------------------------------------------------------------------------
case TUI_SERVICE_CHANGE_T_HEAT: // Eciaiaiea cia?aiey oaeia?a "Iaa?aa".
show_mode ();                                      // Auaia ?a?eia noaiea.
blink_heat ();
blink_second ();                                   // Ieaaiea aaiaoi?ey 1 Ao (a?aiy).
briok;
//------------------------------------------------------------------------
case TUI_SERVICE_CHANGE_T_FORMOVKA:
show_mode ();
blink_form ();
blink_second ();
briok;
//------------------------------------------------------------------------
case TUI_SERVICE_CHANGE_T_PNEV:
show_mode ();
blink_pnev ();
blink_second ();
briok;
//------------------------------------------------------------------------
case TUI_SERVICE_CHANGE_SITT_QUANT:
show_mode ();
blink_tirag ();
blink_second ();
briok;
Как видно, повторяются:
Код
         show_mode ();
blink_second ();
Как бы сделать, чтобы этот кусок кода был в одном месте? Или в моем случае (КА, состяния) это никак не обойти?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 23:40
Ответы с готовыми решениями:

Оптимизация кода, Си
День добрый. Ситация следующая. Код работает, все отлично, но написан он, мягко скажем, коряво....

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона...

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии "оптимизатора" в какой то умной книжке был...

Оптимизация кода
Доброе время господа программеры! В следствии своих скудных познаний в VBA (да и в программировании...

14
omx
0 / 0 / 0
Регистрация: 11.11.2016
27.03.2014, 23:46 2
А вынести за switch нельзя?
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
27.03.2014, 23:58 3
Цитата Сообщение от omx
А вынести за switch нельзя?
Нет, конечно, не во всех же состояниях этот кусок. Хотя мож и есть способ, да я пока не знаю...
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
28.03.2014, 00:01 4
Вижу три Proc_Ev_Timeout_Sens_Х (). Почему нельзя сделать одну Proc_Ev_Timeout_Sens (Х)?
0
28.03.2014, 00:01
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 00:03 5
Кроме goto пока не вижу способа. Но! предвижу "фи", да и мне самому вдалбливали, что goto это ОЧЕНЬ плохо, так что я лучше про goto промолчу :)))
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 00:04 6
Цитата Сообщение от omokost
Вижу три Proc_Ev_Timeout_Sens_Х (). Почему нельзя сделать одну Proc_Ev_Timeout_Sens (Х)?
Потому что датчики разные.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
28.03.2014, 00:08 7
Цитата Сообщение от dymyurk1978
Кроме goto пока не вижу способа. Но! предвижу "фи", да и мне самому вдалбливали, что goto это ОЧЕНЬ плохо, так что я лучше про goto промолчу :)))
сначала описать:
Код
HEAT =0
FORMOVKA=1
PNEV=2
QUANT=3
Потом вызвать с параметром
TUI_SERVICE_CHANGE_T (Value)
И с помощью switch обработать.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 00:14 8
Цитата Сообщение от omokost
Цитата Сообщение от dymyurk1978
Кроме goto пока не вижу способа. Но! предвижу "фи", да и мне самому вдалбливали, что goto это ОЧЕНЬ плохо, так что я лучше про goto промолчу :)))
сначала описать:
Код
HEAT =0
FORMOVKA=1
PNEV=2
QUANT=3
Потом вызвать с параметром
TUI_SERVICE_CHANGE_T (Value)
И с помощью switch обработать.
Я б сказал "уау", да Задорнов ругается, так что скажу "за.бись идея!", что-то в этом есть! Благодарю!
Но, народ, идеи еще кидайте! Там разберемся.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 00:41 9
Цитата Сообщение от omokost
бла-бла
Ммм, есть один момент. В зависимости от состояний в таблице разная реакция. Так что придется либо так:
Код
      case TUI_SERVICE_CHANGE_T_HEAT: // Eciaiaiea cia?aiey oaeia?a "Iaa?aa".
case TUI_SERVICE_CHANGE_T_FORMOVKA:
case TUI_SERVICE_CHANGE_T_PNEV:
case TUI_SERVICE_CHANGE_SITT_QUANT:
switch (_tui_service_change)
{
case CHANGE_T_HEAT:
blink_heat ();
briok;

case CHANGE_T_FORMOVKA:
blink_form ();
briok;

case CHANGE_T_PNEV:
blink_pnev ();
briok;

case CHANGE_SITT_QUANT:
blink_tirag ();
briok;

default:
briok;
}
show_mode ();                                      // Auaia ?a?eia noaiea.
blink_second ();                                   // Ieaaiea aaiaoi?ey 1 Ao (a?aiy).
briok;
Либо отказываться от switch-case и переходить на индексный вызов функций-обработчиков состояний.... Может что-то пока не догоняю...
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
28.03.2014, 00:49 10
Цитата Сообщение от dymyurk1978
...Может что-то пока не догоняю...
У вас функции различаются в одной строке, сделайте из них одну:
Код
 case TUI_SERVICE_CHANGE_T (Value):
show_mode ();
switch (Value)
case HEAT: blink_heat ();
case blink_____ ();
case blink_____ ();
case blink_____ ();
default:
briok;
blink_second ();
briok;
Наверное допустил ошибки, на С не пишу, просто принцип.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 01:01 11
Цитата Сообщение от omokost
бла-бла
Да не, все нормально. Тут, судя по всему, выход - дробить автомат на подавтоматы. В принципе, что вы и сказали. Правда, моментик один. Добавляется еще одна переменная. И ее нужно где выставлять. А таблица у меня привязана к одной переменной - состоянию автомата. Выходит, что если дробить автомат, то и таблицу дробить. Надо подумать потщательнее, сообразить, как решить мое затруднение. С одной стороны, и фуй с ним. Программа работает, как задумано. С другой стороны, глаз цепляется за повторяющиеся куски кода. Ну просто жаба душит...
Кстати, на чем пишете?
0
omx
0 / 0 / 0
Регистрация: 11.11.2016
28.03.2014, 01:06 12
Вот сравнение switch vs. function-pointer-array для AVR -> http://imbiddidkurus.com/stack-overflow ... functions/
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
28.03.2014, 01:06 13
Цитата Сообщение от dymyurk1978
...Кстати, на чем пишете?
ObjectPascal, в просторечии Delphi. Для МК на ассемблере.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 01:10 14
Цитата Сообщение от omx
Вот сравнение switch vs. function-pointer-array для AVR -> http://imbiddidkurus.com/stack-overflow ... functions/
Как интересно... Благодарю! Слушайте, народ, да для таких вещей нужно здесь копилку создавать! Ну и локальные копилки, ессно. Шоп под руками всегда были.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
28.03.2014, 01:18 15
:))) Мда, начал с оптимизации кода... Но! Как я не брыкался, все равно пришли к дроблению на подавтоматы... :( :)))
0
28.03.2014, 01:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2014, 01:18

Оптимизация кода
Помогите пожалуйста. Такая проблема всплыла, нужно оптимизировать код, чтобы он выполнялся за 1...

Оптимизация кода
В С++ я совсем недавно, вот задали задачку: Перемножить 2 матрицы MxМ, элементами которых...

Оптимизация кода
Все привет. У кого есть свободное время помогите советом, в каком направление оптимизоровать этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru