历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2020年02月13日 | ARM指令集—SWP指令

2020-02-13 来源:eefocus

ARM指令集—SWP指令


SWP和SWPB是ARM指令集中对存储单元的原子操作。即对存储单元的一次读和一次不可被切割。

SWP和SWPB分别完毕存储器和寄存器之间 一个字(32bit)和一个字节(8bit)的数据交换。


SWP指令主要是完毕ARM体系架构处理器的同步操作。在Linux操作系统中实现信号量的操作。可是此指令在ARMv6架构后就没有採用了,而是通过扩展的LDREX和STREX实现。本片文章主要介绍SWP的功能,对于LDREX和STREX以后再介绍。


SWP的指令格式例如以下:

SWP {}{B}  Rd,  Rm,  [Rn]


当中Rd是目的寄存器,从存储器中读到的值存放于此寄存器中

Rm寄存器是操作数。会将此寄存器中的值存放于存储单元中

[Rn]是寄存器间接寻址,Rn保存的是某个存储单元的地址

如果[Rn]中存放的是信号量。当某程序要改动信号量时,则会调用SWP指令完毕对信号量的操作,即对这个存储单元的读和写是一个原子操作。不会被打断,命令的运行步骤例如以下图1所看到的:

图1


当多个程序要訪问他们共享的资源时,我们必需要做好同步机制以保证数据的安全。通常,共享的资源能够是一段共享内存或者是外部设备。訪问这些资源的能够使CPU、进程或者是线程。


为了完毕同步机制,会採用一个原子变量来保存资源的状态。


比例如以下图2所看到的,用一个二元信号量(0或者1)来实现共享资源的同步,当进程A 和 进程B都要訪问信号量Semaphore。


图2


对于A进程。先訪问到信号量Semaphore发现状态可用,应该立即会改动Semaphore的状态。告诉其它进程此资源正在被使用。可是可能因为时间片恰好用完,系统调度到进程B。

进程B訪问到信号量时发现状态也可用。于是改动Semaphore告诉其它进程此资源正在被使用,等到系统再次调度到进程A时,进程A却不知道进程B已改动了Semaphore而且使用了公共资源,于是接着上次未完毕的任务,開始改动Semaphore而且開始使用公共资源。因此。遇到这种情况的话,信号量形同虚设并没有起到同步的作用。


所以假设使用SWP指令,通过上面的介绍,SWP指令时完毕对存储单元的一次读和写的原子操作。就能够避免这种情况。


以下的汇编代码是通过SWP实现相互排斥的样例

EXPORT lock_mutex_swp

lock_mutex_swp PROC

LDR r2, =locked

SWP r1, r2, [r0]              ; Swap R2 with location [R0], [R0] value placed in R1

CMP r1, r2                      ; Check if memory value was ‘locked’

BEQ lock_mutex_swp       ; If so, retry immediately

BX lr                               ; If not, lock successful, return

ENDP

EXPORT unlock_mutex_swp

unlock_mutex_swp

LDR r1, =unlocked

STR r1, [r0]                    ; Write value ‘unlocked’ to location [R0]

BX lr

ENDP


当然,除了上面的情况,还可能因为中断的产生导致读和写的操作被打断。


在一些任务比較简单的系统中,能够在关键的代码中利用禁止中断的方式来保证对数据操作的原子性,然而对于如今复杂的多任务操作系统,禁止中断的做法显然不是有效的解决方法。


所以SWP通过特殊的訪问方式,不须要禁止中断。可是这样也会延长中断的响应时间。随着处理器的高速发展,多核处理器已经显示出了强大的优势,同步的问题显得更加明显。如图3所看到的,一个系统由一个Cortex-A8和Cortex-M4组成。他们都会訪问一同一段存储空间。

            
图3


SWP指令在这样的模式下。就显得非常尴尬了,假设依旧採用原来的特殊訪问模式,可能会大大减少多核处理的性能。


所以从ARMv6架构以后。不再使用SWP指令实现同步的功能,而是添加了LDREX和STREX指令完毕相关的操作。


具体使用情况,会在LDREX和STREX的文章中具体说明。

推荐阅读

史海拾趣

Abilis Systems公司的发展小趣事

Abilis Systems公司是一家专注于数字视频和数字广播领域的半导体公司,以下是该公司发展的五个相关故事:

  1. 公司成立和初期发展: Abilis Systems公司成立于2004年,总部位于法国索恩-卢瓦尔省的克勒拉克。公司成立之初,致力于研发数字视频和数字广播领域的创新技术,旨在提供先进的芯片解决方案。

  2. 技术创新和产品推出: 在成立后的几年里,Abilis Systems公司不断进行技术创新,并推出了一系列创新的数字视频和数字广播芯片产品。这些产品包括数字电视接收器和解调器、数字广播接收器等,为客户提供了高性能和高度集成的解决方案。

  3. 市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,Abilis Systems积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于数字电视、数字广播、卫星电视等领域,赢得了客户的信赖和认可。

  4. 并购和战略合作: 为了进一步加强技术实力和扩大市场份额,Abilis Systems公司进行了一系列并购和战略合作。通过收购具有相关技术和市场资源的企业,公司拓展了产品线,并加强了在数字视频和数字广播领域的领先地位。

  5. 未来展望和发展方向: Abilis Systems将继续致力于技术创新和产品升级,加强在数字视频和数字广播领域的研发投入。公司将不断推出符合市场需求的新产品和解决方案,为客户提供更优质的服务和支持。同时,公司还将积极参与行业标准制定和国际合作,推动数字视频和数字广播技术的发展和应用。

EUCHNER公司的发展小趣事

随着全球化的发展,EUCHNER公司开始实施国际化战略,加强在全球市场的布局。公司在世界各地设立了多个分销处和办事处,以便更好地满足不同国家和地区的市场需求。同时,公司还积极与国际知名企业建立合作关系,共同推动工业自动化领域的进步。通过国际化战略和全球布局,EUCHNER公司的品牌影响力得到了进一步提升。

Dailywell Electronics Co Ltd公司的发展小趣事

随着公司实力的不断增强和业务的不断扩展,德利威电子开始实施全球化战略。2002年,公司成立了珠海富鼎厂,正式将东莞的电子产能进行移转。这一举措不仅进一步提升了公司的生产能力和产品品质,也为其进一步拓展国际市场提供了有力支持。此外,公司还在2003年和2006年分别成立了中国东莞办事处和北京办事处,进一步加强了其在中国市场的布局和服务能力。通过这些举措的实施,德利威电子逐步实现了从单一市场向全球市场的转变。

以上五个故事简要概述了德利威电子股份有限公司在电子行业中的发展历程和关键节点。这些故事不仅展示了公司的成长轨迹和实力提升过程,也反映了其在技术创新、品质管理、国际化布局等方面的努力和成就。

Aborn Electronics Inc公司的发展小趣事

在激烈的市场竞争中,成本控制是企业生存和发展的重要因素之一。Aborn Electronics深知这一点,因此在供应链管理上下了大力气。公司与多家优质供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量可靠。同时,通过对生产流程的不断优化和改进,降低了生产成本,提高了生产效率。这些措施使得Aborn Electronics的产品在市场上更具竞争力。

Conexcon Group公司的发展小趣事

面对日益激烈的市场竞争,Conexcon Group积极寻求与国内外知名企业的战略合作。通过与行业巨头的联合研发和市场推广,公司成功将自身产品推向了更广阔的市场。同时,这些合作也为公司带来了先进的技术和管理经验,进一步提升了公司的核心竞争力。在合作中,Conexcon Group始终坚持开放、共赢的原则,与合作伙伴共同推动电子行业的发展。

GD Rectifiers Ltd公司的发展小趣事

面对数字化时代的到来,GD Rectifiers Ltd主动拥抱变革,积极推进数字化转型。公司投入巨资建设了先进的数字化生产管理系统和客户关系管理系统,实现了生产过程的智能化和透明化。通过数据分析和挖掘技术,公司能够更准确地把握市场需求和客户需求的变化趋势,为产品研发和市场营销提供有力支持。同时,公司还加强了与供应商和客户的数字化连接和协作,提高了供应链的协同效率和响应速度。数字化转型的成功实施为GD Rectifiers Ltd注入了新的活力,进一步提升了公司的市场竞争力和行业地位。

问答坊 | AI 解惑

H桥电机驱动原理与应用

H桥电机驱动原理与应用原著:吉姆布朗 1998年4月 整理上传:鲍勃乔丹 2002年9月 翻译:韦文潮 2007年12月本文的内容是要告诉大家什么是H桥以及它如何是工作的。 我们首先来看马达是如何转动的呢?举个例子:你手里拿着一节电池,用导线将马达和 ...…

查看全部问答>

添加的开机运行程序 卡住

写了一个小的应用程序,通过修改注册表,设置成开机自动运行.(我用vs2005远程跑是没问题的) 可是,开机时会卡在log界面上.请问下高手,问题在哪里? 添加注册表如下: [HKEY_LOCAL_MACHINE\\init] \"Launch50\"=\"startup.exe\" \"Depend50\"=hex:14 ...…

查看全部问答>

硬件条件和外界条件一定的情况下,如何提高Wifi连接速度

能否通过一些配置,比如连接时指定路由器IP地址等,来提高Wifi打开时的连接速度呢???…

查看全部问答>

有关CE上显示字型的问题

现在我的系统中使用的字型文件是一个名叫:mingliu.ttc的字型文件(这个是一个能支持繁体中文的字型文件)。现在我把系统的字体修改为:使用New Times Roman字型,这样就会出现一个问题,在显示中文的地方就会出现口口(框框)不能正常显示。这应该 ...…

查看全部问答>

如何让socket使用串口设备而不使用以太网设备

在嵌入式linux2.6.15内核下开发,目前开发需求要用串口传输数据,然而原先是直接调用socket通过访问以太网传输数据的,但是希望保留socket功能,希望变换物理介质,让socket将数据传递给串口进行收发工作。万望大虾的指点。在此先谢谢了!!!…

查看全部问答>

实测UTC-903SE开阔地距离2100米,真是不错

具体大家看看这家公司的产品:http://www.newmsg.net/Product/NewMsg_UTC903SE.asp也可以 加我QQ: 1425156046…

查看全部问答>

从0开始学习TI--M3……1

   去年年末的时候团了LM3S9B96和LM3S811,记得那时候说拍0.01元的LM3S811是要交学习笔记的,所以从今天开始写学习笔记,还当时的承诺。持续时间大约为50天,每两天一篇,前15份学习笔记是基于811,后10份基于9B96。   ①先上图 ...…

查看全部问答>

M4 -- 这么强大!

http://www.ti.com/lit/gpn/lm4f232h5qc     Parametrics LM4F232H5QC Flash (KB) 256     StellarisWare in ROM Yes     DMA 32     SafeRTOS 0     ...…

查看全部问答>

如何创建自己的XDC platform package??

       小弟最近需要用TI的CodecEngine,使用的平台是合众达的6467T。在XDC工具中,有一个关于Platform的设定项。但是TI所给Platform package中是没有合众达平台的platform package的。于是我想自己创建一个。但是TI ...…

查看全部问答>

论坛里有人准备DIY四轴飞行器电路用STM32F103

https://bbs.eeworld.com.cn/thread-355890-1-1.html…

查看全部问答>