Campo de bits
La forma que tiene C de poner nombre a bits sueltos de un entero dentro de un struct: cómoda de leer y casi sin especificar en cuanto a cómo queda en memoria.
Con unsigned ready : 1; un miembro del struct pasa a medir un bit, y reg.ready = 1 parece una asignación cualquiera. Es tentador para describir un registro de hardware. El problema es que el estándar deja al compilador el orden de los bits, el relleno y la unidad de almacenamiento, así que el mismo struct puede quedar distinto entre compiladores o entre arquitecturas con diferente endianness.
Además, cada escritura es una lectura-modificación-escritura, lo que puede borrar bits de estado que se limpian al leerse. Por eso CMSIS y la mayoría de cabeceras de fabricantes usan máscaras y desplazamientos, y MISRA C restringe mucho los campos de bits.