STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Frogfot",url="/forum/viewtopic.php?p=3506838#p3506838"]RCC->AHBENR |= RCC_APB2ENR_IOPCEN; // Enable Clock GPIOC[/uquote]
Реклама
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[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, в упор не видел.
Хорошему коту и в декабре - март :)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

А вот такой вопрос. Есть такая штука, ARM semihosting. Когда, например, стандартные printf заводится особым образом на, например, UART.

Или, как вариант, выводить printf-ом не на UART, а через SWD Я, например, OpenOCD пользуюсь, и, как вариант, было бы неплохо там подобный вывод иметь.

Кто-нибудь заводил подобное? Помимо отладки дебаггером, благо с STM32 тут всё хорошо, хотелось бы иметь и подобную возможность, но как-то толкового руководства по настройке не видел.

P.S. Хотя.. вроде как получилось:

Изображение
Контактная информация:
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Через встроенные средства IDE я вывод в семихостинг делал, но это под каждую среду нужно настраивать, что ломает. Поэтому делаю "печать" в последовательный порт. На примере F0:

Код: Выделить всё

  /* 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;){}
Дальше можно макрос uprintf() использовать полностью аналогично printf(). Переписав нужным образом uputc(), можно хоть азбукой морзе в блинк форматированную печать выдавать.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Да, этот вариант более очевиден. Хотя я имел в виду чуть другое - а именно сам printf "завернуть" на UART или куда там нужно. То есть, сам stdout перенастроить

Я вот вчера этот семихостинг "пощупал" - прикольно, но всё-таки не очень удобно. Во-первых, в момент вызова print всё словно подвисает на какую-то долю секунды. То есть, такой вариант, похоже, сам по себе медленный, и ещё работу МК приостанавливает. Даже таймеры "плывут". Во вторых, прошивка с семихостингом без подключенного отладчика виснет. То есть, годится только для отладки, потом же приходится снова компилировать обычную, без всех этих printf-ов.

В общем, немножко разочаровался с семихостингом. Вариант с UART получше будет. Разве что доработать его так, чтобы это был не поллинг, а работало оно через прерывания, дабы не блокировать основной поток программы на время вывода в UART.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

WiseLord, лучший вариант RTT. И семихостинг и SWO отдыхают.
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

dosikus, А можно чуть по подробнее что это такое ? На хабре читал не давно "функции отладочного вывода асинхронные и практически не занимают процессорного времени и не оказывают никакого влияния на ход выполнения программы при отсутствии подключения отладочного адаптера." Это как там сделано ?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[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 кбайт.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3507147#p3507147"]Если же отладчик не подключен, то данные из буфера просто никто не забирает и они вытесняются новыми данными.[/uquote]
Зависит от флагов, если при полном буфере выбрано ожидание его освобождения, то данные не будут теряться, но без отладчика при переполнении все зависнет.
- работает только на J-Link.
Работает и с ST-Link, нужен OpenOCD с патчем.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

VladislavS, телнет клинет это только часть , в SES так же встроена поддержка.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[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 тот же телнет. Впрочем, какая разница, есть поддержка - хорошо. Нет - подключаемся любым телнет-клиентом хоть локально, хоть удалённо.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

VladislavS писал(а):- работает только на J-Link.
Если нужно, можно и с ST-Link. EmBitz есть что-то подобное под названием EB Monitor.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Мурик",url="/forum/viewtopic.php?p=3507186#p3507186"]Если нужно, можно и с ST-Link.[/uquote]Поднимите руку те кто пользуется этим на st-link. А теперь тек кто на j-link. Видишь разницу? :)
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Я написал что подобный метод с буфером в ОЗУ возможен с ST-Link, а пользоваться или нет, решать вам.
Последний раз редактировалось Мурик Вс ноя 18, 2018 14:49:30, всего редактировалось 2 раза.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Это нечто подобное хуже семихостинга , сравнивать фекалий ебомонитор с RTT - насмешил ты Мурик...
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

dosikus, не пробовали, а осуждаете?
У EB Monitor принцип работы такой же как выше написал VladislavS и если по вашему EB Monitor "хуже семихостинга", то RTT такой же.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Увы пробовал, я всегда пишу о том что знаю в отличии от тебя.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

[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 кстати весьма шустрый, уж не знаю что они там внутри намутили.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="pvit",url="/forum/viewtopic.php?p=3507541#p3507541"]Как патч примут - так сразу все и начнут пользоваться.[/uquote]Ну вот как начнут, тогда и будем посмотреть. И может перестанем выдавать желаемое за действительное.
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

Сообщение pvit »

Вы не могли бы ответить на конкретный технический вопрос? Что именно не так?
Ответить

Вернуться в «ARM»