![](templates/subSilver/images/CCSLogo.jpg) |
![CCS C Software and Maintenance Offers](templates/subSilver/images/forumAd6.jpg) |
View previous topic :: View next topic |
Author |
Message |
cetinerdemkilinc
Joined: 24 May 2020 Posts: 5
|
Printf is not working when I trying to print variables |
Posted: Sun May 24, 2020 6:43 am |
|
|
Hey, I really need help.
I am sending an HTML page via wifi module. And i have to send variables with the HTML string. I am using escape characters for this. If string has under a few hundreds of char, its working fine but my html page has 500+ characters. I'll tell my problem with examples.
It is working great:
Code: | printf("Some strings... And value=%d",15); |
And it is working great too:
Code: | printf("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-9\" /></head><title>Termograff WIFI Ayarlarý</title><body bgcolor=\"#272e35\"style=\"font-family:Arial,sans-serif;\"><font color=\"white\"><div><form action=\"/\"method=\"post\"><h1>Wi-Fi Bilgileri</h1>Að adý: <input type=\"text\"name=\"set_ssid\"value=\"\"required><br><br>Þifre:<input type=\"text\"name=\"set_psw\"value=\"\"required><br><br><input type=\"submit\"value=\"Baðlan\"></form></div></font><br></body></html>"); |
But when i try put variables into this long string:
Code: |
char ssid[]="some string here";
char psw[]="and some string here";
printf("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-9\" /></head><title>Termograff WIFI Ayarlarý</title><body bgcolor=\"#272e35\"style=\"font-family:Arial,sans-serif;\"><font color=\"white\"><div><form action=\"/\"method=\"post\"><h1>Wi-Fi Bilgileri</h1>Að adý: <input type=\"text\"name=\"set_ssid\"value=\"%s\"required><br><br>Þifre:<input type=\"text\"name=\"set_psw\"value=\"%s\"required><br><br><input type=\"submit\"value=\"Baðlan\"></form></div></font><br></body></html>",ssid,psw); |
This is giving an output like this:
Code: | <html><head><meta http-equiv="Content-Type" content="text/html; ssid"required><br><br>Şifre:<input type="text"name="set_psw"value="psw"required><br><br><input type="submit"value="Bağlan"></form></div></font><br></body></html> |
Like you are seeing, it is half.
Yes, it is so interesting and confusing. How can i fix this??
Note: It is not about HTML or wifi module. I tried this with another simple string and result is same, it is sending a half of the string. |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
Re: Printf is not working when I trying to print variables |
Posted: Sun May 24, 2020 7:14 am |
|
|
cetinerdemkilinc wrote: |
I tried this with another simple string and result is same, it is sending a
half of the string. |
Post a test program that uses this simple string. |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19359
|
|
Posted: Sun May 24, 2020 7:23 am |
|
|
There is a maximum length limit. This was found/discussed here before.
If I remember correctly it is just over 100 bytes.
You'll just have to split the output into two statements. Not exactly
rocket science....
Remember:
Code: |
printf("This is a message string");
//gives exactly the same output as:
printf("This is a message");
printf(" string");
|
There is also a separate limit on the maximum number of variables that
can be used in a single printf. That is something like 15. |
|
![](templates/subSilver/images/spacer.gif) |
cetinerdemkilinc
Joined: 24 May 2020 Posts: 5
|
Re: Printf is not working when I trying to print variables |
Posted: Sun May 24, 2020 7:29 am |
|
|
PCM programmer wrote: | cetinerdemkilinc wrote: |
I tried this with another simple string and result is same, it is sending a
half of the string. |
Post a test program that uses this simple string. |
It is working fine:
Code: | #include <18f46k22.h>
//#device PASS_STRINGS=IN_RAM
#fuses hsh,NOWDT,NOMCLR
#use delay(clock=20M, crystal=20M)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
void main()
{
printf("Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora ");
while(1);
} |
Output:
Code: | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora |
But when I tried to print any variable with this:
Code: | #include <18f46k22.h>
//#device PASS_STRINGS=IN_RAM
#fuses hsh,NOWDT,NOMCLR
#use delay(clock=20M, crystal=20M)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
void main()
{
printf("Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora %d",15);
while(1);
} |
The output is:
Code: | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia 15 |
This is a half of the actual string too.
This string has same character count with my HTML string.
Last edited by cetinerdemkilinc on Sun May 24, 2020 7:46 am; edited 1 time in total |
|
![](templates/subSilver/images/spacer.gif) |
cetinerdemkilinc
Joined: 24 May 2020 Posts: 5
|
|
Posted: Sun May 24, 2020 7:39 am |
|
|
Ttelmah wrote: | There is a maximum length limit. This was found/discussed here before.
If I remember correctly it is just over 100 bytes.
You'll just have to split the output into two statements. Not exactly
rocket science....
Remember:
Code: |
printf("This is a message string");
//gives exactly the same output as:
printf("This is a message");
printf(" string");
|
There is also a separate limit on the maximum number of variables that
can be used in a single printf. That is something like 15. |
Thanks for the reply.
Yes, it is a solution and I can use it. But next steps of this project, i will send strings that contain much more variables. And if i separate string like that, it has so much parts.
If it is impossible to do it in one printf, I have to separate it.
But I did not understand why the limit is valid for only strings containing variable. |
|
![](templates/subSilver/images/spacer.gif) |
cetinerdemkilinc
Joined: 24 May 2020 Posts: 5
|
|
Posted: Sun May 24, 2020 7:42 am |
|
|
Is there any way to do it in one printf??? |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19359
|
|
Posted: Sun May 24, 2020 7:44 am |
|
|
As soon as you have a variable, the printf, has to 'interpret' the constant
string, instead of just passing it on character by character. It is this process
that has the limitations.... |
|
![](templates/subSilver/images/spacer.gif) |
cetinerdemkilinc
Joined: 24 May 2020 Posts: 5
|
|
Posted: Sun May 24, 2020 7:57 am |
|
|
Ttelmah wrote: | It is this process
that has the limitations.... |
Well, I think I have to split. But if anyone has a way to do it in a single printf, i will be waiting. |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19359
|
|
Posted: Mon May 25, 2020 7:56 am |
|
|
printf, is designed to send data to things like a screen terminal, or a LCD.
The function targets a maximum line length therefore of 80 characters,
with a bit of a margin.
I'm afraid to send the sort of huge stream you have in mind,
you are either going to have to split it or just use your own replacement
for the supplied printf. I have in the past used part if this small prints
to give support for argument variables:
<https://www.menie.org/georges/embedded/small_printf_source_code.html>
It's not too hard to translate to CCS. |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|