UART tane gelen bilgileri çözümleme ??

Başlatan koray692, 06 Şubat 2016, 15:37:10

koray692

merhaba arkadaşlar ben gps ten bilgileri alıyorum usart üzerinden. Örnek bir kod buldum gelen bilgileri çözümleyebilecek ama bu kod sanki biraz işlemciyi gereksiz yere çok oyalayacakmış gibi geldi sizlerinde görüşünüzü almak istedim.Çok deneyimim olmadığı için alternatif bir seçenekte bulamadım.

//PA9 USART1_TX            pa10_rx
// Variables
int received = 0;
char DataType[] = "GPXXX";
char NMEA[] = "$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
char receive;
// End Variables


void main()
{

  UART1_Init(56000);              // Initialize UART module at 56000 bps
  Delay_ms(100);                  // Wait for UART module to stabilize

    while(1) {
if (UART1_Data_Ready() == 1) {
receive = UART1_Read();
if (receive == '$')  // Check if sentence begins.
{
      received = 0;
      do{
        if (UART1_Data_Ready() == 1)
        {
         UART1_Read_Text(DataType, ",", 10);  // Capture GPXXX word
         received = 1;
        }
      } while(received == 0);

      // If it is GPGGA Data, then acquire it.

      if ((DataType[2] == 'G') && (DataType[3] == 'G') && (DataType[4] == 'A'))
      {
        received = 0;
        do{
          if (UART1_Data_Ready() == 1)
          {
           UART1_Read_Text(NMEA, "*", 100);   // Stop at *XX checksum data
           received = 1;
          }
        } while(received == 0);
       


}

      receive = "x";
   }
  }
}
}

elektronikDelisi

String kütüphanesinde bulunan "strtok" deyimini kullanabilirsin bu işlem için.

bkz: http://www.cplusplus.com/reference/cstring/strtok/?kw=strtok
aramızda bir elektrik var..

kantirici

Verileri kesme ile alıp izlemelisiniz. Bu kod uarttan beklenen data gelinceye kadar aynı yerde çakılır.  Mcu başka birşey yapamaz.  Uart bağlantısı kesilirse yine çakılır.

koray692

evet kesme ile almayı düşünüyorum şimdi araştırıyorum strstr() fonksiyonunu gördüm bu fonksiyonu kullanmayı düşünüyorum

koray692

#4
kesme olursa yukarda ki kodda sorun çıkmaz değil mi ?

koray692




resimde görüldüğü gibi sadece b harfini gösteriyor anlamadım neden böyle olduğunu ?