- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 ARM Cortex-M3 架构 (LPC1769) 上开发一个共享数据库,我想知道我是否需要互斥锁或锁定写入。
32 位浮点读/写是原子的吗?
-- 编辑--我为 uint32_t 和 float 添加了写函数的反汇编:
00000000 <setSharedDataUint>:
0: b480 push {r7}
2: b083 sub sp, #12
4: af00 add r7, sp, #0
6: 4603 mov r3, r0
8: 6039 str r1, [r7, #0]
a: 71fb strb r3, [r7, #7]
c: 79fb ldrb r3, [r7, #7]
e: 4a05 ldr r2, [pc, #20] ; (24 <setSharedDataUint+0x24>)
10: 00db lsls r3, r3, #3
12: 4413 add r3, r2
14: 683a ldr r2, [r7, #0]
16: 605a str r2, [r3, #4]
18: 370c adds r7, #12
1a: 46bd mov sp, r7
1c: f85d 7b04 ldr.w r7, [sp], #4
20: 4770 bx lr
22: bf00 nop
24: 00000000 .word 0x00000000
24: R_ARM_ABS32 .bss.dataArray
00000000 <setSharedDataFloat>:
0: b480 push {r7}
2: b083 sub sp, #12
4: af00 add r7, sp, #0
6: 4603 mov r3, r0
8: 6039 str r1, [r7, #0]
a: 71fb strb r3, [r7, #7]
c: 79fb ldrb r3, [r7, #7]
e: 4a05 ldr r2, [pc, #20] ; (24 <setSharedDataFloat+0x24>)
10: 00db lsls r3, r3, #3
12: 4413 add r3, r2
14: 683a ldr r2, [r7, #0]
16: 605a str r2, [r3, #4]
18: 370c adds r7, #12
1a: 46bd mov sp, r7
1c: f85d 7b04 ldr.w r7, [sp], #4
20: 4770 bx lr
22: bf00 nop
24: 00000000 .word 0x00000000
24: R_ARM_ABS32 .bss.dataArray
它们看起来相同,这让我假设 32 位浮点写入也是原子的
最佳答案
参见 Architecture Reference Manual具体细节:简而言之,任何对齐 32 位内存访问都是原子的,因为结果要么是旧值的所有 4 个字节,要么是新值的所有 4 个字节,并且永远不会两者的一些混合。未对齐的访问不有此保证。
这是针对纯读取或写入的——对于任何类型的读取-修改-写入序列,您需要一个加载/存储独占循环来使指令序列看起来是原子的。类似地,如果共享数据指针在读取它和读取/写入实际值到它指向的位置之间容易发生变化,为了安全,您需要将整个操作包装在一个独占序列中。
关于c - ARM 皮质 M3 : Atomic Writes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563511/
我正在调试一段使用 Keil 编译器而不是 ARM-GCC 导致崩溃的代码。我不熟悉代码的历史,但是当我阅读更多内容时,我意识到代码中肯定至少存在严格的别名违规。然而,首先将我吸引到代码的错误是运行此
我正在尝试让 cortex m4 处理器休眠不到一秒钟。我希望能够告诉它进入休眠状态,然后在一秒钟后,或者当按下按钮时,从我停下的地方继续。我查看了引用手册,VLPS 模式看起来很适合我的需要。我不知
我正在按照 micromouseonline 上提供的指南进行操作。 com/2010/07/14/stm32 中的位带。我正在使用 IAR EWARM 和 Cortex M3。一切正常,但我无法在给
我使用的是 NXP LPC1769,它包含一个 Cortex-M3。到目前为止,我只是从 JTAG 接口(interface)访问它,但现在我必须以相反的方式进行访问。 IT 例程应该读取内存的某些部
我正在 ARM Cortex-M3 架构 (LPC1769) 上开发一个共享数据库,我想知道我是否需要互斥锁或锁定写入。 32 位浮点读/写是原子的吗? -- 编辑--我为 uint32_t 和 fl
我想知道是否可以在 STM32F407(1MB 闪存,196kB RAM)等处理器上交叉编译用 Ocaml 编写的应用程序? (不含操作系统)。 我已阅读Cross-compiling ocaml a
我需要编辑 ISR 的返回地址。处理中断后,ISR 应该返回到特定地址,无论它来自哪里。这是为了促进快速系统重置。此功能无法在普通固件中实现,因为时间太紧,无法频繁检查某处的标志。 我尝试过编辑 IS
我正在尝试使用 cortex M4 处理器(我买了一 block Atmel SAM4C 板)混合 C 代码和 asm。 我正在尝试一个不起作用的简单代码(但它确实可以编译)。 我唯一的调试选项是使用
在 lirc 上需要你的帮助。我想使用 lirc 来解码 ir 信号。我正在使用基于带有 2.6.37 内核的 Cortex A8 的自定义板,并且通过串行端口接收 IR。当我按下红外 Remote
在 OS X 上使用带有 Vex Cortex 的普渡机器人操作系统。尝试使用附带的 uniflash 程序对其进行刷新,但在刷新过程中抛出错误。这是日志。 CC -I../include -I../
我正在使用以下 CPU:Stellaris LM4F120H5QR 微 Controller 。这个CPU包含一个MPU,我想利用这个东西。但是,在非特权模式下,许多寄存器不再可访问,而且我似乎找不到
我有一些 C 代码可以逐位处理数据。简化示例: // input data, assume this is initialized uint32_t data[len]; for (uint32_t
我正在尝试使用 LPCOpen 提供的 VCOM 示例测试我的 LPC4370 cortex-m4 micro(LPC Link2 评估板)和我的计算机之间的通信。我只是想从 matlab 发送数据,
据我了解,ARM Cortex-M CPU 始终处于 Thumb 状态,这意味着: Thumb state indicated by program counter being odd (LSB =
我是一名优秀的程序员,十分优秀!