arm上ldrex和strexeq指令

发布者:水云间梦最新更新时间:2016-07-13 来源: eefocus关键字:arm  ldrex  strexeq指令 手机看文章 扫描二维码
随时随地手机看文章
__raw_spin_lock在ARM处理器上的实现

/******include/asm-arm/spinlock_types.h***/

 typedef struct {
        volatile unsigned int lock;
        } raw_spinlock_t;

#define __RAW_SPIN_LOCK_UNLOCKED { 0 }

/******include/asm-arm/spinlock.h***/

#if __LINUX_ARM_ARCH__ < 6
        #error SMP not supported on pre-ARMv6 CPUs //ARMv6后,才有多核ARM处理器
        #endif
        ……
        static inline void __raw_spin_lock(raw_spinlock_t *lock)
        {
                unsigned long tmp;
                __asm__ __volatile__(
        "1: ldrex        %0, [%1]\n"
        //取lock->lock放在 tmp里,并且设置&lock->lock这个内存地址为独占访问
        "        teq %0, #0\n"
        // 测试lock_lock是否为0,影响标志位z
        #ifdef CONFIG_CPU_32v6K
        "        wfene\n"
        #endif
        "        strexeq %0, %2, [%1]\n"
        //如果lock_lock是0,并且是独占访问这个内存,就向lock->lock里 写入1,并向tmp返回0,同时清除独占标记
        "        teqeq %0, #0\n"
        //如 果lock_lock是0,并且strexeq返回了0,表示加锁成功,返回
        " bne 1b"
        //如 果上面的条件(1:lock->lock里不为0,2:strexeq失败)有一个符合,就在原地打转
                : "=&r" (tmp) //%0:输出放在tmp里,可以是任意寄存器
                : "r" (&lock->lock), "r" (1) 
        //%1:取&lock->lock放在任意寄存 器,%2:任意寄存器放入1
                : "cc"); //状态寄存器可能会改变
                smp_mb();
        }

上述代码关键在于LDREX和STREX指令的应用。DREX和STREX指令是在V6以后才出现的,代替了V6以前的 swp指令。可以让bus监控LDREX和STREX指令之间有无其它CPU和DMA来存取过这个地址,若有的话STREX指令的第一个寄存器里设置为 1(动作失败),若没有,指令的第一个寄存器里设置为0(动作成功)。

不仅是自旋锁用到LDREX和STREX指令,信号量的实现也是利用LDREX和STREX指令来实现的。

关键字:arm  ldrex  strexeq指令 引用地址:arm上ldrex和strexeq指令

上一篇:IAR的stm32f10x_vector.c文件的定义
下一篇:arm7的DMA工作原理-PDC方式

推荐阅读最新更新时间:2024-03-16 15:00

采用Keil4为ARM7 (LPC2103)创建工程 及J-link调试
采用Keil4为ARM7创建工程,采用J-LINK调试,具体步骤如下: 在菜单里的Project里选择New uVision project...,选择正确的路径并命名保存; 在弹出来的对话框中选择CPU,NXP(founded by philips)- LPC2103; 在弹出的对话框按“yes”复制LPC2100启动文件到工程; 在Project里面选择Option for Target'Target 1'...,Target里面的IROM1要配置正确(0x0 0x8000),一般采用默认值就可以了;Output选择里面的Name of Executable的命名不能用点号;Debug里面的选择
[单片机]
ARM WIFI AP 模式 使用 iptables nat 转发 通过 LAN 网线上网
编译内核,支持 iptables 和 forward 和 nat。 编译内核,使用新内核启动arm 开发板。 编译内核支持 iptables - Networking support (NET ) - Networking options - Network packet filtering framework (Netfilter) (NETFILTER ) - IP: Netfilter Configuration 本开发板是通过 LAN 有线连接到 路由器上。路由器网段为 192.168.1.1 首先要配置 LAN 的网关,DNS 等 ,因为之前已经配置好 dhcp 如果你不是使用 NFS
[单片机]
<font color='red'>ARM</font> WIFI AP 模式 使用 iptables nat 转发 通过 LAN 网线上网
arm-linux-gcc4.4.3编译busybox-1.25.0
系统环境: 1、操作系统:Ubuntu16.04 2、交叉编译工具链:arm-linux-gcc4.4.3 3、busybox源码包:busybox-1.25.0 一、修改Makefile配置 首先解压源码包: tar -jxvf busybox-1.25.0.tar.bz2 进入busybox-1.25.0目录,修改Makefile文件如下: ARCH ?= arm CROSS_COMPILE ?= arm-linux- 二、修改配置文件 make menuconfig 选择Busybox Settings--- Build Options--- ,选择 Build Busybox as a static binary(no
[单片机]
阿里云:飞天操作系统正全面兼容X86、ARM、RISC-V
在2021阿里云峰会上,阿里云智能总裁张建锋宣布,飞天操作系统正在全面兼容X86、ARM、RISC-V等多种芯片架构,实现“一云多芯”。 张建锋表示,传统IT时代围绕芯片建立IT生态,但云计算从根本上改变了这一模式,云操作系统可以将服务器芯片、专用芯片等硬件封装成标准算力,无论底层芯片是X86、ARM、RISC-V还是硬件加速,给客户提供的都是标准的、高质量的云计算服务。 飞天是中国唯一自研的云计算操作系统。一云多芯的实现,是阿里云“做深基础”战略的重要进展。 这意味着阿里云不再依赖单一芯片架构,未来拥有更多可能性。 飞天是由阿里云自主研发、服务全球的超大规模通用计算操作系统。它可以将遍布全球的百万级服务器连成一台
[嵌入式]
阿里云:飞天操作系统正全面兼容X86、<font color='red'>ARM</font>、RISC-V
ARM历程十——毕业设计(钟表)
#include S3C2440addr.h #include math.h #define pi 3.141593 U16 SEC, MIN, HOUR, TmpSEC_10, TmpMIN_10, TmpHOUR_10,TmpSEC_1,TmpMIN_1,TmpHOUR_1; U16 SEC_x, SEC_y, MIN_x, MIN_y, HOUR_x, HOUR_y, OldMIN=10000; U16 PandColor_big ; U16 PandColor_sml ; extern U16 Flag; extern U16 fz; extern const unsigned char gImage_goback
[单片机]
ARM Linux启动分析headarmv.S内幕
__create_page_tables: pgtbl r4, r5 @ page table address /* Clear the 16K level 1 swapper page table */ mov r0, r4 mov r3, #0 add r2, r0, #0x4000 1: str r3, , #4 str r3, , #4 str r3, , #4 str r3, , #4 teq r0, r2 bne 1b /* * Create identity mapping
[单片机]
基于ARM920T的嵌入式静力测量系统设计
   本文介绍了一种基于单片机AT89C52的CAN总线分布式测控系统,主要阐述了系统的总体设计方案,以及控制模块和采集模块的软硬件设计,重点是系统中以单片机为核心的带有CAN总线接口的设计,解决现场各传感器得到的测量信号利用单片机进行存储和处理,然后通过与CAN控制器的通讯将信息发送到CAN总线上。    1 CAN总线网络的技术特点           用通讯数据块编码,可实现多主工作方式,数据收发方式灵活,可实现点对点、一点对多点及全局广播等多种传输方式;可将DCS结构中主机的常规测试与控制功能分散到各个智能节点,节点控制器把采集到的数据通过CAN适配器发送到总线,或者向总线申请数据,主机便从原来繁重的底层设
[单片机]
基于ARM的高速数据采集卡
1 引言 随着现代工业生产和科学研究对数据采集要求的日益提高,在瞬态信号测量、图像处理等一些高速、高精度的测量中,需要高速采集数据。现在通用的高速数据采集卡一般多是PCI卡或ISA卡,存在以下缺点:安装复杂,价格昂贵,受计算机插槽数量、地址、中断资源限制,可扩展性差,在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,导致采集的数据失真。 本数据采集卡采用Philips公司的LPC2142微控制器(基于ARM7内核,内置了宽范围的USB 2.0串行通信接口),有效地解决了传统高速数据采集卡的缺陷。 2 基于ARM的数据采集卡原理 本系统主要由双通道模/数转换器AD9238、ARM微控制器及FPGA器件EP1C3T100组
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved