历史上的今天
返回首页

历史上的今天

今天是:2025年04月03日(星期四)

正在发生

2020年04月03日 | ARM体系结构与编程-3

2020-04-03 来源:eefocus

ARM存储系统:

ARM中用于存储管理的系统控制协处理器CP15:

包含16个32位寄存器,其编号为0到15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。


访问CP15寄存器的指令:MRC、MCR。


CP15中的寄存器C0和C1:C0中存放ARM相关的一些标示符;C1是一个控制寄存器,用于禁止/使能MMU、配置存储系统等。


例如下面的代码序列使能MMU:

MRC P15,0,R0,C1,0,0

ORR R0,#01

MCR P15,0,R0,C1,0,0


ARM中的存储管理单元MMU:

完成虚拟存储空间到物理存储空间的地址映射,和存储器访问权限的控制,设置虚拟存储空间的缓冲特性。


ARM中的CACHE及WRITE BUFFER技术:

高速缓存和写缓冲区位于主存储器SDRAM和CPU之间,用来提高存储系统的性能。


快速进程上下文切换技术:

通过修改系统中不同进程的虚拟地址,避免在进行进程间切换时造成的虚拟地址到物理地址的重映射,从而提高系统的性能。


ATPCS:ARM Thumb procedure call standard:ARM程序和Thumb程序中的子程序调用的基本规则

为适应特定的需要,除去基本的ATPCS外,有特定的ATPCS,如支持数据栈限制检查的ATPCS、支持只读段位置无关的ATPCS、支持可读写段位置无关的ATPCS、支持ARM和Thumb程序混合使用的ATPCS、处理浮点运算的ATPCS。


基本的ATPCS:

寄存器的使用规则:

子程序通过R0 - R3来传递参数,R0 - R3可记作A0 - A3。被调用的子程序在返回前无需恢复寄存器R0 - R3的内容。


在子程序中,使用R4 - R11来保存局部变量,R0 - R3可记作V1 - V8。如果在子程序中使用了V1 - V8中的某些寄存器,则子程序在进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值。


R12可记作ip,用作子程序间scratch寄存器。

R13可记作sp,用作数据栈指针。sp在进入子程序时的值和退出子程序时的值必须相等。

R14可记作lr,称为连接寄存器,用于保存子程序的返回地址。

R15可记作pc,称为程序计数器。


数据栈的使用规则:

栈指针可以指向不同的位置。当栈指针指向栈顶元素时,称为满栈。当栈指针指向与栈顶相邻的下个可用数据单元时,称为空栈。当数据栈向内存地址减小的方向增长时,称为递减栈。当数据栈向内存地址增加的方向增长时,称为递增栈。


综合起来有4中数据栈:FD(满递减)、ED(空递减)、FA(满递增)、EA(空递增)。ATPCS规定数据栈为FD(满递减)类型,并且对数据栈的操作是8字节对齐的。


参数传递规则:

参数个数可变的子程序参数传递规则:参数个数不超过4个时,使用R0 - R3来传递参数;参数个数超过4个时,可以使用数据栈来传递参数。

子程序结果返回规则:结果为一个32位整数时,通过R0返回;结果为64位整数时,通过R0,R1来返回。


C/C++以及汇编语言的混合编程:

内嵌汇编器指的是包含在C/C++编译器中的汇编器,它可以汇编内嵌的汇编指令。


内嵌的汇编指令用法:

操作数:作为操作数的寄存器和常量  可以是C/C++表达式。

物理寄存器:通常推荐在内嵌的汇编指令中不要指定物理寄存器,因为这可能会影响到编译器对寄存器的分配,进而影响代码的效率。


标号:内嵌的汇编指令中只有B指令可以使用C/C++程序中的标号。


在C/C++程序中使用内嵌的汇编指令的语法格式:

在ARM C语言中:

__asm

{

instruction [;instruction]

...

[instruction]

}


在ARM C++语言中:

asm("instruction [;instruction]");

从汇编程序中访问C程序中声明的全局变量:

首先,使用IMPORT伪操作声明该全局变量

其次,使用LDR指令读取该全局变量的内存地址

最后,根据数据的类型使用相应的LDR指令读取该全局变量的值,使用STR指令修改该全局变量的值


汇编程序、C程序以及C++程序的相互调用:

在C++程序中使用C程序头文件:

在C++程序中使用C程序的系统头文件:直接包含。因为系统已经执行过了extern "C" {}的伪操作。


在C++程序中使用C程序的用户自定义头文件:

方法1:将其放在 extern "C" {} 中。例如:

//C++ code

extern "C"

{

#include "mycheader1.h"

}

方法2:在该C程序头文件中使用extern "C" {}。例如:

//C header file

#ifdef __cplusplus

extern "C" {

#endif

//C头文件实际内容

#ifdef __cplusplus

}

#endif


C程序调用汇编程序:

首先,汇编程序的设计要遵循ATPCS规则,保证程序调用时参数的正确传递。


其次,在汇编程序中使用EXPORT伪操作声明本程序标号,使得本程序可以被别的程序调用。


最后,在C语言程序中使用extern关键字声明该汇编程序标号,然后就可以调用了。


汇编程序调用C程序:

首先,汇编程序的设计要遵循ATPCS规则,保证程序调用时参数的正确传递。


最后,在汇编程序中使用IMPORT伪操作声明将要调用的C程序,然后就可以调用了。


C++程序调用C程序:在C++程序中用关键字 extern "C" 声明被调用的C程序。


汇编程序调用C++程序:

首先,汇编程序的设计要遵循ATPCS规则,保证程序调用时参数的正确传递。

其次,在C++程序中使用extern "C" 声明被调用的C++程序。

最后,在汇编程序中使用IMPORT伪操作声明将要调用的C++程序,然后就可以调用了。

推荐阅读

史海拾趣

AINFO Inc公司的发展小趣事

随着电子行业的快速发展,AINFO Inc公司积极响应国家产业政策,加快了产业升级的步伐。公司引进了先进的生产设备和技术,实现了智能制造和数字化转型。通过优化生产流程和提高生产效率,公司降低了成本,提高了产品质量,进一步巩固了市场地位。

BTCPower公司的发展小趣事

BTCPower公司自成立以来,一直致力于研发高效能、低能耗的电源管理芯片。经过数年的努力,公司成功开发出了一款具有革命性的芯片,能够在保证性能的同时,显著降低电子设备的能耗。这一技术突破迅速吸引了市场的关注,BTCPower的产品开始被广泛应用于智能手机、平板电脑等消费电子产品中,公司因此获得了巨大的商业成功。

FEMA Electronics Corporation公司的发展小趣事

随着科技的不断发展,FEMA意识到只有不断创新才能在竞争激烈的市场中立于不败之地。因此,公司加大了研发投入,不断推出具有自主知识产权的新产品。其中,一款高性能的集成电路芯片在市场上引起了广泛关注。这款芯片不仅性能卓越,而且具有极高的性价比,迅速赢得了客户的青睐。FEMA凭借这一产品,成功打开了新的市场领域,实现了业务的快速增长。

BK Precision公司的发展小趣事

BK Precision一直将品质管理视为企业发展的核心。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、出厂等各个环节都进行严格把控。同时,公司还注重持续创新,不断推出符合市场需求的新产品。通过引进先进的生产设备和技术手段,BK Precision不断提高生产效率和产品质量,为客户提供更优质的产品和服务。

AMRI Enterprise Co Ltd公司的发展小趣事

AMRI Enterprise Co Ltd注重与高校和研究机构的产学研合作,通过引进先进技术和人才,推动公司的技术创新。公司与多所知名高校建立了紧密的合作关系,共同开展科研项目和技术攻关。这些合作不仅为AMRI带来了前沿的技术成果,还提升了公司的研发能力和创新能力。在产学研合作的推动下,AMRI不断推出具有创新性和竞争力的新产品,为公司的持续发展提供了强有力的支撑。

晶群科技(Gem-micro)公司的发展小趣事

AMRI Enterprise Co Ltd在电子行业中崭露头角,源于其一次重大的技术突破。公司研发团队经过数年的努力,成功开发出了一款具有高效能、低功耗特点的芯片,引起了市场的广泛关注。这一技术突破不仅提升了AMRI的产品竞争力,还为公司赢得了众多合作伙伴的青睐。随着产品线的不断扩展和市场份额的逐步增加,AMRI逐渐在电子行业中站稳了脚跟。

问答坊 | AI 解惑

用AT89C51单片机做一个倒车雷达的毕业设计

我打算用AT89C51的单片机做一个倒车雷达的毕业设计,大家有没有好的设计方案? 软件的设计,硬件的设计。 我邮箱:lovew230@163.com…

查看全部问答>

贴一个加州大学伯克利分校的视频

伯克利分校推出了好多免费的教程,包括视频的。 http://player.youku.com/player.php/sid/XMTIxMjg1MTE2/v.swf [ 本帖最后由 qfc 于 2009-12-1 14:25 编辑 ]…

查看全部问答>

跳槽前要想清楚的六件事

跳槽,职场人士既熟悉而又陌生的词汇,可谓是职场上的热门话题。说它熟悉,那是因为有很多人有跳槽的经历;说它陌生,那是因为有很多人听过,但没实践过。职场人士为什么喜欢跳槽?根据帝王职业顾问的研究,无外乎三个方面的原因:一是,非常不喜欢 ...…

查看全部问答>

PXA255用NORFLASH储存NK,用NANDFLASH储存一般的大文件?

用PXA255,wince系统,用NORFLASH存储NK并实现加载系统,现想增加一片2G的NANDFLASH用于存储文件,用usb1.1与PC实现同步后,可向NANDFLASH里拷贝文件,想问的是,如何使NANDFLASH实现文件系统,在wince系统里将其看做一个文件夹,这样与PC同步后, ...…

查看全部问答>

学习嵌入式?

本人一09届本科毕业生,电子信息工程专业,立志想进入嵌入式开发行业,可惜一直未找到合适工作,想找个师傅带带我,请各位大师指点一二!小生感激不尽。…

查看全部问答>

急求plc 软件

各位朋友  谁有支持win7   64位的最好是破解版的plc 编程软件和模拟软件啊  小弟感激不尽啊   急急。。。  994527322@qq.com…

查看全部问答>

欢迎探讨:应该怎样编写和管理你的程序?

《ARM Cortex-M0从这里开始》          从我们读书到工作,没有一个地方和一个人特别对你提出要求,需要怎样去管理你的程序。当然大一点的公司都有一套自己的管理方法,但对于大多数初学者或是小公司的工程 ...…

查看全部问答>

针对SEED-EXP430F5529LCD背光的Ti元器件申请!

控制SEED-EXP430F5529 LCD背光的元器件:TPS75105DSKR没有焊接!让人有些不爽! 好在TI的样片申请一向容易!我上午提交了申请请求!下午就给我安排了寄送!这办事效率!膜拜中。。。。。。! 坐等样片归来!进行焊接!嘿嘿!还在纠结背光问题 ...…

查看全部问答>

方得(北京)物联科技有限公司高薪诚聘研发部经理,物联网、嵌入式工程师

本帖最后由 finder_tech 于 2014-5-3 10:21 编辑 方得(北京)物联科技有限公司是注资500万成立的以无线传感技术为基础的高科技公司,公司主营业务是提供高可靠性、高精度、低功耗、安装简单、使用维护方便的无线传感系统解决方案。产品主要应用 ...…

查看全部问答>

【TI首届低功耗设计大赛】+ GPIO

    拿到TI金刚狼板卡已经有一段时间了,作品现在还在调试当中,今天就开个帖子,这样也算对得起eeword对我支持,把我这段时间的经验分享出来吧,这样后来的初学者也能接着帖子快速入门,后续还会有:但凡我搞到MCU,首先肯定会用到GPIO, ...…

查看全部问答>