|
|
View previous topic :: View next topic |
Author |
Message |
cbarberis
Joined: 01 Oct 2003 Posts: 172 Location: Punta Gorda, Florida USA
|
Error when printing to LCD |
Posted: Fri Jul 15, 2011 3:10 pm |
|
|
Hi I am using the "flex_lcd.c" driver for a 2X16 lcd module. I am using a PIC24FV32KA304 with the PCD compiler (V4.122), however I keep getting an error whenever I try to print some characters to the display such as:
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("Hello World"); -------> this gives me Error 90 "Attempt to create pointer to a constant" when ever I compile
However if I use the following: printf(lcd_putc,"Hello World"); it compiles and works fine!
I have always in the past used lcd_putc("xxxx"); without any problems, I thought that lcd_putc() takes each char at a time from within the string delimiter? I'm I missing something???? |
|
|
cbarberis
Joined: 01 Oct 2003 Posts: 172 Location: Punta Gorda, Florida USA
|
|
Posted: Sat Jul 16, 2011 10:07 am |
|
|
It appears that I am not imagining this; in the past I took for granted the following feature on the CCS compiler and for some reason it no longer applies, at least with my compiler version using PCD. However, the manual indicates this is a built in function?
From the latest PCD compiler Manual:
A (non-standard) feature has been added to the compiler to help get around the problems created by the fact that pointers cannot be created to constant strings. A function that has one CHAR parameter will accept a constant string where it is called. The compiler will generate a loop that will call the function once for each character in the string.
Example:
void lcd_putc(char c ) {
...
}
lcd_putc ("Hi There.");
The above returns: Error 90 "Attempt to create pointer to a constant" |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Jul 16, 2011 1:09 pm |
|
|
Most of us don't have the PCD compiler, so we can't test it. You could
take your program that fails with PCD, and modify it slightly so it can be
tested with PCH or PCM. See if it fails with those compilers. If so, then
post the program. If the problem is limited to PCD, then email CCS support. |
|
|
cbarberis
Joined: 01 Oct 2003 Posts: 172 Location: Punta Gorda, Florida USA
|
|
Posted: Mon Jul 18, 2011 4:18 pm |
|
|
As usual...Thank you PCM programmer!!
The problem seems to be related to the PCD compiler, this is what I got from the CCS support guys:
Change the function parameter to a "unsigned char" and it will work. We will fix it in the next release.
Thought I save someone some aggravation |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19496
|
|
Posted: Tue Jul 19, 2011 2:25 am |
|
|
I can see exactly what is happening.
On the older compilers, an 'int', implies an int8. On PCD, an int, implies an int16. Also the default in PCD is signed, where the older compiler defaulted to unsigned.
A couple of versions ago, the 'signed' default, was extended to include int8, and char types.
The 'shortcut' of being able to put a constant string into a function expecting a series of characters works on the older compiler with functions defined as receiving int, int8, or char. On the PCD compiler, you now have to be explicit, and have the functions expecting 'unsigned int8', or 'unsigned char', before the shortcut is activated, since now PCD, treats types as signed, unless explicitly told otherwise....
Best Wsihes |
|
|
|
|
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
|