ARM Cortex M3:原子写入

安东尼·卡拉布罗

我正在开发基于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位浮点写入也是原子的

不是这样的

有关详细信息,请参见《体系结构参考手册》:简而言之,任何对齐的32位内存访问都是原子性的,其含义是结果要么是旧值的所有4个字节,要么是新值的所有4个字节,并且永不混合在两个中。未对齐的访问具有此保证。

这是纯粹的读写操作-对于任何类型的读取-修改-写入序列,您都需要一个load / store-exclusive循环,以使指令序列看起来像原子的。同样,如果共享数据指针在读取和将实际值读/写到它所指向的位置之间可能会在您的脚下改变,则出于安全性的考虑,您需要将整个操作包装在专用序列中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ARM Cortex M3上的int64_t原子

来自分类Dev

如何释放ARM Cortex M3堆栈

来自分类Dev

ARM Cortex-M3启动代码

来自分类Dev

将C代码转换为ARM Cortex M3汇编代码

来自分类Dev

ARM Cortex-M 内存访问

来自分类Dev

修改Comipler RT汇编代码以针对Arm Cortex M3 / M4进行编译(CPSR / APSR位操作)

来自分类Dev

如何使用C的内联汇编器访问ARM Cortex M3的r11寄存器

来自分类Dev

检索ARM Cortex M0上异常的返回地址

来自分类Dev

ARM Cortex M4硬故障-浮点

来自分类Dev

Ocaml是否适用于ARM cortex M4?

来自分类Dev

确定ARM Cortex-M系列上函数的返回地址

来自分类Dev

ARM Cortex M0的程序等效项是什么?

来自分类Dev

我正在尝试为 ARM Cortex M3 编写模拟器。如何读取二进制文件然后对其进行解码?

来自分类Dev

适用于ARM Cortex-m3的llsr和llsl(64位移位)

来自分类Dev

查找哪个指令在Cortex M3上造成陷阱

来自分类Dev

与Cortex M3的Keil ARMCC int64比较

来自分类Dev

未对齐的访问会导致ARM Cortex-M4出错

来自分类Dev

ARM Cortex M4和C,如何为特定的c文件指定RAM部分

来自分类Dev

从一开始就发生ARM中断(Cortex-M4)

来自分类Dev

引导加载程序。ARM CORTEX M0 +重定位中断表程序集错误

来自分类Dev

适用于ARM Cortex M Procssor的GNU科学库编译错误

来自分类Dev

ARM是否假定所有Cortex-M微控制器都是低端字节序的?

来自分类Dev

为什么Cortex-M4在链接描述文件中包含ARM to Thumb胶水

来自分类Dev

va_arg在ARM Cortex-M4,uint64_t和GCC 4.9上

来自分类Dev

在arm cortex-M4上使用DSP指令(C语言扩展)

来自分类Dev

ARM Cortex M4处理器的仿真

来自分类Dev

适用于ARM Cortex M Procssor的GNU科学库编译错误

来自分类Dev

引导加载程序。ARM CORTEX M0 +重定位中断表程序集错误

来自分类Dev

Arm Cortex A9内存访问

Related 相关文章

  1. 1

    ARM Cortex M3上的int64_t原子

  2. 2

    如何释放ARM Cortex M3堆栈

  3. 3

    ARM Cortex-M3启动代码

  4. 4

    将C代码转换为ARM Cortex M3汇编代码

  5. 5

    ARM Cortex-M 内存访问

  6. 6

    修改Comipler RT汇编代码以针对Arm Cortex M3 / M4进行编译(CPSR / APSR位操作)

  7. 7

    如何使用C的内联汇编器访问ARM Cortex M3的r11寄存器

  8. 8

    检索ARM Cortex M0上异常的返回地址

  9. 9

    ARM Cortex M4硬故障-浮点

  10. 10

    Ocaml是否适用于ARM cortex M4?

  11. 11

    确定ARM Cortex-M系列上函数的返回地址

  12. 12

    ARM Cortex M0的程序等效项是什么?

  13. 13

    我正在尝试为 ARM Cortex M3 编写模拟器。如何读取二进制文件然后对其进行解码?

  14. 14

    适用于ARM Cortex-m3的llsr和llsl(64位移位)

  15. 15

    查找哪个指令在Cortex M3上造成陷阱

  16. 16

    与Cortex M3的Keil ARMCC int64比较

  17. 17

    未对齐的访问会导致ARM Cortex-M4出错

  18. 18

    ARM Cortex M4和C,如何为特定的c文件指定RAM部分

  19. 19

    从一开始就发生ARM中断(Cortex-M4)

  20. 20

    引导加载程序。ARM CORTEX M0 +重定位中断表程序集错误

  21. 21

    适用于ARM Cortex M Procssor的GNU科学库编译错误

  22. 22

    ARM是否假定所有Cortex-M微控制器都是低端字节序的?

  23. 23

    为什么Cortex-M4在链接描述文件中包含ARM to Thumb胶水

  24. 24

    va_arg在ARM Cortex-M4,uint64_t和GCC 4.9上

  25. 25

    在arm cortex-M4上使用DSP指令(C语言扩展)

  26. 26

    ARM Cortex M4处理器的仿真

  27. 27

    适用于ARM Cortex M Procssor的GNU科学库编译错误

  28. 28

    引导加载程序。ARM CORTEX M0 +重定位中断表程序集错误

  29. 29

    Arm Cortex A9内存访问

热门标签

归档