Shop OBEX P1 Docs P2 Docs Learn Events
BS2 serial data null character to PC in C+ — Parallax Forums

BS2 serial data null character to PC in C+

CircuitMageCircuitMage Posts: 62
edited 2011-03-25 09:36 in BASIC Stamp
First, hello all! My first post here!

I have been working on this for a couple days, searched for directly related postings...I fear this is a simple problem for my less-than-experienced RS232 work.

So, I have my board working with hyperterminal, as far as SERIN and SEROUT and bi-dir communication via the serial port. BUT, in working to get my PC application to work in C+, I am having problems on the PC side.

Specifically, the PC reads the serial data OK. It gets a 6 byte character "TSTART" (no extra characters...null or CR) but when I try and verify it received it, it fails the check.

ex.
if (buf != "TSTART") , where buf is a string that contains the received data "TSTART"

I believe my C+ program expects a null terminator on the string. I am acutally using the PC to interface to another piece of equipment that has it's own COMREAD function that states it puts a NULL character at the end of the received string like C does. I am not sure how to add this to my BS2. I originally was using SEROUT TX, Baud, ["TSTART",CR] , and my C+ program was seeing "TSTART" with a CR box symbol at the end.

How do I get my program to see the SEROUT data like hyperterminal does?

Thanks in advance

Comments

  • Mike GMike G Posts: 2,702
    edited 2011-03-25 08:48
    C expects a zero terminator "\0". Are you using the C string library? Otherwise a string in C looks like an array. Helps if you post your code.
  • Mike GreenMike Green Posts: 23,101
    edited 2011-03-25 08:50
    You can send a zero byte by putting a zero into the SEROUT statement like: SEROUT TX, Baud, ["Stuff",0]

    It all depends on how you're receiving the string on the C++ side. Often the receive routine will put the zero byte in when it sees a CR.
  • CircuitMageCircuitMage Posts: 62
    edited 2011-03-25 09:08
    Wow...fast response, thanks.

    Update;

    I added another character variable tstrt and verified it has the null terminator. I found the terminator missing from buf after comread .
    So, I added what looked like the correct terminator using "buf[7] = '\0';" and verified it is there .

    Looking at the hex values in MSVS , the buf is 0x0255fd80, while the tstrt string looks similar but has the value ox0255fd70. Does that mean anything to you?

    Here's the loop that is locked up, it should compare and pass...
    do
    {
    comread(pd, buf, 6);
    printf("Received from BS2 Interface attempt# %d: %s\n",loop_counter, buf);
    loop_counter++;
    buf[7] = '\0';
    } while ((buf!=tstrt)&&(loop_counter<20));
  • CircuitMageCircuitMage Posts: 62
    edited 2011-03-25 09:22
    Also wik;

    I tried the SEROUT TX, Baud, ["Stuff",0] method and it appears to do the same thing my buf[7] = '\0'; . So both look like they put the null terminator on the data.

    However, the values are still not comparing....and the hex values are different, though the contents look the same.

    Could it be my tstrt string is the problem? I'm initializing with;

    char tstrt[7]="TSTART";
  • CircuitMageCircuitMage Posts: 62
    edited 2011-03-25 09:36
    Got it!

    I used strcmp(buf,tstrt) and it worked...must have been checking the pointers (?).

    Thanks for the spurs.
Sign In or Register to comment.