STM32 рд╕реЗ Qt рдХреНрд░рд┐рдПрдЯрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдкреНрд░рд┐рдВрдЯрдл ()

kdpv.svg


рдЕрдХреНрд╕рд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреАрд╕реА рд╕реНрдХреНрд░реАрди рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢реЛрдВ, рд▓реЙрдЧреНрд╕, рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рддреЗрдЬ рд╣реЛ, рдФрд░ рдпрд╣ рдХрд┐ рд▓рд╛рдЗрдиреЗрдВ рдХрд╣реАрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдЖрдИрдбреАрдИ рдореЗрдВ - рдХреЛрдб рд╕реЗ рдкреНрд░рд╕реНрдерд╛рди рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рджрд░рдЕрд╕рд▓, рдпрд╣ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ - рдХреИрд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд┐рдВрдЯрдл () рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдирд╣реАрдВ, рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдкрд░реНрдпрд╛рд╡рд░рдгред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реАрдХреЗ рд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рддрдХрдиреАрдХреЗрдВ рдЗрддрдиреА рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ:



рд╕реЗрдореАрд╣реЙрд╕реНрдЯрд┐рдВрдЧ рдзреАрдореА рд╣реИ, рдЖрд░рдЯреАрдЯреА рд╕реЗрдЧрд░ * рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдмрдВрдзрд╛ рд╣реИ, рдпреВрдПрд╕рдмреА рд╣рд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░, рдореИрдВ рдкрд┐рдЫрд▓реЗ рджреЛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ - UART рдФрд░ ITM рдХрд╛ рдЙрдкрдпреЛрдЧред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред


* рдЕрджреНрдпрддрдиред - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рджреЛрдиреЛрдВ рддрд░рдл рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рдЖрд░рдЯреАрдЯреА рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдЧрд╛ред


рдФрд░ рдЕрдЧрд▓реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рддреБрд░рдВрдд рджреЗрдВред OS рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм Fedora 28 рд╣реИ, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдмрдВрдбрд▓ рд╣реИ:



рдЬреАрд╕реАрд╕реА рдореЗрдВ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдкреНрд░рд┐рдВрдЯрдл ()


рдЗрд╕рд▓рд┐рдП, рдЬреАрд╕реАрд╕реА рдореЗрдВ рдкреНрд░рд┐рдВрдЯрдл () рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд┐рдВрдХрд░ рдХреАрдЬ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛


-specs=nosys.specs -specs=nano.specs 

рдпрджрд┐ рдЖрдкрдХреЛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреБрдВрдЬреА рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛


 -u_printf_float 

рдФрд░ _write () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣


 int _write(int fd, char* ptr, int len) { (void)fd; int i = 0; while (ptr[i] && (i < len)) { retarget_put_char((int)ptr[i]); if (ptr[i] == '\n') { retarget_put_char((int)'\r'); } i++; } return len; } 

рдЬрд╣рд╛рдБ retarget_put_char () рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╡рд░реНрдг рдХреЛ рд╕реАрдзреЗ рдЗрдЪреНрдЫрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред


рдкреНрд░рд┐рдВрдЯрдл () -> рдЖрдИрдЯреАрдПрдо -> рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛


рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдЯреНрд░реЗрд╕ рдореИрдХреНрд░реЛрдХреЗрд▓ (рдЖрдИрдЯреАрдПрдо) рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо 3 / рдПрдо 4 / рдПрдо 7 рдХреЛрд░ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрд░-рдЗрдирд╡реЗрд╕рд┐рд╡ рдЖрдЙрдЯрдкреБрдЯрд┐рдВрдЧ (рдЯреНрд░реЗрд╕рд┐рдВрдЧ) рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ITM рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд┐рдВрдЯрдлрд╝ () рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  • TRACECLKIN рдШрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рдЖрдорддреМрд░ рдкрд░ рдХреЛрд░ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИ
  • рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд рдЙрддреНрддреЗрдЬрдирд╛ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ 32 рдЯреБрдХрдбрд╝реЗ рд╣реИрдВ
  • CMSIS ITM_SendChar () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рддреАрдХ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдкреЛрд░реНрдЯ 0 рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
  • рдбреЗрдЯрд╛ рдпрд╛ рддреЛ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмрд╕ (TRACEDATA, TRACECLK) рдпрд╛ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рд┐рдВрдЧрд▓-рд╡рд╛рдпрд░ SWO рд▓рд╛рдЗрди (TRACESWO) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИ
  • SWO рд▓рд╛рдЗрди рдХреЛ рдЖрдорддреМрд░ рдкрд░ JTDO рдХреЗ рд╕рд╛рде рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ SWD рджреНрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ
  • SWO рджреНрд╡рд╛рд░рд╛ рдирд┐рдХрд╛рд╕реА рдХреЛ рдореИрдирдЪреЗрд╕реНрдЯрд░ рдХреЛрдб рдпрд╛ NRZ (UART 8N1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдбреЗрдЯрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рдлреНрд░реЗрдо рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд рдкрдХреНрд╖ рдкрд░ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  • рдЖрдИрдЯреАрдПрдо рдЖрдорддреМрд░ рдкрд░ рдЖрдИрдбреАрдИ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рднреА рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдлрд┐рд░ SWO рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдЙрдард╛рдпрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рддреНрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛)

ITM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ NRZ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ SWO рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдХрдо рдЧрддрд┐ рдкрд░ рднреА рдПрдХ рдирд┐рдпрдорд┐рдд рдпреВрдПрд╕рдмреА-рдпреВрдПрдЯреА рдПрдбрд╛рдкреНрдЯрд░ рд╣реИред


рдореИрдВрдиреЗ рдбрд┐рдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрде рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛, рдФрд░ SWO рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЪреАрдиреА STLink-V2 рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рддрдм рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╣рдо JTDO / TRACESWO рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдбреАрдмрдЧрд░ рдкрд┐рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


Openocd рдореЗрдВ рдХрдорд╛рдВрдб "tpiu config" рд╣реИ - рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЯреНрд░реЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ ( OpenOCD рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП


 tpiu config internal /home/esynr3z/itm.fifo uart off 168000000 

рдлрд╝рд╛рдЗрд▓ /home/esynr3z/itm.fifo рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, NRZ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ 168 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА TRACECLKIN рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдзрд┐рдХрддрдо рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЧрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ - STLink рдХреЗ рд▓рд┐рдП рдпрд╣ 2 рд╣рд░реНрдЯреНрдЬ рд╣реИред рдФрд░ рджреВрд╕рд░реА рдЯреАрдо


 itm port 0 1 

рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдкреЛрд░реНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред


OpenOCD рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ itmdump рдЙрдкрдпреЛрдЧрд┐рддрд╛ (contrib / itmdump.c) рд╢рд╛рдорд┐рд▓ рд╣реИ - рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рд╕реЗ рддрд╛рд░ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ


 gcc itmdump.c -o itmdump 

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдмрд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓ / рдкрд╛рдЗрдк / ttyUSB * рдФрд░ -d1 рд╕реНрд╡рд┐рдЪ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ


 ./itmdump -f /home/esynr3z/itm.fifo -d1 

рдФрд░ рдЖрдЦрд┐рд░реА рд╡рд╛рд▓рд╛ред SWO рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЪрд░рд┐рддреНрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд _write () рдХреЛ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВ


 int retarget_put_char(int ch) { ITM_SendChar((uint32_t)ch); return 0; } 

рддреЛ, рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдпрд╣ рд╣реИ: рдХреНрдпреВрдЯреА рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдУрдкрдирдУрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ SWO рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдкрд╛рдЗрдк рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдкрд╛рдЗрдк, рдкрд╛рд░реНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ itmdump рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдмрд╛рд╣рд░реА рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ - рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд▓рдЧ-рдЗрди рд▓рд┐рдЦрдирд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛ред


рдирдВрдЧреЗ рдзрд╛рддреБ рдкреНрд▓рдЧрдЗрди (рдЙрдкрдХрд░рдг-> рд╡рд┐рдХрд▓реНрдк-> рдЙрдкрдХрд░рдг-> рдирдВрдЧреЗ рдзрд╛рддреБ) рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВред


config_baremetal.png


рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП GDB рд╕рд░реНрд╡рд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд╛рдЗрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВ


 monitor tpiu config internal /home/esynr3z/itm.fifo uart off 168000000 monitor itm port 0 1 

рдЕрдм, рдбрд┐рдмрдЧрд░ рдХреЗ рдареАрдХ рдкрд╣рд▓реЗ рдХрд░реНрд╕рд░ рдХреЛ рдореБрдЦреНрдп () рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, ITM рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


Itmdump рдХреЛ рдмрд╛рд╣рд░реА рдЯреВрд▓ (Tools-> External-> Configure ...) рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред


external_itmdump.png


рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛


 QT_LOGGING_TO_CONSOLE=1 

Qt рдирд┐рд░реНрдорд╛рддрд╛ рдХрдВрд╕реЛрд▓ (рдкреИрдирд▓ 7 рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджреЗрд╢) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


рдЕрдм itmdump рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдбрд┐рдмрдЧ рдореЛрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ ... рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ itmdump рдирд┐рд╖реНрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░рд┐рдВрдЯрдлрд╝ () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореБрджреНрд░рд┐рдд рд╕рднреА рд▓рд╛рдЗрдиреЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рдЯреИрдм рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред


рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╢реЛрдз рдХреЗ рдмрд╛рдж рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ itmdump рдХреА рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдмрдлрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ stderr рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдлрд┐рд░ рд╡реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрдВрд╕реЛрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ ititdump рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг GitHub рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ ред


рдПрдХ рдФрд░ рдХреИрд╡рд┐рдПрдЯ рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ "рдореЙрдирд┐рдЯрд░ tpiu config ..." рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд▓рдЯрдХреЗрдЧреА, рдпрджрд┐ itmdump рдкрд╣рд▓реЗ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдУрдкрдирдХрд╛рдб рдХреЗ рдЕрдВрджрд░ рдкрд╛рдЗрдк (/home/esynr3z/itm.fifo) рдЦреЛрд▓рдирд╛ рдЕрд╡рд░реБрджреНрдз рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдЫреЛрд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдХреЗ рдЦреБрд▓рдиреЗ рддрдХ рдбреАрдмрдЧрд░ рд▓рдЯрдХрд╛ рд░рд╣реЗрдЧрд╛ред


рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдкреНрд░рд┐рдп рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдИрдЯреАрдПрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрдЯрдордбрдВрдк рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рддреЛ рд▓рдЧрд╛рддрд╛рд░ рдЬреАрдбреАрдмреА рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ / рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдЦреЛрджрдирд╛ рдерд╛ рдФрд░ рдЙрд╕ рдЬрдЧрд╣ рдХреЛ рдвреВрдВрдврдирд╛ рдерд╛ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯреА рдмреИрд╕рд╛рдЦреА рдХрд╛ рд╕реНрдерд╛рди рд▓реЗрдирд╛ рд╣реИред


Src / target / armv7m_trace.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЙрджреНрдШрд╛рдЯрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрди рд╣реИ


 armv7m->trace_config.trace_file = fopen(CMD_ARGV[cmd_idx], "ab"); 

рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ


 int fd = open(CMD_ARGV[cmd_idx], O_CREAT | O_RDWR, 0664); armv7m->trace_config.trace_file = fdopen(fd, "ab"); 

рдЕрдм рд╣рдорд╛рд░рд╛ рдкрд╛рдЗрдк рддреБрд░рдВрдд рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЪрдордХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЖрдк рдмреЗрдпрд░ рдореЗрдЯрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдХреЗрд▓реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдЯрдордбрдВрдк рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╣реА рдЪрд▓рддреЗ рд╣реИрдВред


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ


debug.png


рдкреНрд░рд┐рдВрдЯрдл () -> UART -> рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ:


  • рдХреЛрдб рдореЗрдВ UART рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ
  • рд╣рдо retarget_put_char () рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЪрд░рд┐рддреНрд░ рдЯреНрд░рд╛рдВрд╕реАрд╡рд░ рдмрдлрд╝рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛
  • рд╣рдо рдпреВрдПрд╕рдмреА-рдпреВрдПрдЖрд░рдЯреА рдПрдбрд╛рдкреНрдЯрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ
  • рдмрд╛рд╣рд░реА рдЯреВрд▓ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡рд░реНрдЪреБрдЕрд▓ COM рдкреЛрд░реНрдЯ рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

рдореИрдВрдиреЗ рд╕реА - рдпреВрд░реНрдЯрдбрдВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ ред рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯ рдирд╛рдо рдФрд░ рдмреЙрдбреНрд░реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


external_uartdump.png


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдФрд░ рдХреНрдпреВрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, COM рдкреЛрд░реНрдЯ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдмрд╛рд╣рд░реА рдЯреВрд▓ рдЬреЛрдбрд╝рд╛ред


external_uartdump_close.png


рдареАрдХ рд╣реИ, рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП CMake рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрд▓рдЧреНрди рдХрд░реВрдБрдЧрд╛ рдЬреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - GitHub ред

Source: https://habr.com/ru/post/hi440024/


All Articles