Hi, all!
Now I am porting the code from Arduino to MBED, and I encountered the following problem that the ported code to MBED does not work, although the code from Arduino works. The comparison does not work, apparently due to the fact that the “buffer ” is reset. The purpose of this code is to read strings of arbitrary length from a serial port without line termination characters (\n,\r, \0). My board is Nucleo 32 f303k8
Mbed code:
#include "mbed.h"
#include <string>
Serial pc(SERIAL_TX, SERIAL_RX);
DigitalOut myled(LED1);
const int BUFFER_SIZE = 48;
char buffer[BUFFER_SIZE] = {0};
int ch;
int StrCompare(const char *str1,const char *str2);
int main()
{
Serial pc(SERIAL_TX, SERIAL_RX);
pc.baud(115200);
while(1) {
while (pc.readable()>0)
{
while ((ch = pc.getc())!= EOF)
{
int i = 0;
buffer[i]=ch;
i++;
//buffer[i]= '\0';
}
if (StrCompare(buffer,"PRINT" ))
{
pc.printf("ok");
}
}
//memset (buffer,0, sizeof(buffer));
}
}
int StrCompare(const char *str1,const char *str2){
if(!*str1 || !*str2)return 0;
while(*str1){
if(*str1++!=*str2++)return 0;
}
return 1;
}
Arduino code:
const int BUFFER_SIZE = 48;
char bufferx[BUFFER_SIZE] = {0};
int ch;
void setup() {Serial.begin(115200);}
void loop() {
while (Serial.available()>0)
{
while ((ch = Serial.read())!= EOF)
{
int i = 0;
bufferx[i]=ch;
i++;
//bufferx[i]= '\0';
}
if (StrCompare(bufferx,"PRINT" ))
{
Serial.print("OK");
}
}
//memset (bufferx,0, sizeof(bufferx));
}
int StrCompare(const char *str1,const char *str2){
if(!*str1 || !*str2)return 0;
while(*str1){ if(*str1++!=*str2++)return 0;}
return 1;
}