hallo,
hier wäre der Arduino-Code:
https://github.com/dsyleixa/Borland-..._BCB6_RxTx.ino

und hier die UART-Routinen (+GUI) für den PC:
https://github.com/dsyleixa/Borland-...RxTx/Unit1.cpp

die wesentliche Funktion ist cstringarg() samt Hilfsfunktion strstrpos() , sie wird von beiden Plattformen benutzt:

Code:
//----------------------------------------------------------------------------
// tools
//----------------------------------------------------------------------------

int16_t  strstrpos(char * haystack,  char * needle)   // find 1st occurance of substr in str
{
   char *p = strstr(haystack, needle);
   if (p) return p - haystack;
   return -1;   // Not found = -1.
}


//------------------------------------------------------------
char * cstringarg( char* haystack, char* vname, char* carg ) {
   int i=0, pos=-1;
   unsigned char  ch=0xff;
   const char*  kini = "&";       // start of varname: '&'
   const char*  kin2 = "?";       // start of varname: '?'
   const char*  kequ = "=";       // end of varname, start of argument: '='
   char  needle[TOKLEN] = "";     // complete pattern:  &varname=abc1234

   strcpy(carg,"");
   strcpy(needle, kini);
   strcat(needle, vname);
   strcat(needle, kequ);
   pos = strstrpos(haystack, needle); 
   if(pos==-1) {
      needle[0]=kin2[0];
      pos = strstrpos(haystack, needle);
      if(pos==-1) return carg;
   }
   pos=pos+strlen(vname)+2; // start of value = kini+vname+kequ   
   while( (ch!='&')&&(ch!='\0') ) {
      ch=haystack[pos+i];    
      if( (ch=='&')||(ch==';')||(ch==' ')||(ch=='\0') ||(ch=='\n')
        ||(i+pos>=strlen(haystack))||(i>TOKLEN-1) ) {
           carg[i]='\0';
           return carg;
      }       
      if( (ch!='&') ) {
          carg[i]=ch;          
          i++;       
      }      
   } 
   return carg;
}
cstringarg() gibt einen cstring zurück, der dem Teil entspricht, der hinter dem Gleichheitszeichen steht, also bei

char msg[100];
strcpy(msg, "&i=12;&myfloat=1234.56;&foo=8765; &bas="56473.563736";\n");

char cwert[20];

wird nach
cstringarg(msg, "i", cwert );
"12" in cwert[] zurückgegeben, Null-terminiert, und nach

cstringarg(msg, "myfloat", cwert );
entsprechend
"1234.56"


(ich hoffe, ich habe jetzt nicht noch einen c+p Fehler drin)