J-Link SWO Viewer является инструментом, позволяющим просматривать текстовый вывод (terminal output), который производит отлаживаемое целевое устройство (target) через свой аппаратный вывод SWO. Это можно использовать без режима отладки, когда приложение работает само по себе и выводит информацию лога, или можно использовать вместе с отладчиком, таким как GDB или связка GDB/Eclipse, которые не поддерживают отображение окна терминала с данными от SWO. Здесь приведен перевод описания [1] с сайта segger.com.
SWO Viewer является частью последнего пакета программного обеспечения, который поставляется вместе с J-Link, и может быть загружен бесплатно (см. [1]) на сайте segger.com. SWOViewer не требует лицензии, и может использоваться с любой текущей моделью J-Link, начиная J-Link Lite и кончая J-Link Pro.
Прим. переводчика: для того, чтобы загрузить этот пакет и установить SWO Viewer, нужно ввести серийный номер Вашего адаптера J-Link ([1] -> Software download -> J-Link software & documentation pack for Windows -> Download -> Please enter the serial number of your emulator in the field below). Если у Вас клон J-Link, или Вы не знаете серийный номер, то проследуйте по ссылкам ниже (I would like to download the software for any other reason. How can I do so?).
Это позволит загрузить пакет программного обеспечения без необходимости ввода серийного номера J-Link. Либо можете скачать пакет Setup_JLink_V490b.zip по ссылке [2].
[Что такое SWO]
Для SWO специально выделена ножка микроконтроллера ARM семейства Cortex-M, она входит в состав интерфейса отладки. Этот вывод может быть использован для передачи различной информации в реальном времени по командам CPU. Основное назначение SWO - реализация ввода/вывода текстовой информации терминала (terminal I/O) в реальном времени, с очень малыми накладными расходами на ядро микроконтроллера, т. е. вмешательство в выполнение кода получается минимальным. Большинство прикладных программ могут производить вывод отладочной информации (лог сообщений о поведении программы) без потери своей реальной функциональности.
Пример кода, который выводит строку текста через SWO:
/*********************************************************************
* SEGGER MICROCONTROLLER GmbH & Co KG *
* Solutions for real time microcontroller applications *
**********************************************************************
* *
* (c) 2012-2013 SEGGER Microcontroller GmbH & Co KG *
* *
* www.segger.com Support: support@segger.com *
* *
**********************************************************************
----------------------------------------------------------------------
Файл : SWO.c
Назначение : Простая реализация вывода через SWO для микроконтроллеров Cortex-M.
Может использоваться с любой средой IDE. Этот пример реализации обеспечивает
разрешение работы вывода через ножку SWO, так что приложение гарантированно
не зависнет.
*/
/*********************************************************************
* Прототипы функций (для размещения в заголовочном файле наподобие SWO.h)
*/
void SWO_PrintChar (char c);
void SWO_PrintString(const char *s);
/*********************************************************************
* Определения для блока отладки (debug unit) Cortex-M
*/
#define ITM_STIM_U32 (*(volatile unsigned int*)0xE0000000) // Stimulus Port Register, 32-битный доступ
#define ITM_STIM_U8 (*(volatile char*)0xE0000000) // Stimulus Port Register, 8-битный доступ
#define ITM_ENA (*(volatile unsigned int*)0xE0000E00) // Trace Enable Ports Register
#define ITM_TCR (*(volatile unsigned int*)0xE0000E80) // Trace control register
/*********************************************************************
* SWO_PrintChar()
*
* Описание функции: проверяет, настроен ли SWO. Если нет, то производит возврат,
* чтобы избежать зависания приложения, когда отладчик не подключен. Если SWO
* настроен, то печатает символ в регистр ITM_STIM, чтобы передать его данные
* через SWO.
* Параметры
* c: печатаемый символ.
* Примечания: могут быть добавлены дополнительные проверки регистров, специфических
* для некоторых моделей микроконтроллеров.
*/
void SWO_PrintChar(char c)
{
// Проверка: ITM_TCR.ITMENA установлен?
if ((ITM_TCR & 1) == 0)
{
return;
}
// Проверка: stimulus port разрешен?
if ((ITM_ENA & 1) == 0)
{
return;
}
// Ожидание, пока STIMx не освободится,
// затем передача данных.
while ((ITM_STIM_U8 & 1) == 0);
ITM_STIM_U8 = c;
}
/*********************************************************************
* SWO_PrintString()
*
* Описание функции: вывод строки через SWO.
*/
void SWO_PrintString(const char *s)
{
// Печать символов друг за другом.
while (*s)
{
SWO_PrintChar(*s++);
}
}
[Ссылки]
1. J-Link SWO Viewer site:www.segger.com. 2. Setup_JLink_V490b.zip. 3. IAR, STM32: отладочный вывод текстовых сообщений. |