View previous topic :: View next topic |
Author |
Message |
Jerry I
Joined: 14 Sep 2003 Posts: 96 Location: Toronto, Ontario, Canada
|
Microchip Stack CCS Version (Telnet Function) |
Posted: Mon Jun 29, 2015 3:23 pm |
|
|
I am using the latest version of the compiler 5.048
18F97j60 Dev Board.
I have compiled sample program that uses the Microchip stack with CCS modifications.
The Telnet test code is working and I am connecting and logging into dev. board. The problem is the screen is showing invalid characters. This is a sample of the code that is compiled to show.
Code: |
// Demo title string
static ROM BYTE strTitle[] = "\x1b[2J" // 2J is clear screen
"Microchip Telnet Server 1.1\r\n" // 0m is clear all attributes
"(for this demo, type 'admin' for the login and 'microchip' for the password.)\r\n"
"Login: ";
// Demo password
static ROM BYTE strPassword[] = "Password: \xff\xfd\x2d"; // DO Suppress Local Echo (stop telnet client from printing typed characters)
// Access denied message
static ROM BYTE strAccessDenied[] = "\r\nAccess denied\r\n\r\n";
// Successful authentication message
static ROM BYTE strAuthenticated[] = "\r\nLogged in successfully\r\n\r\n"
"\r\nPress 'q' to quit\r\n";
// Demo output string
static ROM BYTE strDisplay[] = "\r\nSNTP Time: (disabled)"
"\r\nAnalog: 1023"
"\r\nButtons: 3 2 1 0"
"\r\nLEDs: 7 6 5 4 3 2 1 0";
// String with extra spaces, for Demo
static ROM BYTE strSpaces[] = " ";
// Demo disconnection message
static ROM BYTE strGoodBye[] = "\r\n\r\nGoodbye!\r\n";
|
The Telnet screen below as per code above.
How can I paste an image in this post. I have seen it done in other postings. I put a link to dropbox to show the telnet screen.
https://photos-1.dropbox.com/t/2/AAAl4tD5om92Q93l3f8XdeV1VABLsVOeYBrU5AT6jH__gw/12/61484629/png/32x32/1/1435640400/0/2/Telnet.PNG/CNXcqB0gASACIAMgBCAFIAYgBygBKAI/mph2p-f6MCPBhc6PakXjsLX77c1BX6Vy1RoNn81xcjw?size=1600x1200&size_mode=2
It appears that the strings are not saved in the ROM Byte Variable declaration.
Any Ideas??
Thanks for any help.
Jerry[url] |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Tue Jun 30, 2015 12:19 am |
|
|
Does your code have #DEVICE PASS_STRINGS=IN_RAM?.
It's difficult to know without seeing the environment in which this code is actually being used, but generally CCS 'ROM' or 'const' statements put data genuinely in ROM. Microchip instead treats this data as 'unchangeable' but stored in RAM. The PASS_STRINGS setup, makes CCS behave _as if_ the data was stored in RAM, automatically passing it through a RAM buffer as needed.
You can't paste images into the forum, but if you have an external link, and include it in 'Img' tags (button at the top of the posting page), then if it is a direct link to the picture, the picture gets displayed inline. |
|
|
Jerry I
Joined: 14 Sep 2003 Posts: 96 Location: Toronto, Ontario, Canada
|
|
Posted: Tue Jun 30, 2015 9:00 pm |
|
|
Thanks Ttelmah for your suggestion.
I found that storage in ROM is not the problem, I used printf to display the strings as shown and it displays fine.
printf("%s\r\n", strDisplay);
I now have to check the function that output the Telnet string.
Thanks for help.
Jerry |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Wed Jul 01, 2015 1:01 am |
|
|
Beware.
Some of the CCS functions are effectively 'overloaded', so they will accept things that other functions don't.
I'd be verifying with a bit of code that actually accesses the variables exactly the way they are used in the Telnet functions, before being 'sure' the declarations are working as expected.
Just a warning (this has caught me in the past...). |
|
|
Jerry I
Joined: 14 Sep 2003 Posts: 96 Location: Toronto, Ontario, Canada
|
|
Posted: Wed Jul 01, 2015 5:21 pm |
|
|
Hi Again
I have found that of the any ROM BYTE declaration as below
greater than 16 bytes is corrupted.
Prints fine if I use printf.
Code: |
static ROM BYTE strAuthenticated[] = "\r\nLogged in successfully\r\n\r\n"
"\r\nPress 'q' to quit\r\n";
static ROM BYTE strTitle[] = "Login: ";
static ROM BYTE strTitle[] = "Login:Login:Login:Login: ";
|
In the telnet screen the first example of the word 'Login: ' Prints fine
'Login: '
The second example of the repeated login string prints
'Login:Login:Logi '
Any more ideas?.
Thanks for any help.
Jerry |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Thu Jul 02, 2015 1:22 am |
|
|
I'd change the declarations to be CCS compatible.
Just use 'const char', instead of 'static ROM BYTE', and ensure you have the pass strings in RAM option enabled. The const strings should then work just as if they are declared in RAM, except for being 'constant'. |
|
|
|