Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен данными через SWO
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
AndyDev
Можно ли использовать данные приходящие от микроконтроллера через интерфейс SWO (например, используя ST-Link), в своей собственной программе на PC, а не в стандартных консолях и отладчиках?
Если у кого есть исходники с подобными примерами, поделитесь, плиз.
AlexandrY
Цитата(AndyDev @ Jun 19 2015, 01:41) *
Можно ли использовать данные приходящие от микроконтроллера через интерфейс SWO (например, используя ST-Link), в своей собственной программе на PC, а не в стандартных консолях и отладчиках?
Если у кого есть исходники с подобными примерами, поделитесь, плиз.


Можно, для этого не нужен даже SWO.
demiurg_spb
Можете посмотреть исходники openocd - там реализована SWO-консоль для ST-LINK.
AndyDev
Цитата(AlexandrY @ Jun 19 2015, 07:33) *

Очень интересно, спасибо.
Хотя для RTT нужен именно J-LINK, а у меня ST-Link (встроенный в отладочную плату),
а так же не совсем из описания понятно, как использовать отладочные данные в своей собственной программе на PC, а не в прилагаемой утилите от Segger.

Можно было бы так же воспользоваться передачей через semihosting (мне скорость передачи вообще не важна), но, опять же нет информации - как это использовать в своей собственной программе на PC, а не в отладчике.
AlexandrY
Цитата(AndyDev @ Jun 20 2015, 11:24) *
Очень интересно, спасибо.
Хотя для RTT нужен именно J-LINK, а у меня ST-Link (встроенный в отладочную плату),
а так же не совсем из описания понятно, как использовать отладочные данные в своей собственной программе на PC, а не в прилагаемой утилите от Segger.

Можно было бы так же воспользоваться передачей через semihosting (мне скорость передачи вообще не важна), но, опять же нет информации - как это использовать в своей собственной программе на PC, а не в отладчике.


Чтобы работать через RTT нужно:
1. Подключить JLink отладчик к плате.
2. Запустить JLinkRTTViewer.exe
И все!

На вашем компьютере появляется Telnet server с адресом: localhost:19021

Подключайтесь к нему из любой программы.
В RAD Studio например есть набор компонентов AsyncPro который умеет кроме COM портов подключаться и к TCP портам, там же есть и эмулятор терминала и под Telnet и проч.
AndyDev
Цитата(AlexandrY @ Jun 21 2015, 13:37) *
Чтобы работать через RTT нужно:
1. Подключить JLink отладчик к плате.
2. Запустить JLinkRTTViewer.exe
И все!


Замечательный способ, это все здорово.
Но одно главное НО (о чем я писал выше дважды) - у меня нет отладчика JLink у меня STLink, встроенный в отладочную плату.
arhiv6
Есть набор программок для работы с stlink под Linux. Среди них есть st-term (ST-Linky proof-of-concept terminal). Автор st-term вроде водится тут, можете с ним списаться.
AndyDev
Цитата(arhiv6 @ Jun 22 2015, 08:08) *
Есть набор программок для работы с stlink под Linux. Среди них есть st-term (ST-Linky proof-of-concept terminal). Автор st-term вроде водится тут, можете с ним списаться.


Замечательно, похоже - это именно то, что мне нужно.

Надеюсь, разберусь с исходниками STLink и смогу задействовать в своей программе.
AndyDev
Цитата(arhiv6 @ Jun 22 2015, 08:08) *
Есть набор программок для работы с stlink под Linux. Среди них есть st-term (ST-Linky proof-of-concept terminal). Автор st-term вроде водится тут, можете с ним списаться.


Еще раз спасибо за наводку - все получилось!

Разобрал исходник ST-Link под Linux, и сделал на основе него набор процедур для доступа к памяти микроконтроллера в реальном времени. Скорость доступа к памяти оказалась примерно 1200 байт/сек (300 32-битных слов).
brag
Я использовавл jlinkarm.dll и сделал свою софтину для работы с SWO, работаю только с JLink.
Раскуривал сам давно, вот функции.
CODE
U32 JLINKARM_SWO_Control(U32 arg0,U32 *arg4);
U32 JLINKARM_SWO_Read(U8 *dst,U32 offset,U32 *arg8); // arg8 - number of bytes to read
U32 JLINKARM_HasError(void);
U32 JLINKARM_TIF_Select(U32 iface);
void JLINKARM_Close(void);
U32 JLINKARM_SetSpeed(U32 khz);
void JLINKARM_Halt(void);
U32 JLINKARM_IsHalted(void);
U32 JLINKARM_IsConnected(void);
void JLINKARM_Go(void);
void JLINKARM_Reset(void);
void JLINKARM_ClrError(void);

Jlink::Jlink(){
JLINKARM_TIF_Select(1); // select SWD
JLINKARM_SetSpeed(500);
}
Jlink::~Jlink(){
JLINKARM_SWO_Control(1,0);
JLINKARM_Close();
}

int Jlink::SwoRead(){
n=sizeof(rxbuf);
JLINKARM_SWO_Read(rxbuf,0,&n);
if(!n)return 0;
JLINKARM_SWO_Control(2,&n);
if(JLINKARM_HasError()){
JLINKARM_ClrError();
return -1;
}
//n- number of bytes read
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.