Unfortunately your posting does nto really tell what your problem is. You do not tell what you think what your quoted code should do and what it actually does. As you posted it, it is, well, just some code. It is formally okay and might or might not compile, depending on other code prior in your project.
To all I can figure out by your posting, your problem seems to be not with enum but with a misunderstandig of the way the C compiler works. To be specific: the C preprocessor. None of the four values in the enum is used after your strobe command. So I don't see where the problem is. I'm assuming, that CC2420_CONF_AUTOACK is also in the enum you quoted (the ',' behind CC2420_SRXON indicates that there are more values than only 4 in this enum). So the enum and its members are defined for the processor in the context of the C(++) language. But I may be wrong, as the 'CONF' in the name seems to indicate that it is rather a global compile-time-configuration define than a runtime value. Also, the term 'variable enum' you use is incorrect. An enum is no variable. Enums are constants. To be precise, they are numeric constants of a certain type. The line strobe(CC2420_SXOSCON); is 100% identical to strobe(1); except that the compiler can complain, if the function requires a parameter of type cc2420_register and the value is of a different int type. At runtime, all occurrences of an enum have been replaced by static numerical values. In opposition to the enum declaration, the usage of CC2420_CONF_AUTOACK behind an #if directive is in the context of the c++ preprocessor. The preprocessor just preprocesses your files without knowledge of the final language. (so it treats the enum as any other plain text) It takes defines (done with #define), includes header files (with #include) and does text replacement (based on the defines) as well as some conditional text selection (also based on the defines). your line #if CC2420_CONF_AUTOACK tells the precompiler to include the following text in its output if CC2420_CONF_AUTOACK is true. But the preprocessor has never seen CC2420_CONF_AUTOACK There is no #define CC2420_CONF_AUTOACK anywhere. So the preprocessor might either complain or assume 'false' (usually the second option) In any case, the code you posted will statically include either of the two lines. There is no runtime decision made to execute one or the other. Maybe this is intentional. If so, you'll need to put #define CC2420_CONF_AUTOACK 1 anywhere before in your code to always execute reg |= AUTOACK | ADR_DECODE; or #define CC2420_CONF_AUTOACK 0 to always execute reg &= ~(AUTOACK | ADR_DECODE); I hope, my guesses somehow hit the nail on the head. If not, please be a bit more detailed about what is going wrong (what it does and what you think it should instead). Simple 'this code doesn't work' problems can only be solved if the problem is a formal programming error. JMGross ----- Ursprüngliche Nachricht ----- Von: macosioleon An: [email protected] Gesendet am: 05 Dez 2009 20:35:29 Betreff: [Mspgcc-users] problems with enum variables i am working with a cc2420_const.h file but when i want to compile doesnt work correctly In cc2420_const.h the variable enum is declare at this way. enum cc2420_register { CC2420_SNOP = 0x00, CC2420_SXOSCON = 0x01, CC2420_STXCAL = 0x02, CC2420_SRXON = 0x03, } and at cc2420.c useit as strobe(CC2420_SXOSCON); BUT AFTER THIS LINE DONT WORK THE VARIABLES ENUM +++++++++++++++++++++++++++++++++++++ /* Turn on/off automatic packet acknowledgment and address decoding. */ reg = getreg(CC2420_MDMCTRL0); #if CC2420_CONF_AUTOACK reg |= AUTOACK | ADR_DECODE; #else reg &= ~(AUTOACK | ADR_DECODE); #endif /* CC2420_CONF_AUTOACK */ setreg(CC2420_MDMCTRL0, reg); i am using msp430xF261& what is wrong ? thnx for your help -- View this message in context: http://old.nabble.com/problems-with-enum-variables-tp26658500p26658500.html Sent from the MSP430 gcc - Users mailing list archive at Nabble.com. ------------------------------------------------------------------------------ Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev _______________________________________________ Mspgcc-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mspgcc-users
