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

ERROR: Previous identifier must be a pointer

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







ERROR: Previous identifier must be a pointer
PostPosted: Fri Jun 01, 2007 5:55 am     Reply with quote

With my old version 3.1xx my program ist compiling and running - with the new 4.xxx not. I read something about pointers...here is a part of my code, can anybody tell me whats wrong?
The error is the one in the headline...


char DATENZEILE[16];


void main()
{
strcpy (DATENZEILE, "Funktionstest ");

for (m = 0; m < 16; ++m)
{
delay_ms(1);
if (y_POS == 1)
{
output_d( 0x80 + m ); //Erste Zeile
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}
if (y_POS == 2)
{
output_d( 0xC0 + m ); //Zweite Zeile
output_low(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}

delay_ms(1);
output_d(DATENZEILE[m]);
output_high(R_S);
output_low(R_W);
output_high(ENABLE);
delay_us(10);
output_low(ENABLE);
}
}
}
inservi



Joined: 13 May 2007
Posts: 128

View user's profile Send private message

PostPosted: Fri Jun 01, 2007 7:11 am     Reply with quote

Hello,

Here is the sources formatted well with the tag “code”?

Code:

char DATENZEILE[16];

void main(){
  strcpy (DATENZEILE, "Funktionstest ");
  for (m = 0; m < 16; ++m){
    delay_ms(1);
    if (y_POS == 1){
      output_d( 0x80 + m ); //Erste Zeile
      output_low(R_S);
      output_low(R_W);
      output_high(ENABLE);
      delay_us(10);
      output_low(ENABLE);
    }
    if (y_POS == 2){
      output_d( 0xC0 + m ); //Zweite Zeile
      output_low(R_S);
      output_low(R_W);
      output_high(ENABLE);
      delay_us(10);
      output_low(ENABLE);
    }
    delay_ms(1);
    output_d(DATENZEILE[m]);
    output_high(R_S);
    output_low(R_W);
    output_high(ENABLE);
    delay_us(10);
    output_low(ENABLE);   
  }
}


The first thing is an unbalanced '}'

Then I added this arbitrary header before your code :
Code:

#include <18F4685.h>
#device adc=8

#FUSES NOWDT                   //No Watch Dog Timer
#FUSES WDT128                  //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                      //High speed Osc (> 4mhz)
#FUSES NOPROTECT               //Code not protected from reading
#FUSES BROWNOUT                //Reset when brownout detected
#FUSES BORV45                  //Brownout reset at 2.0V
#FUSES PUT                     //Power Up Timer
#FUSES NOCPD                   //No EE protection
#FUSES STVREN                  //Stack full/underflow will cause reset
#FUSES NODEBUG                 //No Debug mode for ICD
#FUSES NOLVP                   //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                   //Program memory not write protected
#FUSES NOWRTD                  //Data EEPROM not write protected
#FUSES NOIESO                  //Internal External Switch Over mode enabled
#FUSES FCMEN                   //Fail-safe clock monitor enabled
#FUSES NOPBADEN                //PORTB pins are configured as analog input channels on RESET
#FUSES BBSIZ4K                 //4K words Boot Block size
#FUSES NOWRTC                  //configuration not registers write protected
#FUSES NOWRTB                  //Boot block not write protected
#FUSES NOEBTR                  //Memory not protected from table reads
#FUSES NOEBTRB                 //Boot block not protected from table reads
#FUSES NOCPB                   //No Boot Block code protection
#FUSES LPT1OSC                 //Timer1 configured for low-power operation
#FUSES MCLR                    //Master Clear pin enabled
#FUSES XINST                   //Extended set extension and Indexed Addressing mode enabled

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

int m, y_POS ;
#define R_S pin_A0
#define R_W pin_A0
#define ENABLE pin_A0



After that, it is compiled right with my V4.039.

Could-you give the line where the error occur ?

dro
_________________
in médio virtus
Richi-d
Guest







PostPosted: Fri Jun 01, 2007 10:18 am     Reply with quote

Hi,
What I posted is not the complete code- it´s clear that I have to declare the variables and so on...
The error occours in the

Code:
    output_d(DATENZEILE[m]);


line
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Jun 01, 2007 10:30 am     Reply with quote

Quote:
with the new 4.xxx not.

You need to post the exact version.
Richi-d
Guest







PostPosted: Mon Jun 04, 2007 10:18 am     Reply with quote

The version now is PCH 4.018
Richi-d
Guest







PostPosted: Tue Jun 05, 2007 6:36 am     Reply with quote

Now I updated the compiler to the newest version- no change !! Has no one an answer?? Why does the code work with the old compiler 3.018?
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue Jun 05, 2007 7:26 am     Reply with quote

Try to be exact!
For example always mention the version number, a reference to 'the newest version' is not something we can check as there are new releases almost every week.
Another example is that you said it is working in v3.1xx and now you mention the old working version is v3.018. This doesn't match, so again we can't check. Which was the working version?

You haven't posted a small and complete program that we can copy paste into our compiler. This leaves us to guessing. Inservi has been kind enough to extended your given code so it can be compiled and he didn't get the error. Have you tried compiling Inservi's code? Does that compile for you as well? Have you studied the differences in Inservi's code and your program?

Please remember that we are just users like you are. We are here to help each other but we are not going to do your work for you. You will get much better and quicker responses when you make it easy for us to reproduce your problem. For more hints and tips on how to post in this forum I suggest you read the sticky topic on top of this forum.
Guest








PostPosted: Tue Jun 05, 2007 11:47 am     Reply with quote

Meanwhile I found the error-

This is wrong:

void Write_Display_Data_ZEILE ( y_POS, DATENZEILE )


This is right:

void Write_Display_Data_ZEILE ( y_POS )

It seams that the new version doesn`t allow to define the array"DATENZEILE" as global and to give it in the function additional.
[/code]
Richi-d
Guest







PostPosted: Tue Jun 05, 2007 11:50 am     Reply with quote

But now I have a new problem: When the programm runs over this line:
Code:

   strcpy (DATENZEILE, "Kein Modul      ");


the Global Interrupt Bit is set to 0...

any ideas?
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue Jun 05, 2007 12:14 pm     Reply with quote

Anonymous wrote:
Meanwhile I found the error-

This is wrong:

void Write_Display_Data_ZEILE ( y_POS, DATENZEILE )


This is right:

void Write_Display_Data_ZEILE ( y_POS )

It seams that the new version doesn`t allow to define the array"DATENZEILE" as global and to give it in the function additional.
Conclusion: We couldn't find the error because the error was in a part of your program that you didn't show us. This happens many times in this forum and that's why we ask again and again for a _complete_ example program showing your problem.


Quote:
But now I have a new problem: When the programm runs over this line:
Code:

strcpy (DATENZEILE, "Kein Modul ");


the Global Interrupt Bit is set to 0...

any ideas?
..... where is the complete example program ???

From the little you have given us I can see one bug:
strcpy() copies the whole string up to and _including_ the terminating zero. Here you copy 17 characters to a 16 byte buffer. The buffer overflow will cause unpredictable errors.
Richi-d
Guest







PostPosted: Tue Jun 05, 2007 2:15 pm     Reply with quote

I only count 16 characters, I tested it with:
Code:

char   DATENZEILE[17];
   


No change...

To your comments regarding missing code- I`m sorry, in this case it was relevant, but most time users list here 3 pages full of code- who has the time to study all this masses of information?
So I try to keep it short as possible.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jun 05, 2007 2:46 pm     Reply with quote

Quote:
But now I have a new problem: When the programm runs over this line:
strcpy (DATENZEILE, "Kein Modul ");
the Global Interrupt Bit is set to 0...

This thread discusses the problem:
http://www.ccsinfo.com/forum/viewtopic.php?t=25535
Guest








PostPosted: Sat Jun 09, 2007 1:49 pm     Reply with quote

I'm also getting this error "Previous identifier must be a pointer"

I'm running PCM 4.032

I have numerous arrays, but for some reason one is singled out for this error.

The variable is declared with global scope:

Code:
unsigned char MGTstatus[MAX];


Any references like these cause the error:
Code:

MGTstatus[i] |= TIMEOUT;
if (MGTstatus[i] & SUPERVISORY) {}


Whereas these don't cause errors:
Code:

*(MGTstatus+i) |= TIMEOUT;
if (*(MGTstatus+i) & SUPERVISORY) {}


Additionally, declaring a local corrects the error:
Code:

unsigned char *statusMGT;
statusMGT = MGTstatus;

statusMGT[i] &= ~TIMEOUT;


I've made these edits to get my project to build for delivery by monday, but it's not pretty 8-(

I've tried declaring this array variable as a global, as a local to main, volatile, static, etc, it doesn't seem to matter.

I did elliminate the error from occurrences inside a #SEPERATE function that used it.
I made it an argument to the function and used a different name inside the function.

There were also changes in the error based on naming with leading capital letters.

This is quite odd, and more than a little unpleseant to have it occurr on a weekend when I'm pushing for delivery before monday.

Hopefully someone has sorted this all out.

Thanks for any help!

johnea
johnea



Joined: 09 Jun 2007
Posts: 2

View user's profile Send private message

PostPosted: Sat Jun 09, 2007 1:51 pm     Reply with quote

Somehow I managed to make the previous post without being logged in.

This reply is so I can get reply notice emails.

Thanks Again for any insight!!!

johnea
johnea



Joined: 09 Jun 2007
Posts: 2

View user's profile Send private message

PostPosted: Sun Jun 10, 2007 3:14 pm     Reply with quote

I uncovered the source of these difficulties.

There was a preprocessor symbol defined that only differed from the variable name in case: i.e.
Code:
#define MGTSTATUS


Changing the variable name to differ from the preprocessor name fixed the error.

That's it for now...

johnea
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