IgorAVR2 1 November 29, 2022 Posted November 29, 2022 · Report post Есть такой отладчик (трассировщик) J-Trace Pro от Segger. Он позволяет в реальном времени показывать время выполнения той или иной функции на Си. Но цена его у производителя 2 тыс. евро. А в России намного дороже. Есть ли альтернативы ему? Может быть есть трассировщики других производителей и дешевле? Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 60 November 29, 2022 Posted November 29, 2022 · Report post Махание ногой на входе-выходе интересующей функции и логический анализатор - китайский аналог saleale. Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 25 November 30, 2022 Posted November 30, 2022 · Report post Коллеги, не растолкуете мне чуть более подробнее: чем лучше иметь трассировщик по сравнению с отладчиком (J-Link например)? Насколько я помню, на 20-ногий разъём JTAG выводятся дополнительные ножки для трассировочной информации. А в случае интерфейса SWD у нас есть одна линия SWO. Т.е., как я понимаю, отладчик может и трассировать тоже? Или есть какие-то нюансы? Я сам не пользовался этой возможностью. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 November 30, 2022 Posted November 30, 2022 · Report post 4 часа назад, IgorAVR2 сказал: Есть ли альтернативы ему? Может быть есть трассировщики других производителей и дешевле? Откройте какой-нить отладчик. Например IAR. Найдите в нём окошко "Current CPU Registers". Найдите в нём регистры: И измеряйте по ним время выполнения вашей функции сколько угодно раз и совершенно бесплатно. 58 минут назад, haker_fox сказал: Коллеги, не растолкуете мне чуть более подробнее: чем лучше иметь трассировщик по сравнению с отладчиком (J-Link например)? Имхо: Самое главное достоинство трэйсера - возможность обратной трассировки. Обычно по SWD такая функция недоступна. Правда в некоторых МК, которые имеют свой встроенный ETB (enhanced trace buffer вроде), за счёт него имеют возможность обратной трассировки, даже через обычный JTAG/SWD с обычным эмулятором без трэйсера. Но ETB имеют очень редкие МК. Кстати: LPC43xx - один из немногих, в которых ETB как раз имеется. Вам должно быть это известно (Вы же вроде LPC43xx используете?) Когда я имел счастье работать с LPC4370, я пользовался его шикарным ETB, не тратясь на трэйсер. Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 25 November 30, 2022 Posted November 30, 2022 · Report post 14 minutes ago, jcxz said: Вам должно быть это известно (Вы же вроде LPC43xx используете?) Когда я имел счастье работать с LPC4370, я пользовался его шикарным ETB, не тратясь на трэйсер. Да, я использую LPC4337. Да, знаю о наличие ETB, но как-то не сложилось им пользоваться. Не возникало необходимости наверное. Либо не распробовал сладкий вкус этой отладки 15 minutes ago, jcxz said: возможность обратной трассировки. Простите, чтобы сейчас не заниматься переводом с английского на русский, под обратной трассировкой Вы подразумеваете, что можно от точки Г пройти назад к точке А и проследить "флешбэк" (по аналогии с фильмом) ошибки или странной ситуации в программе? Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 November 30, 2022 Posted November 30, 2022 · Report post 5 минут назад, haker_fox сказал: под обратной трассировкой Вы подразумеваете, что можно от точки Г пройти назад к точке А и проследить "флешбэк" (по аналогии с фильмом) ошибки или странной ситуации в программе? Да, именно так. Позволяет проследить "как мы докатились до такого безобразия, на которое сейчас смотрит наш PC". 5 минут назад, haker_fox сказал: знаю о наличие ETB, но как-то не сложилось им пользоваться. Не возникало необходимости наверное. Видимо Вы - один из тех немногих счастливцев, которые никогда не сталкивались с вышеописанным безобразием. Остаётся только позавидовать 1 Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 25 November 30, 2022 Posted November 30, 2022 · Report post 1 minute ago, jcxz said: Да, именно так. Позволяет проследить "как мы докатились до такого безобразия, на которое сейчас смотрит наш PC". Спасибо) 1 minute ago, jcxz said: Видимо Вы - один из тех немногих счастливцев, которые никогда не сталкивались с вышеописанным безобразием. Остаётся только позавидовать Возможно, что я просто игнорировал данный способ отладки. Теперь не буду. Правда вместо LPC4337 мне светит либо GD32F450, либо AT32F437... А у этих зверьков я ещё не исследовал все возможные способы отладки. Quote Share this post Link to post Share on other sites More sharing options...
IgorAVR2 1 November 30, 2022 Posted November 30, 2022 · Report post 11 hours ago, Сергей Борщ said: Махание ногой на входе-выходе интересующей функции и логический анализатор - китайский аналог saleale. Вопрос у меня не в том как изменить время выполнения одной функции, это я спокойно и раньше делал аналогичным способом, а в том как анализировать куча разных функций, код в которые всё время пишется, да при этом их нужно выполнять максимально быстро. Других путей как эта функция трассировщика пока не придумал. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 November 30, 2022 Posted November 30, 2022 · Report post 1 час назад, IgorAVR2 сказал: а в том как анализировать куча разных функций, код в которые всё время пишется Чем мой способ не подходит? И дописывать ничего не нужно и измеряет с точностью до такта CPU. Quote Share this post Link to post Share on other sites More sharing options...
yes 4 November 30, 2022 Posted November 30, 2022 · Report post 8 hours ago, haker_fox said: Да, я использую LPC4337. Да, знаю о наличие ETB, но как-то не сложилось им пользоваться. Не возникало необходимости наверное. Либо не распробовал сладкий вкус этой отладки Простите, чтобы сейчас не заниматься переводом с английского на русский, под обратной трассировкой Вы подразумеваете, что можно от точки Г пройти назад к точке А и проследить "флешбэк" (по аналогии с фильмом) ошибки или странной ситуации в программе? обычно под бэктрейсом подразумевается раскрутка стека по фрэйм-поинтерам, то есть сугубо С-шная отладка (вряд ли кто-то стэк фрейм на ассемблерном коде поддерживает) по ETB и подобным логам можно ходить назад, но если была например инструкция XOR R1, R2 то восстановить R1 и R2, зная результат не получится, а таке трэйсы, которые хранят вообще все, возможны по-моему, только в HDL симуляции, в кремний такое не засунешь... Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 November 30, 2022 Posted November 30, 2022 · Report post 2 часа назад, yes сказал: обычно под бэктрейсом подразумевается раскрутка стека по фрэйм-поинтерам, то есть сугубо С-шная отладка (вряд ли кто-то стэк фрейм на ассемблерном коде поддерживает) Может это Вы так подразумеваете, но если почитать описание функционала J-Trace с segger.com, то они это понимают именно так, как я описывал: Цитата Unlimited instruction trace The main information which can be retrieved from the trace data is the execution flow of the system, so which instructions have been executed or not executed. Debugger applications can visualize the instruction trace data, usually done in a backtracing fashion. The most recently executed instructions are displayed and optionally mapped to the application's sources. This allows navigating through them to see what happened last in the target system. With non-stream trace probes, the available instructions for backtracing is limited to the internal trace buffer of the trace probe, which only holds the latest trace data when the target system is halted. Using target system internal trace capabilities, like the Embedded Trace Buffer (ETB), which can store a few kilobytes of trace data in internal RAM, limits the available trace data even more. The J-Trace PRO streaming trace capability technically enables instruction tracing of the whole system execution from the startup to its current point. To find issues in the execution a limited trace buffer might be sufficient, but streaming trace allows a complete analysis of the system to be used for code coverage and profiling analysis. 2 часа назад, yes сказал: по ETB и подобным логам можно ходить назад, но если была например инструкция XOR R1, R2 то восстановить R1 и R2, зная результат не получится, а таке трэйсы, которые хранят вообще все, возможны по-моему, только в HDL симуляции, в кремний такое не засунешь... Обратная трассировка даёт возможность проследить последовательность выполненных команд. Это обычно самое полезное. И (как видно из цитаты выше) преимущество трэйсера в том, что он сразу (in real time) выдаёт наружу инфу трассировки. Таким образом снимается ограничение размером ETB. Quote Share this post Link to post Share on other sites More sharing options...
IgorAVR2 1 November 30, 2022 Posted November 30, 2022 · Report post 2 hours ago, jcxz said: Чем мой способ не подходит? И дописывать ничего не нужно и измеряет с точностью до такта CPU. Не подходит тем что он не показывает в реальном времени да ещё и по нескольким функциям. И совсем не наглядно, т.к. показывает в тактах, а не во времени в процентах. Или я не правильно как то понимаю ваш способ? Quote Share this post Link to post Share on other sites More sharing options...
yes 4 November 30, 2022 Posted November 30, 2022 · Report post 51 minutes ago, jcxz said: Может это Вы так подразумеваете, но если почитать описание функционала J-Trace с segger.com, то они это понимают именно так, как я описывал: не я один gdb backtrace - такая есть команда ---------------------------------------- по поводу ETB у меня всегда были вопросы с реалтаймовостью, особенно с теми ETB, которые читаются через SWD, а не через специальный порт с много-много ножек да, там насколько я понимаю, используется некая компресия - ну типа не все подряд пишется, а только инструкции перехода и т.п. но все равно, гарантий, что успеет скачаться по жидкому проводку без торможения ядра.... я использую всякие полусамодельные логгеры для отладки каких-либо "coredump-ов" типа эксепшинов и т.п. а в реалтайме все-таки другие методы нужны - ну тот же светодиод или перформанс счетчики... upd: ну то есть в железке (HDL) прикрутить самодельный аналог ETB не проблема, сложнее написать толковый разборщик содержимого этиих буферов. поэтому я, например, люблю библиотеку Gaisler-а - код RTL там может и не самый прямой и к тому же VHDL, но зато великолепный отладчик grmon, который все это умеет "ис коропки" тут из-за известных событий проекты в РФ у меня прекратились и я не успел, но хотел прикрутить вот эту штуку (ее может и с готовым процем запустить, не с софткоре-м) https://baical.net/p7.html Quote Share this post Link to post Share on other sites More sharing options...
AVI-crak 0 November 30, 2022 Posted November 30, 2022 · Report post То о чём говорится - требует jtag отладчика с реальными аппаратными линиями трассировки, через swd трассировка в реальном времени невозможна. GTAG + 16линий трассы + аппаратный полный usb3.1 + быстрая память на пару гиг ->>> имеет ценник выше 1к зелени. Предназначен для очень жирных фпга и мк. Программное обеспечение тоже имеет не гуманный ценник, и не продаётся в нашей стране. Кроме того, железяка в любой момент может превратиться в кирпич, если заокеанскому партнёру чего-то не понравится. Офлайн железка работать не умеет, и кстати не продаётся у нас. Свистоперделки с одной линией трассировки, не способны на трассировку в реальном времени даже на заниженной до 1МГц тактовой ядра мк. Оригинальный stlink3 - тоже не может, я проверял. Я не знаю других вариантов, но с удовольствием послушал-бы о них. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 November 30, 2022 Posted November 30, 2022 · Report post 1 час назад, IgorAVR2 сказал: Не подходит тем что он не показывает в реальном времени да ещё и по нескольким функциям. И совсем не наглядно, т.к. показывает в тактах, а не во времени в процентах. Если надо в реальном времени - никто не мешает читать этот же счётчик программно. И сколько функций нужно - столько и меряйте, тоже не проблема. Чтобы показывать в процентах, их надо считать относительно чего-то. Если знаете относительно чего, опять-же - кто мешает вычислить отношение? 1 час назад, yes сказал: по поводу ETB у меня всегда были вопросы с реалтаймовостью, особенно с теми ETB, которые читаются через SWD, а не через специальный порт с много-много ножек да, там насколько я понимаю, используется некая компресия - ну типа не все подряд пишется, а только инструкции перехода и т.п. но все равно, гарантий, что успеет скачаться по жидкому проводку без торможения ядра.... Вы не прочитали цитату, которую я привёл выше.... ETB - это не для реалтаймовой выдачи потока инструкций наружу. ETB сохраняет их внутри, в кольцевой буфер во внутренней ОЗУ МК. А выдаёт наружу только по требованию, например: когда вы остановили выполнение отладчиком и открыли окошко "tracing". И скорость чтения поэтому не важна, даже через SWD она такая, что не успеете глазом моргнуть как окошко заполнится. Соответствено никаких "компрессий" в ETB нет. А вот J-Trace - он сохраняет не во внутренний буфер, а выдаёт наружу в реальном времени. Я же специально привёл цитату с сайта segger - советую всё-же прочитать её. Там это всё написано. 1 час назад, yes сказал: я использую всякие полусамодельные логгеры для отладки каких-либо "coredump-ов" типа эксепшинов и т.п. а в реалтайме все-таки другие методы нужны - ну тот же светодиод или перформанс счетчики... При разрушении стека и улёта выполнения по произвольному адресу, никакой светодиод не поможет. А вот трэйсер в такой ситуации весьма полезен. 1 час назад, yes сказал: ну то есть в железке (HDL) прикрутить самодельный аналог ETB не проблема Вот откуда такое стремление всё колхозить на коленке??? Неужто свободного времени вагон? Ведь трэйсер - это уже готовое решение, колхоз не нужен. 1 час назад, AVI-crak сказал: То о чём говорится - требует jtag отладчика с реальными аппаратными линиями трассировки, через swd трассировка в реальном времени невозможна. ETB выполняет трассировку именно в реальном времени. Только наружу выдаёт не в реальном, через бутылочное горлышко. Советую всё же почитать мануал. Quote Share this post Link to post Share on other sites More sharing options...