10
如何在C ++类的内存结构中创建一个“空格”?
问题 在低级别的裸机嵌入式环境中,我想在内存中以C ++结构创建一个空白且没有任何名称的名称,以禁止用户访问此类内存位置。 现在,我通过放置一个丑陋的uint32_t :96;位域(可以方便地代替三个词)来实现它,但是它会引起GCC的警告(位域太大,无法容纳在uint32_t中),这是非常合理的。 虽然可以正常工作,但是当您要分发包含数百种警告的库时,它并不是很干净。 我该怎么做呢? 为什么首先存在问题? 我正在从事的项目包括定义整个微控制器系列(STMicroelectronics STM32)的不同外设的存储器结构。为此,结果是一个类,其中包含多个结构的联合,这些结构定义了所有寄存器,具体取决于目标微控制器。 下面是一个非常简单的外设的简单示例:通用输入/输出(GPIO) union { struct { GPIO_MAP0_MODER; GPIO_MAP0_OTYPER; GPIO_MAP0_OSPEEDR; GPIO_MAP0_PUPDR; GPIO_MAP0_IDR; GPIO_MAP0_ODR; GPIO_MAP0_BSRR; GPIO_MAP0_LCKR; GPIO_MAP0_AFR; GPIO_MAP0_BRR; GPIO_MAP0_ASCR; }; struct { GPIO_MAP1_CRL; GPIO_MAP1_CRH; GPIO_MAP1_IDR; GPIO_MAP1_ODR; GPIO_MAP1_BSRR; GPIO_MAP1_BRR; GPIO_MAP1_LCKR; uint32_t :32; GPIO_MAP1_AFRL; GPIO_MAP1_AFRH; uint32_t :64; }; struct { uint32_t :192; GPIO_MAP2_BSRRL; GPIO_MAP2_BSRRH; uint32_t …