|
|
View previous topic :: View next topic |
Author |
Message |
kisslove Guest
|
fprintf problem |
Posted: Thu Apr 02, 2009 2:15 am |
|
|
Hi
I'm trying to send an sms message, using this:
Code: |
char a = 0x22;
char b = 0x0D;
char d = 0x1A;
fprintf(GSM_MODEM,"AT+CMGS=%c%s%c%c%s%c",a,current_number,a,b,cc,d);
|
where current number is declared like: char current_number[12];
the problem is that i'm getting this kind of string:
AT+CMGS="+71234567890 "
[string cc here]
instead of AT+CMGS="+71234567890"
why are the extra characters in it and how to get rid of them?
tnanks.
PS: sorry for my english |
|
|
Wayne_
Joined: 10 Oct 2007 Posts: 681
|
|
Posted: Thu Apr 02, 2009 2:24 am |
|
|
First of all you don't show what cc is defined as or set to.
Do you need to enclose it in qoutes ?
What is 0x1A for ?
Don't you mean to be sending cr/lf 0x0D 0x0A |
|
|
kisslove Guest
|
|
Posted: Thu Apr 02, 2009 2:57 am |
|
|
Wayne_ wrote: | First of all you don't show what cc is defined as or set to.
Do you need to enclose it in qoutes ?
What is 0x1A for ?
Don't you mean to be sending cr/lf 0x0D 0x0A |
0x1a is a <ctrl+z> - end of text marker.
cc - is a string and there's no problem with it - it's transferred correctly.
it's declared in function from where fprintf is called.
Code: |
void send_sms(char *cc)
{
char a = 0x22;
char b = 0x0D;
char d = 0x1A;
fprintf(GSM_MODEM,"...",...)
}
|
4 example cc may look like this $GPRMC,075103.903,V,5953.0527,N,03021.6326,E,0.0,0.00,020409,,,N*48
current_number is global. |
|
|
kisslove Guest
|
|
Posted: Thu Apr 02, 2009 3:12 am |
|
|
The question is why do i get 14 characters between quotation marks instead of 12? |
|
|
Guest
|
|
Posted: Thu Apr 02, 2009 3:21 am |
|
|
i've tryed it without the quotes:
AT+CMGS=+71234567890
$GPRMC,090417.837,V,5953.0527,N,03021.6326,E,0.0,0.00,020409,,,N*45
and i'm still getting one or two random characters in the end of the number |
|
|
nostep
Joined: 04 Mar 2009 Posts: 16
|
|
Posted: Thu Apr 02, 2009 6:13 am |
|
|
Typically and end of string mark is a zero (0x00). What character shows up after your number? Make sure it's a zero like
number[12]=0x00.
If that doesn't work then you can alsways do it the ugly way like:
fprintf(... "%c%c%c%c%c%c%c...",0x22,num[0],num[1],num[2],num[3],etc,0x22); |
|
|
Wayne_
Joined: 10 Oct 2007 Posts: 681
|
|
Posted: Thu Apr 02, 2009 7:06 am |
|
|
Need to see the definition and assignment of current_number.
Also, what are you using to view the extra 2 chars and what values are they ?
It appears that 00 and 02 are the 2 chars, 00 may be the string termination char which fprintf would not have sent. they may be control signals ? |
|
|
Guest
|
|
Posted: Fri Apr 03, 2009 2:37 pm |
|
|
If you are using the PCD compiler for the pic24 series, then there are still many problems with fprintf/sprintf/printf even in the latest version 4.090.
I have recently submitted about 16 errors with fprintf formatting to CCS and am awaiting a response.
I have similar problems in particular with:
printing floats (with no decimal places) - getting extra chars inserted in the string
int32's where the value is zero, - it prints nothing.
int16's value of 0 error was fixed in v4.090.
The only way I have found to get around most of these problems is to specify the width/precision, and the only way to work out which ones work is to write your own fprintf test program and then avoid the ones that dont work until CCS fixes them. |
|
|
rnielsen
Joined: 23 Sep 2003 Posts: 852 Location: Utah
|
|
Posted: Fri Apr 03, 2009 3:45 pm |
|
|
First, as it was stated above, all strings, repeat ALL strings MUST be terminated with a NULL character (0x00). You have declared current_number as: char current_number[12]. Well, you have 12 characters inside of that string "+71234567890". If you want 12 characters stored then you need to declare it as: char current_number[13] and make sure you have current_number[13] = 0x00. If you don't have the NULL character in the last position you will get garbage at the end. This goes with cc also. You ALWAYS need to declare a string at least one place larger than the size you want to store, to accomodate the NULL character.
Try this and see if it helps get rid of the garbage.
Ronald |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Sat Apr 04, 2009 6:02 am |
|
|
Apart from using sufficient string storage, as suggested, you may want to simplify your fprintf() statement by utilizing standard C escape sequences for control characters. A double quotation mark can be inserted as \" and arbitrary control characters as \xnn, eg. \x1a for CTRL-Z. They work in format strings and other string constants as well. |
|
|
|
|
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
|