7 years, 6 months ago.

I have a problem with using serial class function. Can any one help me?

Serial sri(USBTX,USBRX); event_callback_t serialEventCb;

int main() { char tx_buffer[255]; printf("Serial_Init(format,baud set)\n"); sri.format(); sri.baud(9600);

printf("\nSerial START...\n"); sri.writeable(); printf("Input char:"); sri.write(tx_buffer, sizeof(tx_buffer)); fgets(tx_buffer,sizeof(tx_buffer),stdin); printf("tx_buffer=%s\n",tx_buffer); }

I would like to create a string read/write program. But compiler genreate the error that "Function mbed::Stream::write (declared at /extras/mbed_abea610beb85/Stream.h:52) is inaccessible "sri.write(tx_buffer, sizeof(tx_buffer));"

How can I solve this problem?

1 Answer

7 years, 6 months ago.

What are you trying to do? It's not clear from your program.

You seem to switch between using stdin / stdout and the serial port. On most mbed boards the usb serial port is stdin/out and so this will work but it's not a good habit to have. If you want the program to use the serial port then tell it to use that port.

Also use <<code>> and <</code>> to make your code readable on the message board.

Serial sri(USBTX,USBRX);
event_callback_t serialEventCb;  // this isn't used anywhere

int main()
{
    char tx_buffer[255];
    printf("Serial_Init(format,baud set)\n");
    sri.format();
    // This sets things to the default format (8-N-1). Since you haven't changed anything it is already in that mode.
   
   sri.baud(9600);

    printf("\nSerial START...\n");
    // should be sri.printf 

    sri.writeable();
    // pointless. This returns true if there is space in the buffer to write to the port, it doesn't change any settings.

    printf("Input char:");
    // again sri.printf

    sri.write(tx_buffer, sizeof(tx_buffer)); 
    // write() is part of the async protocol that is only supported on a few boards. Even if you had one of the few boards it
    // worked on you haven't set the value of tx_buffer so you will be sending random binary data.

    fgets(tx_buffer,sizeof(tx_buffer),stdin); // while it would probably work you should indicate the serial port not stdin e.g.
    // sri.gets(tx_buffer,sizeof(tx_buffer));

    printf("tx_buffer=%s\n",tx_buffer); // again sri.printf
}

Accepted Answer

Thank you for your answer. I'm a beginner programmer so my question is very complexity and hard to read. Finally thanks for your help though I will find out myself.

posted by Dongki Bae 29 Sep 2016