SmartPipe. Строим циклограммы.

Блог им. trapper


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


Такая циклограмма дает много информации, полезной для анализа системы и ее оптимизации.

SmartPipe умеет собирать данные для построения циклограмм и формировать поток данных для программы OSL Logic Sniffer.
OSL Logic Sniffer — программа предназначена для работы с логическими анализаторами. Она может показывать изменения дискретных сигналов на 32-х каналах одновременно. Если эти дискретные сигналы будут представлять состояния работы функций исследуемой программы (функция выполняется — 1 / функция не выполняется -0), то мы получим циклограмму работы программы.
Принцип работы SmartPipe в режиме построения циклограммы достаточно простой, он основан на анализе логов проходящих через устройство. Если пользователь в коде программы добавит вывод уникальных логов при входе и выходе из функции, то при прохождении этих логов через SmartPipe, они будут опознаны и будет сформирована команда установки 0 или 1 в канале данных, зарезервированном для этой функции.
После этого поток каналов данных будет перенаправлен в один из портов SmartPipe. Подключив к порту терминальную программу и настроив ее на запись данных в файл, пользователь получает набор данных, который может быть загружен в OSL Logic Sniffer для анализа.

Таким образом подготовка к получению циклограммы от тестируемого устройства имеет два этапа:

Этап 1. Добавление логов на вход и выход функций.
Строка лога может быть любой.
Например:
  • [12:03:45.234987] Main() --:start
  • [12:03:46.234987] Main() --:stop
В логи желательно добавить дамп времени, определенного формата. Если в логах будет присутствовать дамп времени, то SmartPipe может считать этот дамп и использовать его для синхронизации потока данных. Если логи не будут иметь дампа времени, то SmartPipe будет подставлять свои метки, которые имеют «условный» характер (из-за задержки в приеме и обработке строк), при этом циклограмма будет отражать только последовательность работы функций с «условными» временными характеристиками.

Этап 2. Добавление SmartPipe правил.
В SmartPipe необходимо добавить правила для поиска логов функций из Этапа 1 в потоке логов.
Правила составляются стандартным для SmartPipe способом (см. статью SmartPipe.Правила.). При «срабатывании» правила должна быть выполнена специальная OLS команда.
Таких команд три:
olsstart <порт> <количество каналов> <типа time дампа>; — команда настойки и начала записи циклограммы;
olsstop; — команда остановки записи логов (вызывается автоматически при переходе в COMMAND MODE (см. статью SmartPipe.Настройка.) )
olsrun <номер канала> <0/1>; — устанавливает/сбрасывает переменную канала данных.
Примеры правил:
  • :*Main*start;; olsstart com2 6 2; — правило начала записи циклограммы со строки лога, содержащей подстроку Main и заканчивающийся подстрокой start. Данные будут выводиться в virtual COM2. При этом будет производиться запись в 6 каналов и будет распознаваться time дамп вида: [HH:MM:SS.uuuuuu]
  • :*Init*start;; olsrun 1 1; — правило установки переменной канала 1 в единицу для строки лога, содержащей подстроку Init и заканчивающийся подстрокой start.
  • :*Init*stop;; olsrun 1 0; — правило сброса переменной канала 1 в ноль для строки лога, содержащей подстроку Init и заканчивающийся подстрокой stop.
  • :*Main*stop;; olsstop; — правило остановки записи циклограммы со строки лога, содержащей подстроку Main и заканчивающийся подстрокой stop.
В результате при запуске тестируемой системе мы будем иметь циклограмму подобную показанной на рисунке ниже:

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.