STM32 новичку в ARM что к чему
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Frogfot",url="/forum/viewtopic.php?p=3506838#p3506838"]RCC->AHBENR |= RCC_APB2ENR_IOPCEN; // Enable Clock GPIOC[/uquote]
- Реклама
[uquote="VladislavS",url="/forum/viewtopic.php?p=3506847#p3506847"][uquote="Frogfot",url="/forum/viewtopic.php?p=3506838#p3506838"]RCC->AHBENR |= RCC_APB2ENR_IOPCEN; // Enable Clock GPIOC[/uquote][/uquote]
Заработало, благодарю, переносил код с F051, в упор не видел.
Заработало, благодарю, переносил код с F051, в упор не видел.
Хорошему коту и в декабре - март 
А вот такой вопрос. Есть такая штука, ARM semihosting. Когда, например, стандартные printf заводится особым образом на, например, UART.
Или, как вариант, выводить printf-ом не на UART, а через SWD Я, например, OpenOCD пользуюсь, и, как вариант, было бы неплохо там подобный вывод иметь.
Кто-нибудь заводил подобное? Помимо отладки дебаггером, благо с STM32 тут всё хорошо, хотелось бы иметь и подобную возможность, но как-то толкового руководства по настройке не видел.
P.S. Хотя.. вроде как получилось:

Или, как вариант, выводить printf-ом не на UART, а через SWD Я, например, OpenOCD пользуюсь, и, как вариант, было бы неплохо там подобный вывод иметь.
Кто-нибудь заводил подобное? Помимо отладки дебаггером, благо с STM32 тут всё хорошо, хотелось бы иметь и подобную возможность, но как-то толкового руководства по настройке не видел.
P.S. Хотя.. вроде как получилось:
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Через встроенные средства IDE я вывод в семихостинг делал, но это под каждую среду нужно настраивать, что ломает. Поэтому делаю "печать" в последовательный порт. На примере F0:
Дальше можно макрос uprintf() использовать полностью аналогично printf(). Переписав нужным образом uputc(), можно хоть азбукой морзе в блинк форматированную печать выдавать.
Код: Выделить всё
/* Send a char via UART */
void __STATIC_INLINE uputc(uint8_t c) {
/* Polling idle frame Transmission */
while((USART1->ISR & USART_ISR_TXE) != USART_ISR_TXE) {
/* Timeout handler follows here */
}
USART1->ICR = USART_ICR_TCCF; /* Сlear TC flag */
USART1->TDR = c; /* Send char */
}
/* Send a string via UART */
void __STATIC_INLINE uputs(char *s) {
while (*s != 0) uputc(*s++); /* Send string char by char */
}
/* MACRO to emulate printf() via UART */
#define uprintf(...) for(char _b[100]; snprintf(_b, sizeof(_b), __VA_ARGS__), uputs(_b), 0;){}
Да, этот вариант более очевиден. Хотя я имел в виду чуть другое - а именно сам printf "завернуть" на UART или куда там нужно. То есть, сам stdout перенастроить
Я вот вчера этот семихостинг "пощупал" - прикольно, но всё-таки не очень удобно. Во-первых, в момент вызова print всё словно подвисает на какую-то долю секунды. То есть, такой вариант, похоже, сам по себе медленный, и ещё работу МК приостанавливает. Даже таймеры "плывут". Во вторых, прошивка с семихостингом без подключенного отладчика виснет. То есть, годится только для отладки, потом же приходится снова компилировать обычную, без всех этих printf-ов.
В общем, немножко разочаровался с семихостингом. Вариант с UART получше будет. Разве что доработать его так, чтобы это был не поллинг, а работало оно через прерывания, дабы не блокировать основной поток программы на время вывода в UART.
Я вот вчера этот семихостинг "пощупал" - прикольно, но всё-таки не очень удобно. Во-первых, в момент вызова print всё словно подвисает на какую-то долю секунды. То есть, такой вариант, похоже, сам по себе медленный, и ещё работу МК приостанавливает. Даже таймеры "плывут". Во вторых, прошивка с семихостингом без подключенного отладчика виснет. То есть, годится только для отладки, потом же приходится снова компилировать обычную, без всех этих printf-ов.
В общем, немножко разочаровался с семихостингом. Вариант с UART получше будет. Разве что доработать его так, чтобы это был не поллинг, а работало оно через прерывания, дабы не блокировать основной поток программы на время вывода в UART.
- Реклама
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
dosikus, А можно чуть по подробнее что это такое ? На хабре читал не давно "функции отладочного вывода асинхронные и практически не занимают процессорного времени и не оказывают никакого влияния на ход выполнения программы при отсутствии подключения отладочного адаптера." Это как там сделано ?
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="pokk",url="/forum/viewtopic.php?p=3507122#p3507122"]Это как там сделано ?[/uquote]Если на пальцах, то в ОЗУ выделяется область памяти в которую приложение кладёт информацию, которую хочет вывести во внешний мир. То есть, для приложения скорость вывода отладочной информации равна скоростью копирования память-память. Далее вступает в действие "магия отладчика". В канале управления SWD выделено 25% пропускной способности, чтобы J-Link забирал из этого буфера информацию в фоне. После того как J-Link заберёт данные из буфера, он отдаёт их клиенту, подключившемуся к нему по Telnet. Если же отладчик не подключен, то данные из буфера просто никто не забирает и они вытесняются новыми данными. Приложению до этого никакого дела нет.
Из плюсов:
- не задействованы никакие аппаратные ресурсы. Не надо резервировать UART для отладки, например.
- скорость вывода сообщений приложением очень высока. Это просто копирование память-память. Можно мониторить очень быстрые события практически не влияя на скорость их обработки.
- не надо никаких лишний подключений типа SWO или UART. Всё по тем же SWDIO и SWC идёт.
- можно не пересобирать приложение, если отладка больше не нужна. Просто не подключать отладчик и всё. Приложение ничего об этом не узнает.
Из минусов:
- работает только на J-Link.
- общая скорость считывания сообщений из буфера не очень высока. Для J-Link-OB это около 500 кбит. В то время как в UART можно мегабиты пропихнуть.
- ну и собственно нужно некоторое количество памяти для буфера. 1-2 кбайт.
Из плюсов:
- не задействованы никакие аппаратные ресурсы. Не надо резервировать UART для отладки, например.
- скорость вывода сообщений приложением очень высока. Это просто копирование память-память. Можно мониторить очень быстрые события практически не влияя на скорость их обработки.
- не надо никаких лишний подключений типа SWO или UART. Всё по тем же SWDIO и SWC идёт.
- можно не пересобирать приложение, если отладка больше не нужна. Просто не подключать отладчик и всё. Приложение ничего об этом не узнает.
Из минусов:
- работает только на J-Link.
- общая скорость считывания сообщений из буфера не очень высока. Для J-Link-OB это около 500 кбит. В то время как в UART можно мегабиты пропихнуть.
- ну и собственно нужно некоторое количество памяти для буфера. 1-2 кбайт.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="VladislavS",url="/forum/viewtopic.php?p=3507147#p3507147"]Если же отладчик не подключен, то данные из буфера просто никто не забирает и они вытесняются новыми данными.[/uquote]
Зависит от флагов, если при полном буфере выбрано ожидание его освобождения, то данные не будут теряться, но без отладчика при переполнении все зависнет.
Зависит от флагов, если при полном буфере выбрано ожидание его освобождения, то данные не будут теряться, но без отладчика при переполнении все зависнет.
Работает и с ST-Link, нужен OpenOCD с патчем.- работает только на J-Link.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
VladislavS, телнет клинет это только часть , в SES так же встроена поддержка.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Reflector",url="/forum/viewtopic.php?p=3507156#p3507156"]Работает и с ST-Link, нужен OpenOCD с патчем.[/uquote]Читал как-то про эти потуги. Назвать это словом "работает" язык не поворачивается.
[uquote="dosikus",url="/forum/viewtopic.php?p=3507158#p3507158"]VladislavS, телнет клинет это только часть , в SES так же встроена поддержка.[/uquote]Очень большая вероятность, что внутри SES тот же телнет. Впрочем, какая разница, есть поддержка - хорошо. Нет - подключаемся любым телнет-клиентом хоть локально, хоть удалённо.
[uquote="dosikus",url="/forum/viewtopic.php?p=3507158#p3507158"]VladislavS, телнет клинет это только часть , в SES так же встроена поддержка.[/uquote]Очень большая вероятность, что внутри SES тот же телнет. Впрочем, какая разница, есть поддержка - хорошо. Нет - подключаемся любым телнет-клиентом хоть локально, хоть удалённо.
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Если нужно, можно и с ST-Link. EmBitz есть что-то подобное под названием EB Monitor.VladislavS писал(а):- работает только на J-Link.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Мурик",url="/forum/viewtopic.php?p=3507186#p3507186"]Если нужно, можно и с ST-Link.[/uquote]Поднимите руку те кто пользуется этим на st-link. А теперь тек кто на j-link. Видишь разницу? 
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Это нечто подобное хуже семихостинга , сравнивать фекалий ебомонитор с RTT - насмешил ты Мурик...
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
dosikus, не пробовали, а осуждаете?
У EB Monitor принцип работы такой же как выше написал VladislavS и если по вашему EB Monitor "хуже семихостинга", то RTT такой же.
У EB Monitor принцип работы такой же как выше написал VladislavS и если по вашему EB Monitor "хуже семихостинга", то RTT такой же.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
- Сообщения: 191
- Зарегистрирован: Вт июн 05, 2018 00:18:01
[uquote="VladislavS",url="/forum/viewtopic.php?p=3507172#p3507172"][uquote="Reflector",url="/forum/viewtopic.php?p=3507156#p3507156"]Работает и с ST-Link, нужен OpenOCD с патчем.[/uquote]Читал как-то про эти потуги. Назвать это словом "работает" язык не поворачивается.[/uquote]
А что именно не так? Как патч примут - так сразу все и начнут пользоваться. В platformio дебагер через stlink кстати весьма шустрый, уж не знаю что они там внутри намутили.
А что именно не так? Как патч примут - так сразу все и начнут пользоваться. В platformio дебагер через stlink кстати весьма шустрый, уж не знаю что они там внутри намутили.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="pvit",url="/forum/viewtopic.php?p=3507541#p3507541"]Как патч примут - так сразу все и начнут пользоваться.[/uquote]Ну вот как начнут, тогда и будем посмотреть. И может перестанем выдавать желаемое за действительное.
- Сообщения: 191
- Зарегистрирован: Вт июн 05, 2018 00:18:01
Вы не могли бы ответить на конкретный технический вопрос? Что именно не так?


