- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在低级裸机嵌入式上下文中,我想在内存中创建一个空白空间,在 C++ 结构中并且没有任何名称,以禁止用户访问这样的内存位置.
现在,我通过放置一个丑陋的 uint32_t :96;
来实现它bitfield 可以方便地代替三个单词,但它会从 GCC 发出警告(Bitfield too large to fit in uint32_t),这是非常合法的。
虽然它工作正常,但当您想要分发包含数百个此类警告的库时,它不是很干净......
我该如何正确地做到这一点?
我正在进行的项目包括定义整个微 Controller 系列 (STMicroelectronics STM32) 的不同外设的内存结构。为此,结果是一个包含多个结构 union 的类,这些结构定义了所有寄存器,具体取决于目标微 Controller 。
一个非常简单的外围设备的简单示例如下:通用输入/输出 (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 :160;
};
};
所有GPIO_MAPx_YYY
是一个宏,定义为 uint32_t :32
或寄存器类型(专用结构)。
在这里您可以看到 uint32_t :192;
效果很好,但会触发警告。
我可能已经用几个 uint32_t :32;
替换了它(此处为 6),但我有一些极端情况,我有 uint32_t :1344;
(42) (除其他外)。因此,即使结构生成是脚本化的,我也不愿在 8k 其他行之上添加大约 100 行。
确切的警告信息类似于: width of 'sool::ll::GPIO::<anonymous union>::<anonymous struct>::<anonymous>' exceeds its type
(我就是喜欢它的阴暗面)。
我宁愿不通过简单地删除警告来解决这个问题,而是使用
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-WTheRightFlag"
/* My code */
#pragma GCC diagnostic pop
可能是一个解决方案...如果我找到 TheRightFlag
.但是,正如 this thread 中指出的那样, gcc/cp/class.c
用这个悲伤的代码部分:
warning_at (DECL_SOURCE_LOCATION (field), 0,
"width of %qD exceeds its type", field);
这告诉我们没有 -Wxxx
标记以删除此警告...
最佳答案
C++ 方式怎么样?
namespace GPIO {
static volatile uint32_t &MAP0_MODER = *reinterpret_cast<uint32_t*>(0x4000);
static volatile uint32_t &MAP0_OTYPER = *reinterpret_cast<uint32_t*>(0x4004);
}
int main() {
GPIO::MAP0_MODER = 42;
}
由于 GPIO
命名空间,您可以自动完成,并且不需要虚拟填充。甚至,更清楚发生了什么,因为您可以看到每个寄存器的地址,您根本不必依赖编译器的填充行为。
关于c++ - 如何在 C++ 类内存结构中创建 "spacer"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53109888/
如何在一行中的两个元素之间使用 Spacer 填充,让一个元素在行的开头,另一个元素在行尾? Row { Text("Start") Spacer(modifier = Modifie
这是我的 fiddle : http://jsfiddle.net/6yU6N/ 这是我想要完成的模型: 如您所见,我想在页眉和第一个“选择容器”之间添加一个小空间。并在每个拾取容器之间添加一个空间。
我正在使用 reportlab 3.2.0。 SPACER = Spacer(0, 10) buff = BytesIO() doc = SimpleDocTemplate(buff, rightMa
我正在尝试用文本文件的内容填充 textInput 间隔符。需要通过悬停菜单选择上述文本文件,这是我第一次使用。界面很容易设置,但填充文本框的机制比我预期的要复杂。我可能错过了一些非常简单的东西,因为
我已经阅读了很多关于间隔 View 的文章——它们在使用所有这些自动布局方面似乎非常方便。 我理解它们背后的所有概念,这很好......我现在正想和它们一起练习,但在我开始之前,我发现自己陷入了一个更
我正在尝试创建一个个人资料页面,其中底部有一个包含各种选项的表单。但是,当我将 Spacer() 插入 VStack 时,表单不会像它应该做的那样移动到屏幕底部。我尝试用文本替换表单,效果很好,移动到
这个问题是关于我要使用spacer div伪造的最大保证金。 我目前正在与cms一起创建一个网站。 网站上的每一行都有一张图片。用户可以在后端指定百分比值,以为每张图片自定义左边界。 为每个图像设置m
在 Qt 中,如果你希望单个布局中的小部件在物理上分开,你可以在它们之间添加一个间隔符,我们在 GTKmm 中有类似的东西吗? 这里标签(Gtk::Label m_label;)和按钮(Gtk::Bu
我正在查看 Material.io Basil design study ,我正在尝试弄清楚如何让 Flutter Widget 像 Spacer 一样工作,但有内容。 最佳答案 您可以将 Custo
问题 在低级裸机嵌入式上下文中,我想在内存中创建一个空白空间,在 C++ 结构中并且没有任何名称,以禁止用户访问这样的内存位置. 现在,我通过放置一个丑陋的 uint32_t :96; 来实现它bit
我更喜欢使用 Spacer 在 View 之间添加一些填充,有时您可以将此空间作为填充添加到 View 中。所以我的问题是使用 Spacers 与使用良好的旧填充值相比是否存在任何性能缺陷? 最佳答案
Bootstrap 4.1 documentation on spacing说我可以扩展 $spacers 变量(由边距和填充类使用),但它没有解释如何。 任何人都可以分享官方文档的链接吗?如果那不存
如何在 VStack 中获得空间以将按钮固定在底部? ScrollView { VStack() { Text("Title_1")
我大致有: var body: some View { HStack(alignment: .top) { AvatarView() MessageBubble
如果容器(VStack)与底部黑色 View (如 iPhone 11 Pro Max)不冲突,如何设置 rgb View (100pt)之间的默认间距。 但是 如果没有 100p 高度的空间,则会缩
我一直想知道是否有任何技术可以像 Flex/MXML 一样使用 HTML/CSS。我的意思是,在 MXML 中,HBox、VBox 和 Spacer 是全局使用的,并且它们的行为是可预测的。但是在 H
这是一个非常基本的 Material Design Lite 问题,但这让我发疯了。在以下示例中来自 MDL examples website , 具有 mdl-layout-spacer 类的 di
我试图在我的表格 View Controller 上的表格自定义 View 单元格之间留出空间。例如,对于创建的每个单元格,它都是一个一个地堆叠起来并且没有边距。例如,在 Facebook iPhon
我有一个 ListView ,列表的每一行都包含一个带有一些 TextView 和图像的 HStack,如下所示: HStack{ Text(group.name) Spacer()
我想我可能会遗漏一些东西,有没有办法在 Compose Beta01 中实现“填充其余空间”而无需额外的 Box包裹垫片的元素? Spacer不幸的是,没有权重修饰符。 Column( mod
我是一名优秀的程序员,十分优秀!