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

 
 
 
Reply to this topicStart new topic
> Профайлер, умный, красивый и понятный
UniBomb
сообщение Sep 28 2009, 13:47
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



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


Итак, во время очередной затяжной отладки программы я понял что чего-то мне не хватает в этой жизни для полного счастия. Я понял, что считать быстродействие функций по тактам это зло. Я понял, что следить за переменными ставя точки останова по всей программе это от лукавого. Я понял, что отлавливать вхождения одних функций в другие по загоранию светодиода это тоже не очень хорошо. И я в конце концов пришёл к выводу, что мне нужен хороший профайлер. Единственное что я пока обнаружил - это avr-gprof.exe тихо спящим в папке bin моего WinAVR. Вот пока копаю в эту сторону и что-то оно меня пока не впечатляет.


Посему вопрос знатокам - а есть ли в природе альтернативы этому чуду? Что бы мог указать зависимость вызовов функций, что бы мог указать время выполнения каждого куска кода, что бы мог сказать где и как переменные используются, что и зачем храниться в стеке и т.д. И при всём при этом что бы он имел хоть какой-нибудь графический интерфейс...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 28 2009, 17:10
Сообщение #2


Гуру
******

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



Порой создаётся ощущение, что когда люди задают вопрос, то предварительно не осмысливают его. Это не в обиду.

Представьте себе, что вам поставили такую задачу. Сделать такое вот програмное средство. Попробуйте осмыслить эту задачу и прикинуть реализацию.

Я думаю что вы поймёте, что для выполнения даже части из поставленных вами задач, придётся внести спец участки прямо в код вашей программы (то есть в МК). Более того, эти части должны где-то собирать данные и как-то передавать инфу в головную программу. При этом желательно чтобы они не занимали место во флэш (например ваш код составляет 90% от макс. объёма), не занимали место в памяти (то же) и не влияли на производительность МК (иначе вы не получите объективного результата). Кроме того, они должны вмешиваться в вашу прогу и, в тоже время, не должны влиять на её работоспособность.

Прикинули задачку? А теперь реализуем её для мега48 к примеру?

Существуют для крупных камней спец аппаратные приблуды типа AVR ONE со стоимостью ~ 1000$. Вроде там такое частично реализовано аппаратным способом.

==============

С другой стороны, ничего из вами перечисленного, я, практически, не применяю. Прогрес идёт вперёд. Камень закладывается со значительным запасом (благо разница в цене несущественна и явно выглядит убедительней "затяжной отладки"). Фраза "... отлавливать вхождения одних функций в другие по загоранию светодиода ..." у меня вызывает изумление.

Может поясните, на конкретном примере, а мы попробуем вам предложить альтернативу. Все же отлаживают в конце концов...

С уважением ....
Go to the top of the page
 
+Quote Post
UniBomb
сообщение Sep 29 2009, 11:34
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



SasaVitebsk, вот как раз из-за того, что прогресс шагает и шагает я и предложил что такая утопия уже воплощена в каком-либо объёме. На самом деле я не написал ничего экстрасложного, разные части уже реализованы для того или иного языка программирования/интегрированной среды/etc. Многое из того, что я перечислил можно вообще получать на этапе компиляции.

Но раз уж такая постановка задачи не нравится, то перефразирую её - "А есть ли в природе ещё профайлеры кроме gprof?".

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

В общем вот...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 29 2009, 12:15
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(UniBomb @ Sep 28 2009, 16:47) *
Посему вопрос знатокам - а есть ли в природе альтернативы этому чуду? Что бы мог указать зависимость вызовов функций, что бы мог указать время выполнения каждого куска кода, что бы мог сказать где и как переменные используются, что и зачем храниться в стеке и т.д. И при всём при этом что бы он имел хоть какой-нибудь графический интерфейс...
Есть. Intel ® VTune ™
Подумайте - как он это вытворяет и почему такое для AVR не пойдёт. И почему на AVR и с jtag что-либо похожее не выйдёт.
Для AVR спасёт
  • Полновесный аппаратный эмулятор, но это дорого и такие вещи что-то в последнее время не делаются
  • Хороший программный симулятор с возможностью навешивать скрипт-хуки на всё, что шевелится - это будет виртуальный vtune.
    Но к нему надо адекватные модели "окружающей среды" понаписывать и "testbench"


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 29 2009, 14:05
Сообщение #5


Гуру
******

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



Здесь уже неоднократно обсуждалось сообществом кто и как определяет "быстродействие функции". В основном - всё самопально. Обычно упоминают два варианта: "по осциллографу" и "по таймеру". Я, к примеру, использую "по таймеру", с расчётом максимального и среднего занчения.

Если бы у меня стояла такая задача очень остро, то, наверное пришлось бы написать свою библиотеку для данных целей. Результат профиллирования размещал бы в озу и смотрел бы доступным мне образом. Например ч/з JTAG.

Готовых програмных сред я не встречал. Мне кажется, что причина - высокая сложность и малая востребованность.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 29 2009, 16:02
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(SasaVitebsk @ Sep 29 2009, 17:05) *
Результат профиллирования размещал бы в озу и смотрел бы доступным мне образом. Например ч/з JTAG.

Консоль можно поднять...
Go to the top of the page
 
+Quote Post
RA3WUM
сообщение Sep 30 2009, 09:39
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Используйте симуляторы и не парьтесь.
Например HAPSIM или AVR Simulator IDE.


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2009, 10:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(UniBomb @ Sep 29 2009, 14:34) *
Скажу просто - есть достаточно громоздкая система с кучей функций. Декомпозиция проведена не очень хорошо и надо это дело оптимизировать.

Вообще-то правильный путь думать, что творишь до и во время написания, а не после. Много эффективнее отладчиков, профайлеров....
Проверено smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sitafern
сообщение Oct 1 2009, 04:48
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 8-08-05
Пользователь №: 7 466



А вот про IAR Systems WorkBench никто и не вспомнил. Понятно, что не всё из перечисленного там есть, но работать с профилировщиком там достаточно удобно. Хоть и симулятор, но представление о работе управляющей программы даёт. В принципе, когда работал ещё в DOS-е, то пользовался профилировщиком для "вылизывания программы". Только баловство всё это.
Go to the top of the page
 
+Quote Post
muravei
сообщение Oct 1 2009, 06:41
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(zltigo @ Sep 30 2009, 14:31) *
правильный путь думать,
Проверено smile.gif

Это очень , трудный путь smile.gif
Проверено sad.gif
Go to the top of the page
 
+Quote Post
UniBomb
сообщение Oct 1 2009, 07:30
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



RA3WUM, за HAPSIM спасибо, не знал о такой примочке))) А вот второе... Я не программирую на бейсике по религиозным причинам....

zltigo, да я сам проповедую такой подход, просто ситуация такая сложилась. Поставленную задачу я решал впервые, опыта проектирования программ подобного рода у меня мало да и решить задачу требовалось в самые кратчайшие сроки. Сейчас вроде всё работает, но мне жутко не нравится реализация. Чувствую сопровождать такую программу будет очень сложно. Сейчас пока времени более-менее хватает и пока я ещё помню что и зачем я делал я решил улучшить качество кода...

sitafern, он платный ):



В общем я так понял, что искомого мне не найти... Жаль. Поставил себе в блокнотик в разделе "долгосрочные задумки" заметку "сделать что-то подобное", авось у меня что-нибудь получится...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 2 2009, 08:39
Сообщение #12


Гуру
******

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



Вы знаете, я тоже редко когда доволен кодом после написания. Видимо так устроен. smile.gif
Всегда найдётся что в проге улучшить. А знания приходят с опытом.

Это замечательно, если можно что-то чуть-чуть подправить. Обычно это тупиковый путь. Обычно хочется переписать всё это заново с учётом сделанного. А это, чаще - невозможно. smile.gif

Зато новое изделие будет лучше предыдущего. smile.gif
Go to the top of the page
 
+Quote Post
UniBomb
сообщение Oct 2 2009, 09:09
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 148
Регистрация: 26-05-05
Пользователь №: 5 416



SasaVitebsk, в моей пока ещё недолгой карьере я был доволен кодом всего один раз smile.gif Прошивку для предыдущего прибора я писал довольно долго, менял методы решений, оптимизировал, сокращал и т.д. Зато когда я закончил - налюбоваться не мог (не то, что бы я бахвальством любил заниматься smile.gif ). Ничего не прибавить, ничего не убавить, лепота smile.gif

А так в принципе любой инженер устроен - будь то программист или схемотехник (или ещё кто). И я считаю, что это здорово когда есть желание стремится к лучшему smile.gif
Go to the top of the page
 
+Quote Post
Diz
сообщение Oct 2 2009, 11:02
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 1-08-06
Пользователь №: 19 250



Время выполнения куска кода замеряю просто по таймеру.
Вот таким образом:

CODE


#define PROFILE( __Descr) for ( int __toDo = ({start_profile( __Descr); 1; }) ; __toDo; __toDo = 0, stop_profile())

static const char *profStr;

void start_profile( const char *descStr)
{
if ( T1TCR)
return; // Another profiling is on the way

profStr = descStr; // Store description

T1TCR = 0; // Stop timer
T1MR0 = ~0;
T1MCR = MR0R | MR0S;
T1TC = 0;
T1PC = 0;
T1TCR = 1;

}
void stop_profile( void)
{
ulong Cnt;
T1TCR = 0; // Stop timer
Cnt = T1TC;
ulong Ticks = ((double) (1.0/F_CPU * 1E6) * Cnt) ;
fw_printf( ANSI_YELLOW"Profiling %s. About %lu ticks (%ldus)\n\r"ANSI_NORMAL, profStr, Cnt, Ticks) ;
}

Использование:

PROFILE("drawing screen")
{
draw_screen();
}
Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 2 2009, 11:30
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Нечто подобное под названием профайлер есть в среде VisualDSP для Blackfin(да и для остальных камней от ADI). Если уж зашла речь о прогрессе и больших контроллерах...


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post

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

 


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


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