are you suggesting the compiler generated code for accessing the bitfeilds is less size efficient than doing it manually? I would be suprised if that was the case ?
On 27 Oct 2016 08:05, "Hauke Petersen" <[email protected]> wrote: > Hi Neil, hi Kees, > > though named bitfields are kind of nice when it comes to code readability, > they behave very poorly when it comes to code size. This is especially true > for register maps, as these are typically volatile. For this reason, we > don't use them in RIOT and I strongly advice not to use those. > > As example I was able to save several 100 bytes of ROM when removing the > named bitfield use from the samr21s peripheral drivers. > > Cheers, > Hauke > > > > On 26.10.2016 21:24, Kees Bakker wrote: > >> 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; >> >> > _______________________________________________ > devel mailing list > [email protected] > https://lists.riot-os.org/mailman/listinfo/devel >
_______________________________________________ devel mailing list [email protected] https://lists.riot-os.org/mailman/listinfo/devel
