ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
1293528 Топик полностью
Nikolay_Po (19.03.2023 11:39, просмотров: 158) ответил Codavr на Захотелось представления данных как в виде байтов, так и в виде битов. Имеем 8-битную систему. Нарисовал вот такое.
У меня так: 
    typedef union {
        struct __attribute__((packed)) {
            uint32_t RecNum; //Sequence number of record
            float Offset[4];
            float Multiplier[4];
            uint8_t ModNum; //Module number
        } Par; //Access by parameter
        uint8_t Bytes[sizeof (uint32_t) + sizeof (float) * 4 * 2 + sizeof (uint8_t)]; //37 bytes as byte array
    } EEPROMcfg_t;


Добавляю атрибут упаковки, чтобы компилятору не вздумалось оптимизировать выравниванием. С битами поступаю так же, только считаю размер байт совсем вручную:


    typedef union {//Module status structure
        struct __attribute__((packed)) {
            //A byte of operation and control related flags
            unsigned Cmd : 1;
            unsigned ADCexc : 1;
            unsigned ADCsmp : 1;
            unsigned ADCrun : 1;
            unsigned ADCcycle : 1;
            unsigned ADCfrRdy : 1;
            unsigned TxReq : 1;
            unsigned Tx : 1;
            //A byte of auxiliary flags
            unsigned RegRead : 1;
        } N; //Access to flags by name
        uint8_t Byte[2]; //Status as bytes
    } Status_t;