Перейти к содержанию
    

Трассировщик для Cortex M ядер

Есть такой отладчик (трассировщик) J-Trace Pro от Segger. Он позволяет в реальном времени показывать время выполнения той или иной функции на Си. Но цена его у производителя 2 тыс. евро. А в России намного дороже. Есть ли альтернативы ему? Может быть есть трассировщики других производителей и дешевле?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Махание ногой на входе-выходе интересующей функции и логический анализатор - китайский аналог saleale.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, не растолкуете мне чуть более подробнее: чем лучше иметь трассировщик по сравнению с отладчиком (J-Link например)? Насколько я помню, на 20-ногий разъём JTAG выводятся дополнительные ножки для трассировочной информации. А в случае интерфейса SWD у нас есть одна линия SWO. Т.е., как я понимаю, отладчик может и трассировать тоже? Или есть какие-то нюансы? Я сам не пользовался этой возможностью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, IgorAVR2 сказал:

Есть ли альтернативы ему? Может быть есть трассировщики других производителей и дешевле?

Откройте какой-нить отладчик. Например IAR. Найдите в нём окошко "Current CPU Registers". Найдите в нём регистры:

image.png.25d48fc3f9f302a95c511261dcb96878.png

И измеряйте по ним время выполнения вашей функции сколько угодно раз и совершенно бесплатно.  :unknw:

58 минут назад, haker_fox сказал:

Коллеги, не растолкуете мне чуть более подробнее: чем лучше иметь трассировщик по сравнению с отладчиком (J-Link например)?

Имхо: Самое главное достоинство трэйсера - возможность обратной трассировки.

Обычно по SWD такая функция недоступна. Правда в некоторых МК, которые имеют свой встроенный ETB (enhanced trace buffer вроде), за счёт него имеют возможность обратной трассировки, даже через обычный JTAG/SWD с обычным эмулятором без трэйсера. Но ETB имеют очень редкие МК.

Кстати: LPC43xx - один из немногих, в которых ETB как раз имеется. Вам должно быть это известно (Вы же вроде LPC43xx используете?) Когда я имел счастье работать с LPC4370, я пользовался его шикарным ETB, не тратясь на трэйсер.  :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, jcxz said:

Вам должно быть это известно (Вы же вроде LPC43xx используете?) Когда я имел счастье работать с LPC4370, я пользовался его шикарным ETB, не тратясь на трэйсер.

Да, я использую LPC4337. Да, знаю о наличие ETB, но как-то не сложилось им пользоваться. Не возникало необходимости наверное. Либо не распробовал сладкий вкус этой отладки:blum3:

15 minutes ago, jcxz said:

возможность обратной трассировки.

Простите, чтобы сейчас не заниматься переводом с английского на русский, под обратной трассировкой Вы подразумеваете, что можно от точки Г пройти назад к точке А и проследить "флешбэк" (по аналогии с фильмом) ошибки или странной ситуации в программе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, haker_fox сказал:

под обратной трассировкой Вы подразумеваете, что можно от точки Г пройти назад к точке А и проследить "флешбэк" (по аналогии с фильмом) ошибки или странной ситуации в программе?

Да, именно так. Позволяет проследить "как мы докатились до такого безобразия, на которое сейчас смотрит наш PC".  :smile:

5 минут назад, haker_fox сказал:

знаю о наличие ETB, но как-то не сложилось им пользоваться. Не возникало необходимости наверное.

Видимо Вы - один из тех немногих счастливцев, которые никогда не сталкивались с вышеописанным безобразием. Остаётся только позавидовать  :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jcxz said:

Да, именно так. Позволяет проследить "как мы докатились до такого безобразия, на которое сейчас смотрит наш PC".  :smile:

Спасибо)

1 minute ago, jcxz said:

Видимо Вы - один из тех немногих счастливцев, которые никогда не сталкивались с вышеописанным безобразием. Остаётся только позавидовать  :smile:

Возможно, что я просто игнорировал данный способ отладки. Теперь не буду. Правда вместо LPC4337 мне светит либо GD32F450, либо AT32F437... А у этих зверьков я ещё не исследовал все возможные способы отладки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, Сергей Борщ said:

Махание ногой на входе-выходе интересующей функции и логический анализатор - китайский аналог saleale.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, IgorAVR2 сказал:

а в том как анализировать куча разных функций, код в которые всё время пишется

Чем мой способ не подходит? И дописывать ничего не нужно и измеряет с точностью до такта CPU.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, haker_fox said:

Да, я использую LPC4337. Да, знаю о наличие ETB, но как-то не сложилось им пользоваться. Не возникало необходимости наверное. Либо не распробовал сладкий вкус этой отладки:blum3:

Простите, чтобы сейчас не заниматься переводом с английского на русский, под обратной трассировкой Вы подразумеваете, что можно от точки Г пройти назад к точке А и проследить "флешбэк" (по аналогии с фильмом) ошибки или странной ситуации в программе?

обычно под бэктрейсом подразумевается раскрутка стека по фрэйм-поинтерам, то есть сугубо С-шная отладка (вряд ли кто-то стэк фрейм на ассемблерном коде поддерживает)

по ETB и подобным логам можно ходить назад, но если была например инструкция XOR R1, R2 то восстановить R1 и R2, зная результат не получится, а таке трэйсы, которые хранят вообще все, возможны по-моему, только в HDL симуляции, в кремний такое не засунешь...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

Чем мой способ не подходит? И дописывать ничего не нужно и измеряет с точностью до такта CPU.

Не подходит тем что он не показывает в реальном времени да ещё и по нескольким функциям. И совсем не наглядно, т.к. показывает в тактах, а не во времени в процентах. Или я не правильно как то понимаю ваш способ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То о чём говорится - требует jtag отладчика с реальными аппаратными линиями трассировки, через swd трассировка в реальном времени невозможна.

GTAG + 16линий трассы + аппаратный полный usb3.1 + быстрая память на пару гиг ->>> имеет ценник выше 1к зелени. Предназначен для очень жирных фпга и мк. Программное обеспечение тоже имеет не гуманный ценник, и не продаётся в нашей стране. Кроме того, железяка в любой момент может превратиться в кирпич, если заокеанскому партнёру чего-то не понравится. Офлайн железка работать не умеет, и кстати не продаётся у нас.

Свистоперделки с одной линией трассировки, не способны на трассировку в реальном времени даже на заниженной до 1МГц тактовой ядра мк. Оригинальный stlink3 - тоже не может, я проверял.

Я не знаю других вариантов, но с удовольствием послушал-бы о них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, IgorAVR2 сказал:

Не подходит тем что он не показывает в реальном времени да ещё и по нескольким функциям. И совсем не наглядно, т.к. показывает в тактах, а не во времени в процентах.

Если надо в реальном времени - никто не мешает читать этот же счётчик программно. И сколько функций нужно - столько и меряйте, тоже не проблема.

Чтобы показывать в процентах, их надо считать относительно чего-то. Если знаете относительно чего, опять-же - кто мешает вычислить отношение?

1 час назад, yes сказал:

по поводу ETB у меня всегда были вопросы с реалтаймовостью, особенно с теми ETB, которые читаются через SWD, а не через специальный порт с много-много ножек

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

Вы не прочитали цитату, которую я привёл выше.... ETB - это не для реалтаймовой выдачи потока инструкций наружу. ETB сохраняет их внутри, в кольцевой буфер во внутренней ОЗУ МК. А выдаёт наружу только по требованию, например: когда вы остановили выполнение отладчиком и открыли окошко "tracing". И скорость чтения поэтому не важна, даже через SWD она такая, что не успеете глазом моргнуть как окошко заполнится. Соответствено никаких "компрессий" в ETB нет.

А вот J-Trace - он сохраняет не во внутренний буфер, а выдаёт наружу в реальном времени. Я же специально привёл цитату с сайта segger - советую всё-же прочитать её. Там это всё написано.

1 час назад, yes сказал:

я использую всякие полусамодельные логгеры для отладки каких-либо "coredump-ов" типа эксепшинов и т.п. а в реалтайме все-таки другие методы нужны - ну тот же светодиод или перформанс счетчики...

При разрушении стека и улёта выполнения по произвольному адресу, никакой светодиод не поможет. А вот трэйсер в такой ситуации весьма полезен.

1 час назад, yes сказал:

ну то есть в железке (HDL) прикрутить самодельный аналог ETB не проблема

Вот откуда такое стремление всё колхозить на коленке??? :unknw: Неужто свободного времени вагон? Ведь трэйсер - это уже готовое решение, колхоз не нужен.

1 час назад, AVI-crak сказал:

То о чём говорится - требует jtag отладчика с реальными аппаратными линиями трассировки, через swd трассировка в реальном времени невозможна.

ETB выполняет трассировку именно в реальном времени. Только наружу выдаёт не в реальном, через бутылочное горлышко. Советую всё же почитать мануал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...