UART рдкрд╛рд░реНрдЯ 2 рджреНрд╡рд╛рд░рд╛ ARM рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдбрд┐рдмрдЧрдорди рдХреЗ рд╡реНрдпрд╡рдзрд╛рди рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо UART рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗред

рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛


рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ GDB рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ:

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

рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

  • 0xAA 0xFF - рдлрд╝реНрд░реЗрдо рдХреА рд╢реБрд░реБрдЖрдд
  • 0xAA 0x00 - рдлрд╝реНрд░реЗрдо рдХрд╛ рдЕрдВрдд
  • 0xAA 0xA5 - рдЗрдВрдЯрд░рдкреНрдЯ
  • 0xAA 0xAA - 0xAA рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд

рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдЗрди рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 4 рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдЯреЛрдореЗрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

  • рдИрдПрд╕рд╕реА рдЪрд░рд┐рддреНрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
  • рдлреНрд░реЗрдо рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рджреВрд╕рд░реЗ рдХрд┐рд░рджрд╛рд░ рдХрд╛ рдЗрдВрддрдЬрд╛рд░
  • рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд
  • рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдПрдХ Esc рдЪрд░рд┐рддреНрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 7 рдХреА рдЬрд░реВрд░рдд рд╣реИ:

  • рдлрд╝реНрд░реЗрдо рдХреА рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
  • рдлрд╝реНрд░реЗрдо рдХрд╛ рджреВрд╕рд░рд╛ рдмрд╛рдЗрдЯ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
  • рдбреЗрдЯрд╛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ
  • рдлреНрд░реЗрдо рдХреЗ рдЕрдВрдд рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
  • Esc рдЪрд░рд┐рддреНрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рднреЗрдЬ рд░рд╣рд╛ рд╣реИ
  • рдкрд╣рд▓рд╛ рдЗрдВрдЯрд░рдкреНрдЯ рдмрд╛рдЗрдЯ рднреЗрдЬрдирд╛
  • рджреВрд╕рд░рд╛ рдЗрдВрдЯрд░рдкреНрдЯ рдмрд╛рдЗрдЯ рднреЗрдЬрдирд╛

рдЖрдЗрдП рд╣рдо рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдЪрд░ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗ:

typedef struct 
{    
  // disable receive data
  unsigned tx:1;
  // program stopped
  unsigned StopProgramm:1;
  union {
    enum rx_state_e 
    {
      rxWaitS = 0, // wait Esc symbol
      rxWaitC = 1, // wait Start of frame
      rxReceive = 2, // receiving
      rxEsc = 3, // Esc received
    } rx_state;
    enum tx_state_e 
    {
      txSendS = 0, // send first byte of Start of frame
      txSendC = 1, // send second byte
      txSendN = 2, // send byte of data
      txEsc = 3,   // send escaped byte of data
      txEnd = 4,   // send End of frame
      txSendS2 = 5,// send first byte of Interrupt
      txBrk = 6,   // send second byte
    } tx_state;
  };
  uint8_t pos; // receive/send position
  uint8_t buf[128]; // offset = 3
  uint8_t txCnt; // size of send data
} dbg_t;
#define dbgG ((dbg_t*)DBG_ADDR) //   ,         

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

UART рдХреЗ рд╣реИрдВрдбрд▓рд░
void USART6_IRQHandler(void)
{
  if (((USART6->ISR & USART_ISR_RXNE) != 0U)
      && ((USART6->CR1 & USART_CR1_RXNEIE) != 0U))
  {
    rxCb(USART6->RDR);
    return;
  }

  if (((USART6->ISR & USART_ISR_TXE) != 0U)
      && ((USART6->CR1 & USART_CR1_TXEIE) != 0U))
  {
    txCb();
    return;
  }
}

void rxCb(uint8_t byte)
{
  dbg_t* dbg = dbgG; // debug vars pointer
  
  if (dbg->tx) // use half duplex mode
    return;
  
  switch(dbg->rx_state)
  {
  default:
  case rxWaitS:
    if (byte==0xAA)
      dbg->rx_state = rxWaitC;
    break;
  case rxWaitC:
    if (byte == 0xFF)
      dbg->rx_state = rxReceive;
    else
      dbg->rx_state = rxWaitS;
    dbg->pos = 0;
    break;
  case rxReceive:
    if (byte == 0xAA)
      dbg->rx_state = rxEsc;
    else
      dbg->buf[dbg->pos++] = byte;
    break;
  case rxEsc:
    if (byte == 0xAA)
    {
      dbg->buf[dbg->pos++] = byte;
      dbg->rx_state  = rxReceive;
    }
    else if (byte == 0x00)
    {
      parseAnswer();
    }
    else
      dbg->rx_state = rxWaitS;
  }
}

void txCb()
{
  dbg_t* dbg = dbgG;
  switch (dbg->tx_state)
  {
  case txSendS:
    USART6->TDR = 0xAA;
    dbg->tx_state = txSendC;
    break;
  case txSendC:
    USART6->TDR = 0xFF;
    dbg->tx_state = txSendN;
    break;
  case txSendN:
    if (dbg->txCnt>=dbg->pos)
    {
      USART6->TDR = 0xAA;
      dbg->tx_state = txEnd;
      break;
    }
    if (dbg->buf[dbg->txCnt]==0xAA)
    {
      USART6->TDR = 0xAA;
      dbg->tx_state = txEsc;
      break;
    }
    USART6->TDR = dbg->buf[dbg->txCnt++];
    break;
  case txEsc:
    USART6->TDR = 0xAA;
    dbg->txCnt++;
    dbg->tx_state = txSendN;
    break;
  case txEnd:
    USART6->TDR = 0x00;
    dbg->rx_state = rxWaitS;
    dbg->tx = 0;
    CLEAR_BIT(USART6->CR1, USART_CR1_TXEIE);
    break;
  case txSendS2:
    USART6->TDR = 0xAA;
    dbg->tx_state = txBrk;
    break;
  case txBrk:
    USART6->TDR = 0xA5;
    dbg->rx_state = rxWaitS;
    dbg->tx = 0;
    CLEAR_BIT(USART6->CR1, USART_CR1_TXEIE);
    break;
  }
}


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

void parseAnswer()
{
  dbg_t* dbg = dbgG;
  dbg->pos = 1;
  dbg->buf[0] = 0x33;
  dbg->txCnt = 0;
  dbg->tx = 1;
  dbg->tx_state = txSendS;
  SET_BIT(USART6->CR1, USART_CR1_TXEIE);
}

рд╕рдВрдХрд▓рди, рд╕реАрдирд╛, рдЪрд▓рд╛рдирд╛ред рдкрд░рд┐рдгрд╛рдо рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рд╡рд┐рдирд┐рдордп рд╡рд┐рдирд┐рдордп


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ GDB рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдХрдорд╛рдВрдб рдПрдирд╛рд▓реЙрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдореЗрдореЛрд░реА рд░реАрдбрд┐рдВрдЧ
  • рдореЗрдореЛрд░реА рд░рд┐рдХреЙрд░реНрдб
  • рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдВрдж рдХрд░реЛ
  • рдирд┐рд░рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди
  • рдЧрд┐рд░реА рд░рдЬрд┐рд╕реНрдЯрд░ рдкрдврд╝рд╛
  • рдЧрд┐рд░реА рд░рдЬрд┐рд╕реНрдЯрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
  • рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛
  • рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рд╣рдЯрд╛рдПрдБ

рдХрдорд╛рдВрдб рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯреАрдореЛрдВ рдХреЗ рдХреЛрдб рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВ:

  • 2 - рдореЗрдореЛрд░реА рдкрдврд╝реЗрдВ
  • 3 - рдореЗрдореЛрд░реА рд░рд┐рдХреЙрд░реНрдб
  • 4 - рдмрдВрдж рдХрд░реЛ
  • 5 - рдЬрд╛рд░реА рд░рдЦрд╛
  • 6 - рдорд╛рдорд▓рд╛ рдкрдврд╝рд╛
  • 7 - рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  • 8 - рдмреНрд░реЗрдХрд┐рдВрдЧ рдХреНрд▓рд┐рдпрд░рд┐рдВрдЧ
  • 9 - рдХрджрдо (рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓)
  • 10 - рд░рдЬрд┐рд╕реНрдЯрд░ рдПрдВрдЯреНрд░реА (рд▓рд╛рдЧреВ рдирд╣реАрдВ)

рдкреИрд░рд╛рдореАрдЯрд░ рдбреЗрдЯрд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдЙрддреНрддрд░ рдореЗрдВ рдХрдорд╛рдВрдб рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдЯреАрдо рдиреЗ рднреЗрдЬрд╛ рд╣реИред

рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдмрд╕рдлреЙрд▓реНрдЯ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ M3 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдорд╛рд╕реНрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ M0 рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрдлреЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╕реБрд░рдХреНрд╖рд┐рдд рдпрд╛рджрдЧрд╛рд░
int memcpySafe(uint8_t* to,uint8_t* from, int len)
{
    /* Cortex-M3, Cortex-M4, Cortex-M4F, Cortex-M7 are supported */
    static const uint32_t BFARVALID_MASK = (0x80 << SCB_CFSR_BUSFAULTSR_Pos);
    int cnt = 0;

    /* Clear BFARVALID flag by writing 1 to it */
    SCB->CFSR |= BFARVALID_MASK;

    /* Ignore BusFault by enabling BFHFNMIGN and disabling interrupts */
    uint32_t mask = __get_FAULTMASK();
    __disable_fault_irq();
    SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk;

    while ((cnt<len))
    {
      *(to++) = *(from++);
      cnt++;
    }

    /* Reenable BusFault by clearing  BFHFNMIGN */
    SCB->CCR &= ~SCB_CCR_BFHFNMIGN_Msk;
    __set_FAULTMASK(mask);

    return cnt;
}


рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рдЬрд┐рд╕реНрдЯрд░ FP_COMP рдХреА рдЦреЛрдЬ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рдХреЛрдб рд╕реНрдерд╛рдкрд┐рдд рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ
	
  dbg->pos = 0; //  -    0
    addr = ((*(uint32_t*)(&dbg->buf[1])))|1; //    FP_COMP
    for (tmp = 0;tmp<8;tmp++) //      breakpoint 
      if (FP->FP_COMP[tmp] == addr)
        break;
    
    if (tmp!=8) //  , 
      break;
    
    for (tmp=0;tmp<NUMOFBKPTS;tmp++) //   
      if (FP->FP_COMP[tmp]==0) // ?
      {
        FP->FP_COMP[tmp] = addr; // 
        break; //  
      }
    break;


рд╕реЗрдЯ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреА рдЦреЛрдЬ рдХрд░рдХреЗ рд╕рдлрд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдкреАрд╕реА рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗрдЯ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рдХреЛ рд░реЛрдХрдирд╛ред UART рдХреЗ рдмреАрдЪ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рдХрд░реНрдиреЗрд▓ рддреБрд░рдВрдд DebugMon_Handler рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдбреАрдмрдЧрдореИрди рд╣реИрдВрдбрд▓рд░ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

  • 1. рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • 2. рд╕рднреА рд╕реЗрдЯ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреА рдЬрд╛рддреА рд╣реИред
  • 3. uart рдореЗрдВ рдХрдорд╛рдВрдб рдХреЛ рдЬрд╡рд╛рдм рднреЗрдЬрдиреЗ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ (рдЕрдЧрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛)
  • 4. рдЗрдВрдЯрд░рдкреНрдЯ рдЕрдиреБрдХреНрд░рдо рднреЗрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
  • 5. рд▓реВрдк рдореЗрдВ, рдкреНрд░реЗрд╖рд┐рдд рдФрд░ рдкреНрд░рд╛рдкреНрдд рдорд╢реАрдиреЛрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рд╕реНрдЯреЙрдк рдлреНрд▓реИрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рддрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдбрд┐рдмрдЧрдорди рд╣реИрдВрдбрд▓рд░ рдХреЛрдб
void DebugMon_Handler(void)
{
  dbgG->StopProgramm = 1; //   
  
  for (int i=0;i<NUMOFBKPTS;i++) //  breakpoint
    FP->FP_COMP[i] = 0;
  
  while (USART6->CR1 & USART_CR1_TXEIE) //    
    if ((USART6->ISR & USART_ISR_TXE) != 0U)
      txCb();

  
  dbgG->tx_state = txSendS2; //   Interrupt 
  dbgG->tx = 1;
  SET_BIT(USART6->CR1, USART_CR1_TXEIE);

  while (dbgG->StopProgramm) //       
  {
  	//   UART  
    if (((USART6->ISR & USART_ISR_RXNE) != 0U)
        && ((USART6->CR1 & USART_CR1_RXNEIE) != 0U))
      rxCb(USART6->RDR);

    if (((USART6->ISR & USART_ISR_TXE) != 0U)
        && ((USART6->CR1 & USART_CR1_TXEIE) != 0U))
      txCb(); 
  }
}


рдЬрдм рдХрд╛рд░реНрдп рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рддреЛ C-Syshny рд╕реЗ рдХрд░реНрдиреЗрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдкрдврд╝реЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ ASM рдкрд░ рдХреЛрдб рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рди рддреЛ рдбреАрдмрдЧрдорди_рд╣реИрдВрдбрд▓рд░, рди рд╣реА рдпреВрдПрдЖрд░рдЯреА рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░, рди рд╣реА рдорд╢реАрдиреЗрдВ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдиреЗ рдХрд░реНрдиреЗрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╛рдиреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ред

Gdb рд╕рд░реНрд╡рд░


рдбреАрдмрдЧрд░ рдХрд╛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдм рдЖрдЗрдбреА рдФрд░ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рд▓рд┐рдВрдХ рд▓рд┐рдЦреЗрдВред

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

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреВрдЫрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ COM рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдлрд┐рд░ TCP рдкреЛрд░реНрдЯ 3333 рдкрд░ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ GDB рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╕рднреА GDB рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрдорд╛рдВрдб рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ UART рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо


рдирд┐рд╖реНрдХрд░реНрд╖


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

рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ GDB рд╕рд░реНрд╡рд░ рдХреЗ

рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рднрд╛рдЧ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

All Articles