This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to program sbits which can be indexed ?

I would like to to use the bit addressable memory range (bdata) with an index variable as in the following example:

#define SETBIT(I) WAIT_4_MUTEX; flags^I=1; FREE_MUTEX;

unsigned char bdata flags;

func () {
unsigned char i;
  for (i=0; i < MAX_CELL; i++) {
    // do interesting stuff
    SETBIT(i);
  }
}

This construction of coarse gives a lval error on the use of the SETBIT macro.

My current fall back are the macro's:

#define SETBIT(I) base |= ((unsigned char) (1 << I))
#define CLEARBIT(I) base &= ~((unsigned char) (1 << I))

But still have the feeling that I am wasting cycles on the shift operators in these two macro's and because this is within a mutex region the timing might become an issue.

Is there a better way to set/reset the i-th bit of a bit addressable variable ?

Parents
  • The switch statement can be fast for some processors, that have efficient methods to call a jump table. But such processors normally also have a barrel shifter in which case they can shift n steps in constant time.

    Easiest is if the caller can supply a constant value to or in, or the mask for clearing.

Reply
  • The switch statement can be fast for some processors, that have efficient methods to call a jump table. But such processors normally also have a barrel shifter in which case they can shift n steps in constant time.

    Easiest is if the caller can supply a constant value to or in, or the mask for clearing.

Children
  • The switch statement can be fast for some processors, that have efficient methods to call a jump table.

    JMP @A+DPTR ?

    And if the compiler isn't clever enough to translate the switch/case structure this way, there is still the option of writing an assembly function.

    This approach also works for more than 8 bits without any further effort, while the lookup table approach will need additional decision steps in such cases.