|
|
View previous topic :: View next topic |
Author |
Message |
hayee
Joined: 05 Sep 2007 Posts: 252
|
strsrt function query |
Posted: Fri Mar 13, 2015 1:24 am |
|
|
Hi i write a code to receive the stream and compare it with a predefined stream and then do the process.
The stream which is coming is
The code for receiving that stream is as follows
Code: |
#include <18f26k22.h>
#fuses HSH,NOPLLEN,NOBROWNOUT
#use delay(crystal=20M)
#use rs232(baud=9600 , UART2, stream=GSM)
#use rs232(baud=9600 , UART1, stream=PC)
#include <string.h>
#define BUFFER_SIZE 50
char c;
char buff[buffer_size];
int a_count=0, n=0;
char OK[]={"OK"};
#INT_RDA2
void data_received(void)
{
c=fgetc(GSM); //receive character in a variable
buff[n]=c; //copy that character in buffer
n++; //increament the index
if(c==0x0A) a_count++;//increament whenever '\n' character receives.
}
void main(void)
{
enable_interrupts(INT_RDA2);
enable_interrupts(GLOBAL);
do
{
if(a_count==2) // '\n' received two times?
{
n++; //increament index for adding null character
buff[n]='\0'; //add null character at the end of stream
if(strstr(buff,OK)!=NULL) //if steam matches
{
output_toggle(PIN_C0);
a_count=0;
memset(buff,0,BUFFER_SIZE);
n=0;
}
}
}while(TRUE);
}
|
The code is working fine.
I have a question. Is it necessary to have a null character at the end of the stream for comparison? because when i comment out the following lines the code also works.
Code: |
//! n++; //increament index for adding null character
//! buff[n]='\0'; //add null character at the end of stream
|
Is there something i am missing? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19518
|
|
Posted: Fri Mar 13, 2015 2:00 am |
|
|
It's necessary, if you _don't_ receive the right string.....
strstr, returns when it finds a match, _or_ when it hits the end of the string. If you don't have the terminator, and the match fails, the function will disappear off searching through the entire memory. Normally it'll eventually return, since there probably _will_ be a zero somewhere, but it'll take significant time, and if there isn't a zero, it'll carry on, and may well eventually crash...
Adding the terminator, limits the search to this point, so the function will return OK (with a 'match fail' status), if there is no match.
In fact without it, there is a very good chance it'll accidentally return 'match good', since if there isn't another zero in memory, it is likely to meet the actual search string and match itself.... |
|
|
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Fri Mar 13, 2015 7:58 am |
|
|
Quote: |
\Is there something i am missing?
|
another thing that jumps out is the linear receive buffer.
what happens if received character count increments n>49 ? |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|