It is common practice in embedded C code to store multiple bits of information into a single variable via the use of bit-fields or bit-mask. The advantage of bit-mask over bit-field is that several bit-masks can be combined into one single bit-mask, allowing the compiler to issue a single instruction to access the variable. On the other hand, the compiler cannot roll consecutive bit-field instructions into one instruction. This results in additional code execution and consequently draws more power to execute the same amount of effective code.
Additional instructions might be executed, depending on the width and/or the number of bits of the bit-field being accessed/modified. The effect increases when the instructions in question are part of a loop/function.
Consecutive instructions accessing the volatile bit-field
variable(s) (such as hardware registers) cannot be combined by the
compiler and hence requires more power & energy to execute.
Use bit-mask instead of bit-field.
#define FLAG_1 1 #define FLAG_2 2 #define FLAG_3 4 #define FLAG_4 8 void functionA(unsigned char variable) { unsigned int i, variable=FLAG_1; if ( variable & FLAG_1) { /* Execute application code */ } if ( variable & FLAG_2) { /* Execute application code */ } if ( variable & FLAG_4) { /* Execute application code */ } } void main(void) { unsigned int variable1 = FLAG_4; /* Execute application code */ variable1|= FLAG_1 | FLAG_2 | FLAG_3; functionA(variable1); }
See the rest of the code examples for all MSP430 devices here!
Want to squeeze a few more nanoAmps out of your application? Leverage the e2e (Engineer-to-Engineer) online community to get all of your ULP questions answered! Or, if you are an Ultra-Low Power pro, give back to the community with your expertise.
Go to MSP430's e2e online forum!
If you are posting on the forums in relation to this rule, try using the tag "ULP_15.1"
For technical support please post your questions at http://e2e.ti.com. Please post only comments about the article Compiler/diagnostic messages/MSP430/1546 here. |