- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 gcc 的 CMSIS 定义中,您可以找到如下内容:
static __INLINE void __DMB(void) { __ASM volatile ("dmb"); }
我的问题是:如果内存屏障不在破坏列表中声明“内存”,那么它有什么用处?
这是 core_cm3.h 中的错误还是 gcc 在没有任何额外帮助的情况下应该正确运行的原因?
最佳答案
我用 gcc 4.5.2(用 LTO 构建)做了一些测试。如果我编译这段代码:
static inline void __DMB(void) { asm volatile ("dmb"); }
static inline void __DMB2(void) { asm volatile ("dmb" ::: "memory"); }
char x;
char test1 (void)
{
x = 15;
return x;
}
char test2 (void)
{
x = 15;
__DMB();
return x;
}
char test3 (void)
{
x = 15;
__DMB2();
return x;
}
使用arm-none-eabi-gcc -Os -mcpu=cortex-m3 -mthumb -c dmb.c
,然后从arm-none-eabi-objdump -d dmb。 o
我明白了:
00000000 <test1>:
0: 4b01 ldr r3, [pc, #4] ; (8 <test1+0x8>)
2: 200f movs r0, #15
4: 7018 strb r0, [r3, #0]
6: 4770 bx lr
8: 00000000 .word 0x00000000
0000000c <test2>:
c: 4b02 ldr r3, [pc, #8] ; (18 <test2+0xc>)
e: 200f movs r0, #15
10: 7018 strb r0, [r3, #0]
12: f3bf 8f5f dmb sy
16: 4770 bx lr
18: 00000000 .word 0x00000000
0000001c <test3>:
1c: 4b03 ldr r3, [pc, #12] ; (2c <test3+0x10>)
1e: 220f movs r2, #15
20: 701a strb r2, [r3, #0]
22: f3bf 8f5f dmb sy
26: 7818 ldrb r0, [r3, #0]
28: 4770 bx lr
2a: bf00 nop
2c: 00000000 .word 0x00000000
很明显,__DBM()
仅插入dmb
指令,并且需要DMB2()
来实际强制编译器刷新值缓存在寄存器中。
我想我发现了 CMSIS 错误。
关于gcc - Cortex-M3 的 CMSIS 库中的数据内存屏障 (DMB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6751605/
CMSIS文件和外设驱动文件中写的是什么类型的代码。我怎样才能区分它们?任何例子都会更有帮助。谢谢你。 最佳答案 “CMSIS”是 Cortex Microcontroller Software In
这个问题已经有答案了: Storing third-party libraries in source control (17 个回答) Arguments for and against inclu
我正在尝试在 STM32F407 微 Controller 上实现 60kHz 带通滤波器,但遇到了一些问题。我在 MATLABs fdatool 的帮助下生成了过滤器,然后也在 MATLAB 中对其
最近我一直在检查 CMSIS DSP 复杂数学函数库,我看到了一些我无法完全理解的东西,因此我是关于 SO 的第一篇文章。 我无法理解的是 he11 复杂的点积函数如何产生正确的结果?该功能可在此处找
我下载了 CMSIS 版本 3,但在使用时遇到了一些问题。主要问题在startup_device.s。我不知道如何正确完成该文件,也找不到任何好的文档。有人尝试过使用这个cmsis版本吗?如何进行?正
我正在将产品移植到基于 CMSIS 的 RTOS,该产品需要获取 32 位整数形式的线程 ID。然而,CMSIS 线程 id 类型 (osThreadId) 是完全不透明的,类型定义为 struct
我想使用 CMSIS 中的 DSP 功能。我正在使用 STM32CubeIDE,我的目标板是 ST32F411RE Discovery。将 CMSIS DSP 与 Keil uVision 一起使用非
我正在使用 CMSIS API在我的 ARM Cortex-M CPU 的 C 程序中。 CMSIS 将 NVIC_DisableIRQ 函数定义为 __STATIC_INLINE void __NV
我正在使用 STM32F103C8T6 并希望使用 CMSIS,which is essentially just register definitions and no code ,让我的生活更轻松
我正在尝试制作一个使用各种功能的 C 程序,然后通过连接到 LPCXpresso 1769 的 DIP 开关,它必须选择要执行的功能(例如 00 二进制计数器 01 旋转 LED 等)。现在,我已经做
我已经从 8 位裸机寄存器转向,并且必须学习一些新的 C Kungfu 才能理解 CMSIS 核心方法。 我这里有一段来自 ARM Cortex M 供应商的外设访问层的代码片段。他们创建了这个 SN
FreeRTOS 和 CMSIS-RTOS 有什么区别?谁能解释这两个 RTOS 的相似之处或不同之处? 最佳答案 我认为这里的混淆来源是存在 CMSIS-RTOS API( v1 和 v2 ),并且
在 gcc 的 CMSIS 定义中,您可以找到如下内容: static __INLINE void __DMB(void) { __ASM volatile ("dmb"); } 我的问题是:如果内存
我在 stm32f103rc 中尝试 DMA。我按照这个教程https://letanphuc.net/2014/06/how-to-use-stm32-dma/并使用 CMSIS CORE 编写了我
我编写了一个使用 CMSIS DSP 库中的 arm_cfft_f32 函数的代码。如何将 CMSIS DSP 库添加到我的项目的 Makefile 中? STM32CubeMX为STM32F407芯
我们在 STM32F407 板上的 CMSIS 和 FreeRTOS 中遇到互斥锁问题。 有两个线程可以通过 UART 访问硬件 radio 。我们正在使用互斥体来确保一次只有一个线程可以与 radi
我使用 MCB1700 评估板。Keil为开发者提供了RL-ARM库。但几个小时前我创建了 CMSIS Librariy。它还具有用于 USB、以太网等的 header 和 c 文件(带有示例)。“R
所以我在 STM32F427 微 Controller 上使用 CMSIS-RTOS 邮件队列机制和 Keil uVision 5.0.5 运行在 180MHz。并且不时地使用 osMailFree(
我正在尝试为我的 Cortex-M0 嵌入式处理器设置 CLion C 工作环境。我是 CLion 和 cmake 的新手,我已经为这个问题苦苦挣扎了好几天: 问题出现在 CMSIS 中包含的 cor
您好,我想知道让 ARM Cortex M0+ 进入深度 sleep 的正确方法是什么。特别是我正在使用 CMSIS-RTOS RTX。 我的 IRQ 处理方式是 ISR 只是设置 OS Signal
我是一名优秀的程序员,十分优秀!