+7(952) 531-56-65

jetlink.jtag@gmail.com

» » Часть 3. Использование j-scope для расширенной отладки.

Часть 3. Использование j-scope для расширенной отладки.


Описание


Segger предлагает для отладки приложения в реальном времени утилиту «J-Scope».  Эта утилита может работать через JTAG,  но также работает через стандартный двухпроводный интерфейс SWD. Таким образом, через один интерфейс можно "прошивать" программу, отлаживать по-шагово и в реальном времени.
Запускаем   J-Scope, в данном случае производится описание версии V6.11m. Программа предлагает создать новый проект или загрузить существующий
Выбираем пункт создать новый проект. В предложенных по умолчанию настройках изменяем только два пункта: это elf файл проекта, прошитого в микроконтроллер и тип микроконтроллера.
 
Для примера покажем процесс отладки детектора металлов, который определяет наличие и тип металла с помощью вычисления сдвига фазы сигнала на приемной катушке.  Детектор с методом «индуктивного баланса». Программа написана под FreeRtos. Алгоритм работы упрощенно выглядит так:
1. Устройство ПДП c помощью АЦП  собирает пакет данных со значениями напряжения на приемной катушке, в непрерывном цикле;
2.  Прерывания по половине/окончанию буфера уведомляет задачу обработки о готовности очередной порции данных;
3. Задача обработки складывает, усредняет данные, умножает их на значения SIN/COS для определения наличия сдвига и в дальнейшем вычисляет сдвиг фазы. 
4. Результаты обработки выводятся на экран функцией, которая запускается при простое FreeRTOS – vApplicationIdleHook.

По этому описанию понятно, что останавливать программу для просмотра значений переменных не желательно, так как останов испортит данные. Нажимаем «ОК» после выбора типа микроконтроллера и elf файла. Теперь поэтапный просмотр алгоритма

Этап 1

Для примера выбираем последнее значение из буфера ПДП, в начале в столбике «Add Symbol» вводим номер требуемого значения: 127, затем внизу устанавливаем «галочку»

Нажимаем «OK» . При этом в нижней части экрана начинает формироваться список переменных для отображения. При нажатии правой клавиши мыши на элементе списка вызывается, меню подобное меню цифрового осциллографа.

Можно выбрать положение наблюдаемых переменных по вертикали, цвет, масштаб,  убрать «постоянную составляющую»  и т.д. Но проще запустить просмотр(и запись) кнопкой в верхней части экрана. 

В случае, если при отладке вы используете Jetlink9,  программа выведет информацию об ограничении скорости съема данных (частота выборки/семплирования)Нажимаем «ОК», производим взмах перед катушкой «цветной» и «железной» целью.  Производим масштабирование и получаем картинку


Первый провал это пронос цветной цели, провал с выбросом – пронос железной цели. 
Данные можно сохранить через меню «File/Export Data» в формате CSV.
Их можно обработать в математическом пакете, например Matlab , чтобы оценить соотношение сигнал шум или оценить уровень помех.
Можно сохранить/восстановить  данные сессии через Export/Import Raw в меню File. Но перед этим нужно сохранить проект «File/Save Project». При этом загруженные данные можно оперативно масштабировать для просмотра нужных участков.

Этап 2
На свободном поле списка переменных кликнем правой клавишей мыши  и добавим накопленное значение сигнала. В данном случае за 128 выборок.

Трудно понять, что происходит. Увеличиваем разрешение  U_RX_buf (стать курсором мыши на строку с переменной и нажимать клавишу «-») . На нижнем графике видим пронос цели возле катушки, на верхнем, слабо выражен второй пик, первый еле угадывается. Очевидно, сказывается частота семплирования – 50Гц. Может быть не зря было окошко с предупреждением о рекомендации использовать более быстрый эмулятор? Отключаем Jetlink9 и подключаем Jetlink Ultra.
Поднимаем частоту выборки до 10кГц (значок шестеренки в верхнем левом углу экрана) получаем следующую картинку


При одинаковом масштабе, на одиночных значениях (U_RX_buf, зеленый график) не различить наличие цели. По накопленному (желтый график)  видно прохождение цели и работу DMA двумя порциями.

Этап 3

Просмотр sin/cos составляющих сигнала. В детектировании металлов принято обозначать сигналы X/Y. Удалим ранее наблюдаемые, и по правому щелчку мыши добавим два новых. 
Для эксперимента выставим частоту выборки 1МГц (период 1 микросекунда).
Значение int занимает 4 байта, две переменных 8. Рассчитываем требуемую битовую   частоту тактирования интерфейса 1000000 * 8 * 8 =  64МГц. Частота тактирования интерфейса отладки в нашем микроконтроллере всего 4 Мгц.  Так что при запуске процесса приема данных должны получить сообщение об ограничении. Для переменной типа int максимальное количество выборок за секунду срставит 4000000/4/8=125000. С учетом накладных расходов на организацию обмена можно рассчитывать на 100 кГц. Запускаем и получаем подтверждение расчетов.


Нажимаем «OK» и снимаем сигналы X/Y.


По графику видно, что сигнал имеет ступеньки. Экспортируем данные в csv формат и с помощью табличного редактора смотрим на данные. В первом столбце метка времени (микросекунды), затем сигналы X и Y. Для удобства просмотра вырезана средняя часть данных. Видно, что данные меняются ориентировочно каждые 82 выборки. Рассчитаем по временным меткам время, когда сигнал не меняется 14058-3036 = 11022 микросекунды или 11 миллисекунд. 
Сравним период обновления информации, полученный через J-scope, с расчетным исходя из алгоритма.
Расчет X/Y происходит порциями по 64 периода частоты раскачки передающей катушки 5800Гц. То есть частота смены значений 5800/64 = 90 Гц.
Период смены значений 1/90 = 11 миллисекунд. Теория и практика сошлась.

Этап 4
Конечный результат работы алгоритма вычислит сдвиг фазы, получаемый при проносе металлического предмета в поле катушки.


Сверху показано изменения значений X и Y, внизу вычисленное значение сдвига фазы. Алгоритм удаляет постоянную составляющую. При отсутствии цели функция арктангенса от соотношения X/Y постоянно меняется – шумит. 

При наличии металла, появляется существенная переменная составляющая и сигнал становиться более устойчивым. Кроме этого для того, чтобы оператор не пропустил короткий сигнал, применяется искусственное расширение. В результате получается широкая полочка, которую можно озвучить для оператора и показать значение сдвига в удобном виде.
Можно подвести небольшой итог.
Программа   «J-Scope» с помощью эмулятора  позволяет отслеживать обработку данных в реальном времени. При этом не нужно вносить изменения в программу. Отладка не вносит дополнительные возмущения в обработку.
Кроме этого появляется возможность производить профилирование задач и функций. Например, для просмотра механизма переключения задач и профилирование времени можно ввести числовую переменную, в которую заносить число, соответствующее задачи или функции.
Вот, например график 4-х подзадач с номерами от 0 до 3, которые работают в приведенном устройстве. 


Быстрая доставка

Безопасная оплата

Гарантия качества