[Icc-avr] Error message
Robertson, Derek
Derek.Robertson at logitech.uk.com
Tue Sep 4 01:13:25 PDT 2007
Presumably the myCar, myVar in this post is a typing error?
Ton, I get your 'Object' approach, but I don't understand what this is for
#idndef __AABB_H__ /* Avoids multiple inclusion */
#define __AABB_H__
I feel there may be a moment of enlightenment coming on! :o)
________________________________
From: Jaspers, Ton [mailto:t.jaspers at cpseurope.com]
Sent: 04 September 2007 08:40
To: benra at imt.liu.se; Discussion list for ICCAVR and ICCtiny Users. You do NOT need to subscribeto icc-announce if you are a member of this.
Subject: RE: [Icc-avr] Error message
Close but I rather use this:
In main file:
unsigned char myVar=0;
In other files:
extern unsigned char myCar ; /* no initialisation, it is initialised where it ios defined only */
Further more I would suggest to put the external in a header file.
If the declaration is in "aabb.c" then put the external in "aabb.h" like this:
#idndef __AABB_H__ /* Avoids multiple inclusion */
#define __AABB_H__
extern unsigned char myCar ;
#endif /* end of #ifndef __AABB_H__ , at end of file */
Personally I hate externals. I like to think in objects.
The aabb.c file should provide an access methode (function) to access the myCar variable.
In the "aabb.h" header file it would like something like this:
#idndef __AABB_H__ /* Avoids multiple inclusion */
#define __AABB_H__
unsigned char readMyCar(void) ;
int writeMyCar(unsigned char);
#endif /* end of #ifndef __AABB_H__ , at end of file */
These access methodes provide a well controlled way to access the variable.
The write functions, for example, could perform some range checking and return an error when the value is out of range.
This is how we do it in medical instrument software that has to be scrutenized to the bone.
Cheers, Ton
________________________________
From: icc-avr-bounces at imagecraft.com [mailto:icc-avr-bounces at imagecraft.com] On Behalf Of Bengt Ragnemalm
Sent: dinsdag 4 september 2007 9:08
To: ICC-AVR discussion list
Subject: SV: [Icc-avr] Error message
Sorry, sorry SORRY, I missed the very important word extern in one of the lines! The static should not be there either. Here is how it should be:
In main file:
unsigned char myVar=0;
In other files:
extern unsigned char myCar=0;
Now you can see that the problem is that I have put a predefined value in the second line.
/Bengt
________________________________
Från: John Baraclough [mailto:j_baraclough at zetnet.co.uk]
Skickat: den 3 september 2007 18:32
Till: benra at imt.liu.se; Discussion list for ICCAVR and ICCtiny Users. You do NOT need to subscribe to icc-announce if you are a member of this.
Ämne: Re: [Icc-avr] Error message
Hi Bengt,
You got that message because that is exactly what you have done. Global variables can only be defined in one place in the whole project. Everywhere else you must use the 'extern' keyword.
John
P.S. Last week Richard said he was going away for a "couple of years". I hope he only meant a "couple of weeks", but he has been very quiet.
At 07:50 03/09/2007, you wrote:
I got this error:
!E filename.o(294): multiple define: 'myVar
I did have some problems with multiple defined variables because of a bad #define in a header. But it was not with this variable so I just didn't understand a thing until I found out that I had assigned a value to this global variable and also by mistake assigned it in the place there it was defined as extern. Like this:
In main file:
static unsigned char myVar=0;
In other files:
unsigned char myCar=0;
Richard: Is it possible that this could result in some other error message than "multiple define"? Something like "multiple assigning of predefined value..."
/Bengt
________________________________________________________________
Bengt Ragnemalm Tel +46 13 22 24 97
Research engineer FAX: +46 13 10 19 02
Linköpings Universitet mailto:bengt.ragnemalm at imt.liu.se
Inst. för Medicinsk Teknik Internet: http://www.imt.liu.se <http://www.imt.liu.se/>
S-581 85 Linköping SWEDEN
_______________________________________________
Icc-avr mailing list
Icc-avr at imagecraft.com
http://dragonsgate.net/mailman/listinfo/icc-avr
--------------------------------------------------------
Logitech Ltd is a limited company registered in Scotland. Registration Number: SC42330
Registered Address: Erskine Ferry Road, Old Kilpatrick, Glasgow, G60 5EU, Scotland, UK
--------------------------------------------------------
This message (and any associated files) is intended only for the use of the individual or entity
to which it is addressed and may contain information that is confidential, subject to copyright
or constitutes a trade secret. If you are not the intended recipient you are hereby notified that
any dissemination, copying or distribution of this message, or files associated with this message,
is prohibited. If you have received this message in error, please notify us immediately by replying
to the message and deleting it from your computer.
Messages sent to and from us may be monitored.
Any views or opinions presented are solely those of the author and do not necessarily represent
those of the company.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://dragonsgate.net/pipermail/icc-avr/attachments/20070904/9df8a8e2/attachment-0001.html
More information about the Icc-avr
mailing list