CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

[Solved] CCS returning a constant string.

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

[Solved] CCS returning a constant string.
PostPosted: Thu Feb 20, 2020 11:59 am     Reply with quote

In a PIC24 project I worked on a few months ago, I had debugging functions that would print out a text version of a value, such as:

Code:

printf ("Command: %d (%s)\r\n", command, GetCommandString(command));


It worked well.

Another developer here is using a routine to return a string for a mode to display on an LCD, and sometimes it ends up pointing to 0s instead of the hard-coded string constant. I wrote a quick test program, and found mine also seems to point to NULL. I tested using 5.082 and 5.092.

I created a very simple test program, identical in flow to the routines I used earlier that worked. But today, it doesn't work for me (and the other project works, unless he add some lines of code, then it starts returning a pointer to 0s).

Code:
#include <main.h>

// Prototypes
const char *GetName(int nameValue);

// Functions
void main()
{
   printf (__DATE__" "__TIME__"\r\n");

   for (int idx = 0; idx < 5; idx++)
   {
      printf ("%d = '%s'\r\n", idx, GetName(idx));
   }

   while(TRUE);
}


const char *GetName(int nameValue)
{
   printf ("GetName(%d)\r\n", nameValue);
   
   switch (nameValue)
   {
      case 0:
         return "Zero";
     
      case 1:
         return "One";
         
      case 2:
         return "Two";
     
      default:
         return "???";
   }
}

// End of main.c

_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?


Last edited by allenhuffman on Thu Feb 20, 2020 2:18 pm; edited 1 time in total
Ttelmah



Joined: 11 Mar 2010
Posts: 19451

View user's profile Send private message

PostPosted: Thu Feb 20, 2020 12:09 pm     Reply with quote

You need to either be enabling PSV, or using PASS_STRINGS=IN_RAM to
support this. Much more efficient to enable PSV,
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Feb 20, 2020 12:16 pm     Reply with quote

Ttelmah wrote:
You need to either be enabling PSV, or using PASS_STRINGS=IN_RAM to
support this. Much more efficient to enable PSV,


Ah, that could have been enabled in the project I was doing this in, though we don't use any strings (no I/O).

I just added that in my master header file, but no change. The ptr being returns is correct, however, and matches where the data in flash is located.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Feb 20, 2020 12:34 pm     Reply with quote

Changing from constant quotes to const strings works. Oddly.

Code:
#include <main.h>

// Prototypes
const char *GetName(int nameValue);

// Functions
void main()
{
   printf (__DATE__" "__TIME__"\r\n");

   for (int idx = 0; idx < 5; idx++)
   {
      printf ("%d = 0x%x '%s'\r\n", idx, GetName(idx), GetName(idx));
   }

   while(TRUE);
}


const char *zero = "Zero";
const char *one = "One";
const char *two = "Two";
const char *unknown = "???";

const char *GetName(int nameValue)
{
   //printf ("GetName(%d)\r\n", nameValue);

   switch (nameValue)
   {
      case 0:
         //return "Zero";
         return zero;
     
      case 1:
         //return "One";
         return one;
         
      case 2:
         //return "Two";
         return two;
     
      default:
         //return "???";
         return unknown;
   }
}

// End of main.c


Quote:
20-Feb-20 12:33:14
0 = 0x802 'Zero'
1 = 0x808 'One'
2 = 0x80c 'Two'
3 = 0x810 '???'
4 = 0x810 '???'

_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Feb 20, 2020 2:15 pm     Reply with quote

CCS replied.

Code:
#device CONST=ROM


That makes the 'return "string"' work. Cool. That must have been in the pre-exiting project that I was working with.

Quote:
CONST=READ_ONLY
Uses the ANSI keyword CONST definition, making CONST variables read only, rather than located in program memory.

CONST=ROM
Uses the CCS compiler traditional keyword CONST definition, making CONST variables located in program memory.

_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Feb 20, 2020 3:43 pm     Reply with quote

Well, it was working. Now it's not working again. Back to my original issue. Dunno.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
temtronic



Joined: 01 Jul 2010
Posts: 9205
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Feb 20, 2020 4:05 pm     Reply with quote

keep going back in versions until it works again.....

I copy/change/compile/test....

If I don't like it, I go back....

pgmv1,pgmv2,......pgmv999

I know it's a lot of HD space, but there's lots available.
Once the project is done,I then delete all but last 3-5 versions. Well I should but really HD space is unlimited, right ?
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Feb 20, 2020 4:19 pm     Reply with quote

temtronic wrote:
keep going back in versions until it works again.....


Yeah, the history in the CCS editor is a nice bonus.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
Ttelmah



Joined: 11 Mar 2010
Posts: 19451

View user's profile Send private message

PostPosted: Fri Feb 21, 2020 2:24 am     Reply with quote

Is the current failure with 5.092?.
This seems to have an 'oddity' if you do a lot of changes, that it then
stops working. Creates different output from what it gives after a clean
'launch'. I've noted it and reported this to CCS.
Could explain why you are seeing it working 'sometimes'....

Might be tempted to suggest you try re-installing the compiler. I have
(very occasionally) seen odd issues that seem to come down to a corrupted
installation. Have just tried you code with every combination I could think
of (PSV, PASS_STRINGS, const= etc.), and all worked correctly....
allenhuffman



Joined: 17 Jun 2019
Posts: 540
Location: Des Moines, Iowa, USA

View user's profile Send private message Visit poster's website

PostPosted: Fri Feb 21, 2020 10:06 am     Reply with quote

Ttelmah wrote:
Is the current failure with 5.092?.
This seems to have an 'oddity' if you do a lot of changes, that it then
stops working. Creates different output from what it gives after a clean
'launch'. I've noted it and reported this to CCS.
Could explain why you are seeing it working 'sometimes'....


I am so glad we aren't the only ones! :-) I am in the habit of closing all windows and shutting down CCS, then double-clicking the next project file to make that one open. It seems to write files from the old project into the new one if I select it other ways. I may do a quick remove/clean install today, though I'm on my temporary Windows 7 machine again while the DELL laptop is back in the shop.
_________________
Allen C. Huffman, Sub-Etha Software (est. 1990) http://www.subethasoftware.com
Embedded C, Arduino, MSP430, ESP8266/32, BASIC Stamp and PIC24 programmer.
http://www.whywouldyouwanttodothat.com ?
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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