|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:59 am
|
Страница 1 от 1
|
[ 9 мнения ] |
|
Cortex трейс, дебъг, SWD, SWO и други объркващи термини.
| Автор |
Съобщение |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Cortex трейс, дебъг, SWD, SWO и други объркващи термини.
Значи аз досега си карах на конвенционален JTAG дебъг. Ама реших да видя фрии решенията за трейс докъде са стигнали.
И се оплетох.
1. Каква е разликата между ЕТМ и SWO трейса?
2. SWO и SWV едно и също нещо ли обслужват?
3. Какво трябва да монтирам на еклипса та да ползвам трейс?
4. Какво аджеба мога да измъкна по тоя трейс?
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Мар 10, 2011 10:40 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Cortex трейс, дебъг, SWD, SWO и други объркващи термини.
ETM май значеше embedded trace macrocell и е общо понятие. Както UART е общо понятие. При АРМ обикновено като се каже че има изведен ЕТМ аз разбирам че има изведен специален трейс порт с много жици. АРМ имат ЕТМ1, ЕТМ2, ЕТМ3... много варианти, много различни конектори... SWO се казва пина. При CortexM3 се ползва SWD (serial wire debug) за дебъгване и за това се ползват 3 от 4-те жици на JTAG-a. Та след като превключиш от JTAG ->SWD едната жица повече не е нужна за дебъг и може да се ползва от SWV (което си е ЕТМ-а на куртекса). А по SWV може да се изкарва юзерски трейс (32-канала) или информация за работата на ядрото - има си филтри, с които задаваш какво да излиза... Естествено по една жица трудно ще изкараш всичко. Но ако проца има ЕТМ порт с повечко пинове, може да се изкара достатъчно информация, така че да можеш да възстановиш 100% от това какво е правил процесора. Тогава може да "дебъгваш" лога. Както greenhills му викат "time machine" - демек най-големият келепир е, че може да дебъгваш назад във времето. Примерно някой ти омазва паметта и след това ти гърмиш. Може да сложиш там където ще гръмне, но тогава не ти помага щото като спре вече е омазано, т.е. твърде късно е... Но ако имаш тайм машина - слагаш брекпоинт и пускаш. Като спре почваш да дебъгваш в обратна посока да видиш как се е стигнало дотук... При куртекс М3 само с един пин SWO трудно ще логнеш цялата работа на ядрото (не е невъзможно, но ще го забавиш яко). Но благодарение на филтрите може да логваш частично, примерно логваш само кога прави преход jump/call/return... И долу-горе хващаш откъде минава и вече съответния софтуер може да ти направи статистика (profiling) къде циклиш най-много време, коя функция колко често се вика, колко време отнема средно и т.н. Тая статистика може да я направиш, без това по никакъв начин да се отрази на работата на ядрото. Нито го бавиш нито нищо. Да Зависи - ако искаш да гледаш юзерския трейс т.е. от типа TRACE("hello world"); - изобщо не ти е нужен Еклипс. Може и външна конзола. Не че няма плъгин за терминална конзола в Еклипс де... Ако искаш да гледаш статистики. Те тогава ти трябва нещо от сорта на CodeRed.... А ако искаш time machine не само плъгините ами и дебъгера трябва да е пипнат. По принцип в GDB 7 добавиха някаква поддръжка за "step backward"... но тя е за линукс приложения, компилирани със специални монитори и т.н. За ембедед доколкото знам все още не е много стандартизирано кое как...
ами казах 3-те неща - юзерски логове, тайм машинка и статистика. На тоя етап аз ползвам само първото, но и то не е малко.... особено при по-голям проект, повече хора... Дебъгването става кошмар, примерно ако има течове на памет няма как да дебъгваш. Пускаш да работи и да логва всяко заделяне/освобождаване и после един макро да оцветява в червено неосвободените. И вече като знаеш коя функция неосвобождава може да я дебъгнеш....
|
| Чет Мар 10, 2011 1:26 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Мда, поизясни ми се .... малко
Хубаво, а това за което ти ползвш SWO-то с какво е по различно от един тривиален UART канал на който да блъскам трасиращи съобщения? Изключае хардерните предимства (че не заемам UART-а).
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Мар 10, 2011 2:02 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Принципно с нищо... конзолата си е конзола, независимо откъде минава хардуерно....
Но все пак SWO-то е супер удобно щото хардуерно го имам на всичките си платки, има го и на твоите платки... А пък излишен УАРТ нямам на нито една платка, не знам за теб
Скоростта никак не е за подценяване. В момента лимита ми идва от етернет-а на емулатора, който е слабичък...
А и също софтуерно - върви на всички куртекси...
И надеждността е супер, нямам баудрейт... бачка независимо от това с какъв клок е таргета
|
| Чет Мар 10, 2011 2:54 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Аха. А как се реализира самото пренасочване на TRACE стринговете към SWO пина?
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Мар 10, 2011 7:21 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Просто пишеш в един регистър...
ех, на практика е малко по-сложно за да не се изпускат байтове и за да е threadsafe. Ей ти го кода всъщност:
 |  |  |  | Код: //void usr_trace_str(const char *buf); FUNC( usr_trace_str )
movs r1, #ITM_BASE ldrb r2, [r0] adds r0, #1 cbz r2, 2f 1: ldrexb r3, [r1] cmp r3, #0 //Is trace fifo full? ITT NE strexbne r3, r2, [r1] //exclusive write if not full cmpne r3, #1 //check the exclusive result beq 1b //loop while full or not exclusive ldrb r2, [r0] adds r0, #1 cmp r2, #0 bne 1b
2: bx lr
ENDF( usr_trace_str )
|  |  |  |  |
edit: фана ме срам че кодът е неоптимален... ей така е малко по-добре:
|
| Чет Мар 10, 2011 8:19 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Мда сега остава да измисля как да го подкарам през Jlink-а 
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Мар 11, 2011 9:40 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
с jlink не знам дали ще стане... може би jtrace ако държиш на марката 
|
| Пет Мар 11, 2011 9:59 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Е не, Jtrace няма кой да го хаква
Jtrace е по тежка артилерия, май работи с широкия кабел директно към TRACE порта (ЕТМ).
Jlink по принцип подържа SWD и SWV. Само че по новите му версии. А аз не знам мойте клонинги дето се търкалят по бюрото коя версия си. Според колегата fan последното творение на китайците би трябвало да ги подържа, ама не съм го пробвал досега.
Аз досега не бях приритал за нещо такова, щото на ST -тата по принцип има минимум 3 UART-a (големите са с по 5) и все някой артисва. И аз на всичките си устройства извеждам класическия JTAG + UART TX/RX + захранване, общо е куплунг с 10 пина. И после го ползвам и за наливане през бутлоадера и за трейсване и за дебъг. И едва ли ще се откажа от тая концепция, щото наливането през бутлоадера така или иначе ми трябва за пройзводство, така че UART - все трябва да е наличен.
Трейса по ще ми е интересен ако има стабилни фрии имплементации на по сложните неща които описа по горе. Ама както разбирам за сега няма. Но въпреки това ще пробвам да го подкарам, та да знам въобще може ли през Jlink да мине.
Имам да дорутя една платка и другата седмица ще го побъзикам малко да видим, ще стане ли.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Мар 11, 2011 10:04 am |
|
|
|
Страница 1 от 1
|
[ 9 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 8 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|