4.7.20. __ldrex

此内在函数在编译器生成的指令流中插入 LDREX{size} 格式的指令。 它允许在 C 或 C++ 代码中使用 LDREX 指令从内存中加载数据。

语法

          unsigned int __ldrex(volatile void *ptr)
        

其中:

ptr

指向要从内存中加载的数据的地址。 要指定所加载的数据大小,请将参数类型转换为相应的整型。

Table 4.8. __ldrex 内在函数支持的访问宽度 

指令 加载的数据大小 C 类型转换
LDREXB 无符号字节 ( char *)
LDREXH 无符号半字 ( short int *)
LDREX ( int *)

返回值

__ldrex 内在函数返回从 ptr 指向的内存地址中加载的数据。

错误

为不支持 LDREX 指令的目标进行编译时,编译器无法识别 __ldrex 内在函数。 在这种情况下,编译器将生成警告或错误。

__ldrex 内在函数不支持对双字数据的访问。 如果指定了不支持的访问宽度,编译器将生成错误。

示例


int foo(void)

{

    int loc = 0xff;

    return __ldrex((volatile char *)loc);

}

使用命令行选项 --cpu=6k 编译此代码时,将生成以下内容:


||foo|| PROC

    MOV      r0,#0xff

    LDREXB   r0,[r0]

    BX       lr

    ENDP

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential