[riot-devel] bitfeilds

Kees Bakker kees at sodaq.com
Wed Oct 26 21:24:27 CEST 2016


On 26-10-16 16:52, Neil Jones wrote:
> Hi,
>
> What is RIOT's position on using named bitfields for register
> definitions ? I know they are frown upon as there are no endian
> guarantees in the C standard, personally I don't use them, but the PIC32
> device files supplied by Microchip do include bitfield structures for
> most registers so could make life easier ? (thankfully there are #define
> for most register fields too, if the answer is not to use them).

I can't speak for RIOT, but personally I don't have a problem with them
when they are used for register definitions.

And I know that SAMD21 uses them too in Atmel's CMSIS include files.

In many cases it makes the code much nicer. That doesn't mean the
SAMD21 already uses them a lot. For example, we currently have code
like

     dev(bus)->CTRLA.reg |= SERCOM_SPI_CTRLA_SWRST;
     while ((dev(bus)->CTRLA.reg & SERCOM_SPI_CTRLA_SWRST) ||
            (dev(bus)->SYNCBUSY.reg & SERCOM_SPI_SYNCBUSY_SWRST));
     ...
     while (!(dev(bus)->INTFLAG.reg & SERCOM_SPI_INTFLAG_DRE)) {}
     ...
     dev(bus)->CTRLA.reg &= ~(SERCOM_SPI_CTRLA_ENABLE);


which could use bitfields and be written like this

     dev(bus)->CTRLA.bit.SWRST = 1;
     while ((dev(bus)->CTRLA.bit.SWRST) ||
            (dev(bus)->SYNCBUSY.bit.SWRST)) {}
     ...
     while (!(dev(bus)->INTFLAG.bit.DRE)) {}
     ...
     dev(bus)->CTRLA.bit.ENABLE = 0;

-- 
Kees


More information about the devel mailing list