реклама на сайте
подробности

 
 
> К знатокам, Локальные переменные.
SasaVitebsk
сообщение Sep 6 2007, 00:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Пишу достаточно простую прогу. Пытаюсь оптимизировать.

Столкнулся с одной бедой. Попробую описать.

Построено на прерываниях. Между прерываниями разные промежутки. Есть короткие, есть длинные. Как назло именно короткое прерывание сильно загружено. Дабы разгрузить его я пытаюсь часть вычислений вынести в предыдущее не загруженное прерывание. Уже полностью перешёл на указатели, но всё равно шляпа получается.

Проблема в том, что я не могу ввести локальные переменные на два прерывания. Таким образом я ввожу статик. Но тогда во втором прерывании компилятор пытается сохранить значения. А мне это не надо ни капельки. Чтобы этого избежать я ввёл локальные переменные и во втором прерывании выполнил присваивание локальным статик. Код получился значительно компактнее, но всё равно выполняется никому не нужное присваивание. А это 6 указателей!

Теперь сам вопрос.
Могу ли я указать компилятору что можно разрушать переменные в данном прерывании. То есть что не надо их хранить. Или как это сделать. Надо типа переобъявить статические переменные локальными. Не знаю как выразится. Надеюсь поняли.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Sep 24 2007, 09:25
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Мой класс TCanal посылает запрос, ждет получения ответа определенное время, при отсутствии ответа повторяет запрос указанное кол-во раз и т.д. При этом получается отнюдь не цикл из трех строк, как вы привели...

При объектном подходе (не важно на С или на С++) мне надо сделать это ровно один раз, а потом использовать без изменений. При этом в одном проекте у меня может быть любое количество таких объектов.
Если не выделить эту функциональность в отдельные ф-ции + структуру С или класс С++, то максимум - у меня будет "рыба", которую я буду копи\пастить на N проектов и в рамках проекта на M уартов - в результате получится целая куча примерно одинакового кода, при адаптации которого я всякий раз должен буду вспоминать как он работает.
Еще вариант - написать по такой "рыбе" соответствующие макросы и поиметь кучу нюансов, с ними связанных.
Однако макросы будут довольно сложными (если учесть требование нескольких обработчиков в рамках проекта) + это фактически "скрытая" генерация дополнительного кода. Так не проще ли использовать классы в С++ или эмулировать их структурами + функциями в С?
При этом всего два недостатка:
1. Надо тщательно продумать и разработать эту общую функциональность
2. Некоторая потеря в скорости по сравнению с копи\пастом \ макросами. Однако если учесть, что скорость по УАРТу обычно не слишком высокая, то этими потерями в десятков\сотен тактов вполне можно пренебречь.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 24 2007, 09:39
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(Непомнящий Евгений @ Sep 24 2007, 12:25) *
Мой класс TCanal посылает запрос, ждет получения ответа определенное время, при отсутствии ответа повторяет запрос указанное кол-во раз и т.д. При этом получается отнюдь не цикл из трех строк, как вы привели...


Из пяти. Во внешней функции, напрмер так (хотя у меня совсем по другому, там не сразу повторяется запрос, а на следующем круге)

Код
char r=3;
do
{
c=DO_RS(&PPKP,1,CurRS,abon);
if ((c!=4)||(c!=2)) break; //Ну или другое условие проверим
}
while(--c);


Или тут тоже проще написать кучу методов, повызывать их? Или все-таки почеловечески, пробуем 3 раза, если обмен свершился, прекращаем попытки?

Цитата
При объектном подходе (не важно на С или на С++) мне надо сделать это ровно один раз, а потом использовать без изменений. При этом в одном проекте у меня может быть любое количество таких объектов.


Уменьшение писанины. С этим согласен.

Цитата
Если не выделить эту функциональность в отдельные ф-ции + структуру С или класс С++, то максимум - у меня будет "рыба", которую я буду копи\пастить на N проектов и в рамках проекта на M уартов - в результате получится целая куча примерно одинакового кода, при адаптации которого я всякий раз должен буду вспоминать как он работает.


Мой опыт говорит, что всегда надо что-то точить. Не получается универсальности.

Цитата
Еще вариант - написать по такой "рыбе" соответствующие макросы и поиметь кучу нюансов, с ними связанных.
Однако макросы будут довольно сложными (если учесть требование нескольких обработчиков в рамках проекта) + это фактически "скрытая" генерация дополнительного кода. Так не проще ли использовать классы в С++ или эмулировать их структурами + функциями в С?


Не доходит до меня. У меня есть код (приведенный выше), который я использую (конечно, внося изменения) во всех проектах. Что мне даст изготовление этого кода в соответствии с парадигмами цпп?

Цитата
При этом всего два недостатка:
1. Надо тщательно продумать и разработать эту общую функциональность


На Си тоже надо. Не думаете ли вы, что я не думаю над своим софтом? Так что это не недостаток.

Цитата
2. Некоторая потеря в скорости по сравнению с копи\пастом \ макросами. Однако если учесть, что скорость по УАРТу обычно не слишком высокая, то этими потерями в десятков\сотен тактов вполне можно пренебречь.


Далеко не всегда.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Sep 24 2007, 10:38
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Rst7 @ Sep 24 2007, 13:39) *
Или тут тоже проще написать кучу методов, повызывать их? Или все-таки почеловечески, пробуем 3 раза, если обмен свершился, прекращаем попытки?

Еще раз smile.gif . У меня есть объект, который умеет передать запрос, получить ответ, повторить передачу при необходимости, сообщить об отсутствии ответа.
Чтобы его использовать в конкретном проекте, я пишу обработчики 3-х прерываний примерно по 3 строки в каждом + пару 3-х строчных функций, которые в(ы)ключают приемник\передатчик УАРТа.
Еще нужна ф-ция, которая выставляет флаг получения ответа - для его последующей обработки.

Класс TCanal (а точнее производные от него) используется в других классах, которые содержит логику управления внешними устройствами.

Преимущества моего TCanal перед несколькими вашими функциями:
1. Легко тиражировать - если у меня в устройстве 4 уарта, я просто создаю четыре объекта + пишу обвязку для каждого (элементарную). Для ваших функций мне потребуется руками растиражировать каждую используемую переменную (а это как минимум, указатель на буфер, длина, число повторов максимальное и текущее, время ожидания и т.д.) и каждую функцию.
2. Мне не надо вообще ничего менять в базовом классе при написании нового протокола. Мне надо просто написать производный класс, в котором будет подключаться обработчик полученных байт + сам этот обработчик.
3. У меня логика посылки\повтора посылки отделена от логики "выцепления" пакета из потока байт (начало\конец пакета, длина, crc и т.д.). У вас - нет. Если в новом протоколе формат пакетов будет другой, в вашем случае придется по живому резать весь код; в моем - просто написать новый обработчик.
4. Параметры - время ожидания, число повторов и т.д. задаются в одном месте. Их четко видно в коде и легко поменять на другие. У вас они вшиты в ваши функции.

Цитата
Мой опыт говорит, что всегда надо что-то точить. Не получается универсальности.

Если написать грамотно (и потом раз несколько повторно переписать smile.gif ), точить придется в производном классе, не меняя код в базовом. А возможно - вообще не придется, если предусмотреть соответствующие параметры.

Цитата
Не доходит до меня. У меня есть код (приведенный выше), который я использую (конечно, внося изменения) во всех проектах. Что мне даст изготовление этого кода в соответствии с парадигмами цпп?

см выше.
Цитата
На Си тоже надо. Не думаете ли вы, что я не думаю над своим софтом? Так что это не недостаток.

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

Если критично быстродействие - есть встраивание ф-ций, шаблоны и т.д.

Цитата(Rst7 @ Sep 24 2007, 14:14) *
Программа понятна. Читабельна. Обозрима. Какой плюс мне даст переделка этого кода в соответствии с ООП? Как бы вы порекомендовали разложить это по классам/методам? Какой выигрыш я получу?


Ну вопрос о переделке существующего кода - это несколько другой вопрос. Если он уже есть и работает, а также читабелен и обозрим, то никакого смысла переписывать скорее всего нету. Если он постоянно меняется и растет - то можно очень постепенно в нем что-то менять (целые книжки умные люди по рефакторингу пишут smile.gif ).

Лично мне удобнее организовывать код как несколько кирпичиков, которые можно складывать друг с другом в разных вариантах без переделки самих кирпичей, а только за счет "разного цемента" smile.gif . Т.е., я написал такой кирпичик, отладил его в рамках какого-нибудь проекта, а затем без изменений (вообще!) использую в другом. За счет ООП я могу, имея один кирпич, несколькими строками кода наклепать несколько подобных. Постепенно я улучшаю кирпичи, при этом они автоматически улучшаются и в старых проектах после перекомпиляции (или старые проекты становятся полностью неработоспособными smile.gif, но это уже проблема осторожного улучшения и использования системы контроля версий).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   К знатокам   Sep 6 2007, 00:58
- - dxp   Все равно как-то туманно. Вы бы псевдокод привели,...   Sep 6 2007, 04:33
- - alexander55   Цитата(SasaVitebsk @ Sep 6 2007, 04:58) П...   Sep 6 2007, 04:53
- - Сергей Борщ   Да, действительно мутновато. Если я правильно поня...   Sep 6 2007, 05:02
- - MALLOY2   Можно еще все нужные переменные загнать в 1 структ...   Sep 6 2007, 05:49
- - Dog Pawlowa   Цитата(SasaVitebsk @ Sep 6 2007, 03:58) П...   Sep 6 2007, 07:51
|- - alexander55   Цитата(Dog Pawlowa @ Sep 6 2007, 11:51) Я...   Sep 6 2007, 09:20
- - SasaVitebsk   Лучше всех понял проблему Сергей Борщ. Я так и сде...   Sep 6 2007, 11:27
|- - scifi   Цитата(SasaVitebsk @ Sep 6 2007, 15:27) В...   Sep 6 2007, 13:05
||- - SasaVitebsk   Цитата(scifi @ Sep 6 2007, 16:05) Быстрее...   Sep 6 2007, 19:45
|- - Rst7   Цитата(SasaVitebsk @ Sep 6 2007, 14:27) К...   Sep 8 2007, 10:49
|- - SasaVitebsk   Всем спасибо. Буду осмысливать и пробовать - экспе...   Sep 9 2007, 14:54
|- - Rst7   Цитата(SasaVitebsk @ Sep 9 2007, 17:54) В...   Sep 10 2007, 06:10
- - vmp   Похоже, здесь основная проблема - это ограничения ...   Sep 7 2007, 13:42
|- - dxp   Цитата(vmp @ Sep 7 2007, 20:42) Похоже, з...   Sep 8 2007, 10:12
|- - Сергей Борщ   Цитата(dxp @ Sep 8 2007, 13:12) Там (в EW...   Sep 8 2007, 11:39
- - mdmitry   Возможно, поможет сократить время выполнения генер...   Sep 8 2007, 22:28
- - SasaVitebsk   Тут проскочила чья-то фраза, что компилятор лучше ...   Sep 18 2007, 09:21
|- - alexander55   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 09:49
|- - vmp   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 10:45
||- - rezident   Цитата(vmp @ Sep 18 2007, 16:45) Для отде...   Sep 18 2007, 13:08
||- - vmp   Цитата(rezident @ Sep 18 2007, 17:08) Изв...   Sep 18 2007, 13:35
||- - Dog Pawlowa   Цитата(vmp @ Sep 18 2007, 16:35) Особенно...   Sep 18 2007, 16:30
||- - singlskv   Цитата(Dog Pawlowa @ Sep 18 2007, 20:30) ...   Sep 18 2007, 17:13
||- - IgorKossak   Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ...   Sep 18 2007, 18:07
|||- - Rst7   Цитата(IgorKossak @ Sep 18 2007, 21:07) Е...   Sep 19 2007, 05:23
|||- - alexander55   Цитата(Rst7 @ Sep 19 2007, 09:23) А вот C...   Sep 19 2007, 05:57
|||- - dxp   Цитата(Rst7 @ Sep 19 2007, 12:23) А вот C...   Sep 19 2007, 12:18
|||- - Rst7   Цитата(dxp @ Sep 19 2007, 15:18) Отнюдь. ...   Sep 19 2007, 12:34
|||- - alexander55   Цитата(Rst7 @ Sep 19 2007, 16:34) ключево...   Sep 19 2007, 12:54
|||- - dxp   Цитата(Rst7 @ Sep 19 2007, 19:34) Хуже бу...   Sep 19 2007, 13:21
|||- - SasaVitebsk   Цитата(dxp @ Sep 19 2007, 16:21) C++ - эт...   Sep 21 2007, 18:26
|||- - singlskv   Цитата(SasaVitebsk @ Sep 21 2007, 22:26) ...   Sep 21 2007, 18:54
||- - SasaVitebsk   Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ...   Sep 18 2007, 23:46
|- - singlskv   Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ...   Sep 18 2007, 18:41
|- - zltigo   Цитата(singlskv @ Sep 18 2007, 21:41) Соб...   Sep 18 2007, 19:34
||- - singlskv   Цитата(zltigo @ Sep 18 2007, 23:34) Загну...   Sep 18 2007, 19:47
||- - zltigo   Цитата(singlskv @ Sep 18 2007, 22:47) лет...   Sep 18 2007, 19:57
||- - singlskv   Цитата(zltigo @ Sep 18 2007, 23:57) Дела ...   Sep 18 2007, 20:16
|- - dxp   Цитата(singlskv @ Sep 19 2007, 01:41) А в...   Sep 19 2007, 04:18
|- - singlskv   Цитата(dxp @ Sep 19 2007, 08:18) С++ на ...   Sep 19 2007, 19:59
|- - zltigo   Цитата(singlskv @ Sep 19 2007, 22:59) Оче...   Sep 19 2007, 21:03
||- - singlskv   Цитата(zltigo @ Sep 20 2007, 01:03) Оба э...   Sep 19 2007, 21:27
||- - alexander55   Цитата(singlskv @ Sep 20 2007, 01:27) Пов...   Sep 20 2007, 04:58
||- - Непомнящий Евгений   Цитата(alexander55 @ Sep 20 2007, 08:58) ...   Sep 20 2007, 11:42
||- - singlskv   Цитата(Непомнящий Евгений @ Sep 20 2007, 15...   Sep 20 2007, 16:13
||- - dxp   Цитата(singlskv @ Sep 20 2007, 23:13) При...   Sep 21 2007, 03:49
||- - Непомнящий Евгений   Цитата(singlskv @ Sep 20 2007, 20:13) А н...   Sep 21 2007, 04:36
||- - dxp   Цитата(Непомнящий Евгений @ Sep 21 2007, 11...   Sep 21 2007, 05:50
||- - Непомнящий Евгений   Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т...   Sep 21 2007, 06:49
|||- - dxp   Цитата(Непомнящий Евгений @ Sep 21 2007, 13...   Sep 21 2007, 07:14
|||- - Maddy   Цитата(dxp @ Sep 21 2007, 11:14) Ну, не з...   Sep 21 2007, 08:46
|||- - dxp   Цитата(Maddy @ Sep 21 2007, 15:46) Не фле...   Sep 21 2007, 09:12
|||- - Maddy   2 dxp - Thanks   Sep 21 2007, 09:31
||- - alexander55   Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т...   Sep 21 2007, 06:51
||- - singlskv   Цитата(dxp @ Sep 21 2007, 09:50) Под джит...   Sep 21 2007, 20:44
||- - dxp   Цитата(singlskv @ Sep 22 2007, 03:44) джи...   Sep 22 2007, 16:52
||- - singlskv   Цитата(dxp @ Sep 22 2007, 20:52) , давайт...   Sep 22 2007, 17:49
||- - zltigo   Цитата(singlskv @ Sep 22 2007, 20:49) Кон...   Sep 22 2007, 18:11
|||- - singlskv   Цитата(zltigo @ Sep 22 2007, 22:11) Это в...   Sep 22 2007, 19:21
|||- - zltigo   Цитата(singlskv @ Sep 22 2007, 22:00) Вот...   Sep 22 2007, 19:33
||||- - singlskv   Цитата(zltigo @ Sep 22 2007, 23:33) Если ...   Sep 22 2007, 20:09
||||- - zltigo   Цитата(singlskv @ Sep 22 2007, 23:09) Вы ...   Sep 22 2007, 20:39
||||- - singlskv   Цитата(zltigo @ Sep 23 2007, 00:39) - 16b...   Sep 22 2007, 21:13
||||- - zltigo   Цитата(singlskv @ Sep 23 2007, 00:13) Да,...   Sep 22 2007, 21:36
||||- - singlskv   Да, далеко мы уже удалились... от темы, единствен...   Sep 22 2007, 21:47
||||- - zltigo   Цитата(singlskv @ Sep 23 2007, 00:47) Т.к...   Sep 22 2007, 22:22
|||- - dxp   Цитата(singlskv @ Sep 23 2007, 02:21) Это...   Sep 23 2007, 08:59
|||- - singlskv   Цитата(dxp @ Sep 23 2007, 12:59) А если п...   Sep 23 2007, 14:35
|||- - dxp   Цитата(singlskv @ Sep 23 2007, 21:35) Хор...   Sep 23 2007, 16:10
||||- - singlskv   Цитата(dxp @ Sep 23 2007, 20:10) То, что ...   Sep 23 2007, 17:20
||||- - dxp   Цитата(singlskv @ Sep 24 2007, 00:20) Ну ...   Sep 24 2007, 03:38
|||- - zltigo   Цитата(singlskv @ Sep 23 2007, 17:35) zlt...   Sep 23 2007, 19:21
|||- - singlskv   Цитата(zltigo @ Sep 23 2007, 23:21) Такие...   Sep 23 2007, 21:00
|||- - zltigo   Цитата(singlskv @ Sep 24 2007, 00:00) Zlt...   Sep 23 2007, 21:52
|||- - singlskv   Цитата(zltigo @ Sep 24 2007, 01:52) Дело ...   Sep 23 2007, 22:50
||- - dxp   Цитата(singlskv @ Sep 23 2007, 00:49) Дав...   Sep 22 2007, 18:56
|- - dxp   Цитата(singlskv @ Sep 20 2007, 02:59) Вы ...   Sep 20 2007, 03:19
- - SasaVitebsk   Большое спасибо за развёрнутый совет. Похоже надо ...   Sep 22 2007, 17:17
|- - dxp   Цитата(SasaVitebsk @ Sep 23 2007, 00:17) ...   Sep 23 2007, 13:52
- - SasaVitebsk   Попробую я вмешаться. Я тоже делал много изделий с...   Sep 23 2007, 21:36
- - Rst7   Лично я в данном моменте (обмен по RSу, например) ...   Sep 24 2007, 07:05
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 11:05) Теперь ...   Sep 24 2007, 08:35
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 11...   Sep 24 2007, 08:51
|- - alexander55   Цитата(Rst7 @ Sep 24 2007, 12:51) Неужели...   Sep 24 2007, 09:28
|- - Непомнящий Евгений   Вдогонку Цитата(Rst7 @ Sep 24 2007, 12:51...   Sep 24 2007, 09:51
|- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 12...   Sep 24 2007, 10:14
- - Rst7   Цитата3. У меня логика посылки\повтора посылк...   Sep 24 2007, 11:14
- - dxp   Цитата(Rst7 @ Sep 24 2007, 18:14) Слова. ...   Sep 24 2007, 11:28
|- - Rst7   Цитата(dxp @ Sep 24 2007, 14:28) Я что-то...   Sep 24 2007, 11:53
|- - dxp   Цитата(Rst7 @ Sep 24 2007, 18:53) Ну да.....   Sep 24 2007, 12:06
|- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 15:53) Моя пра...   Sep 24 2007, 12:08
- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 15:14) У меня ...   Sep 24 2007, 11:53
- - Rst7   Цитата(Непомнящий Евгений @ Sep 24 2007, 14...   Sep 24 2007, 12:23
- - dxp   Цитата(Rst7 @ Sep 24 2007, 19:23) Не прос...   Sep 24 2007, 12:49
- - Непомнящий Евгений   Цитата(Rst7 @ Sep 24 2007, 16:23) А вам -...   Sep 24 2007, 12:59
- - dxp   Цитата(Непомнящий Евгений @ Sep 24 2007, 19...   Sep 24 2007, 13:35
2 страниц V   1 2 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 02:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01586 секунд с 7
ELECTRONIX ©2004-2016