ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
28 апреля
1350488 Топик полностью
Chum_A (13.09.2023 09:02, просмотров: 268) ответил POV на Ну я вот ряд небольших проектов под арм переводил.. как минимум этот bool выглядит красиво и уместно. Я люблю строгую типизацию, чтобы было понятно что возвращается.
Колхоз, имитация типа bdata - битовых переменных архитектуры MCS-51 через bitband на Cortex-M3 для "Кайла" (в gcc напрямую не прокатит) 

В коде объявляется переменная

volatile BDATA my_bData;

В в его заголовке соответственно:

#include "Bdata.h"
extern volatile BDATA my_bData;
#define my_data (*((uint32_t *)&my_bData))
#define my_bit_X my_bData.BD0
#define my_bit_Y my_bData.BD1

Собственно в Bdata.h:

typedef struct {
uint32_t BD0 : 1; // .0
uint32_t BD1 : 1; // .1
uint32_t BD2 : 1; // .2
uint32_t BD3 : 1; // .3
uint32_t BD4 : 1; // .4
uint32_t BD5 : 1; // .5
uint32_t BD6 : 1; // .6
uint32_t BD7 : 1; // .7
uint32_t BD8 : 1; // .8
uint32_t BD9 : 1; // .9
uint32_t BD10 : 1; // .10
uint32_t BD11 : 1; // .11
uint32_t BD12 : 1; // .12
uint32_t BD13 : 1; // .13
uint32_t BD14 : 1; // .14
uint32_t BD15 : 1; // .15
uint32_t BD16 : 1; // .16
uint32_t BD17 : 1; // .17
uint32_t BD18 : 1; // .18
uint32_t BD19 : 1; // .19
uint32_t BD20 : 1; // .20
uint32_t BD21 : 1; // .21
uint32_t BD22 : 1; // .22
uint32_t BD23 : 1; // .23
uint32_t BD24 : 1; // .24
uint32_t BD25 : 1; // .25
uint32_t BD26 : 1; // .26
uint32_t BD27 : 1; // .27
uint32_t BD28 : 1; // .28
uint32_t BD29 : 1; // .29
uint32_t BD30 : 1; // .30
uint32_t BD31 : 1; // .31
} BDATA __attribute__((bitband));

В итоге доступны групповые операции через my_data (как и в MCS-51) и битовые операции присвоения и сравнения: my_bit_X = 1, my_bit_Y= 0, if( my_bit_X )