历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2018年03月08日 | 将8051应用程序迁移到ARM Cortex-M处理器上的过程

2018-03-08 来源:eefocus

    Cortex-M处理器系列包括广泛使用的Cortex-M3处理器、针对FPGA的Cortex-M1处理器、2009年初推出的Cortex-M0处理器(最小的 ARM 处理器)和2010年初推出的 C o r tex-M4处理器(支持浮点和数字信号处理增强指令)。这些处理器具有先进的功能特点和简单易用的编程模型,对于想从8051微控制器迁移到ARM架构的开发人员来说,极具吸引力。本文是一篇入门指南,目的是帮助8051微控制器的开发人员了解8051和A R M Cor tex-M处理器系列在架构、软件和硬件设计上的主要差异,从而加快迁移过程。


    架构概述

    对于一些嵌入式程序员(尤其是那些习惯使用汇编语言编程的程序员),首先要做的事情就是了解编程模型。

    寄存器

    ARM Cortex-M处理器具有一个32位寄存器库和一个xPSR(组合程序状态寄存器)。而8051具有ACC(累加器)、B、DPTR(数据指针)、P SW(处理器状态字)和四个各含八个寄存器的寄存器库 (R0-R7)。

     

456

    在8051中,一些指令会频繁使用某些寄存器,如ACC和 DPTR。

    这种相关性会极大降低系统的性能,而在ARM处理器中,指令可使用不同的寄存器来进行数据处理、内存存取和用作内存指针,因此不会有这个问题。

    从根本上说,ARM 架构是一个基于加载(Load)和存储(STore)的RI S C架构,处理器寄存器加载数据,然后将数据传给A LU进行单周期执行。而8051寄存器(ACC、B、PSW、SP和DPTR)可在SFR(特殊功能寄存器)的内存空间中访问。

    为了确保普通的C函数能够用作中断处理程序,在需要处理中断时,C o r t e x- M的寄存器(R 0 - R 3、R12、L R、P C和xPSR)会被自动压入堆栈,而软件仅需在必要时将其他寄存器压入堆栈。虽然8051具有4个寄存器库,但是ACC、B、D P T R和PSW寄存器并不会自动压栈,因此通常需要通过中断处理程序对这些寄存器进行软件压栈。

    寄存器

    ARM处理器具有32位寻址,可实现一个4GB的线性内存空间。该内存空间在结构上分成多个区。每个区都有各自的推荐用法(虽然并不是固定的)。统一内存架构不仅增加了内存使用的灵活性,而且降低了不同内存空间使用不同数据类型的复杂性。

    相反地,8051微控制器具有多个内存空间。内存空间的分割使得有效地利用全部内存空间变得困难,而且需要借助C语言扩展来处理不同的内存类型。

    8 0 51在外部R A M内存空间上最高支持* K B的程序内存和64K B的数据内存。理论上,可以利用内存分页来扩展程序内存大小。不过,内存分页解决方案并未标准化,换句话说,不同8051供应商的内存分页的实现并不相同。这不仅会增加软件开发的复杂性,而且由于处理页面切换所需的软件开销,还会显着降低软件性能。

    在AR M C or tex-M3或M4上,S R A M区和外设区都提供了一个1MB的位段区(bit band regiON)。此位段区允许通过别名地址访问其内部的每个位。由于位段别名地址只需通过普通的内存存取指令即可访问,因此C语言完全可以支持,不需要任何特殊指令。而8051提供了少量的位寻址内存(内部R A M上16字节和S F R空间上16字节)。处理这些位数据需要特殊指令,而要支持此功能,C编译器中需要C语言扩展。

23

     

    A R M C o r t ex-M处理器的内存映射包含多个内置外设块。例如,ARM Cortex-M处理器的一个特性是具有一个嵌套矢量中断控制器 (NVIC) 。此外,系统区中内存映射有数个指定控制寄存器和调试组件,以确保优异的中断处理并极大方便开发人员使用。

    堆栈内存

    堆栈内存操作是内存架构的重要组成部分。在8051中,堆栈指针只有8位,同时堆栈位于内部的内存空间(上限为256个字节,并由工作寄存器(四个各由R0至R7构成的寄存器库)和内部数据变量共享)。堆栈操作基于空递增模型。

45

 

    与8051不同的是,A RM Cor tex-M处理器使用系统内存作为堆栈,采用满递减模型。

     

45

    满递减堆栈内存模型更受C语言的支持。例如,微控制器中的SRAM的使用可组织为:

23

    使用动态分配内存空间的C库和应用程序通常需要堆内存。

    尽管C o r tex-M处理器的每次压栈需要32位的堆栈内存,总的R A M使用仍然要比8051小。8051的变量通常是静态地放在IDATA上,而ARM处理的局部变量是放在堆栈内存上的,因此,只有当函数执行的时候,局部变量才会占用RAM空间。

    此外,ARM Cortex-M 处理器提供有第二个堆栈指针,以允许操作系统内核和进程堆栈使用不同的堆栈内存。这使得操作更可靠,也使操作系统设计更高效。(堆栈指针切换是自动处理的)8051中的很多外设是通过特殊功能寄存器 (S F R) 来控制的。由于S F R空间只有128个字节,而且其中一些已经为处理器寄存器和标准外设所占用,剩余的S F R地址空间通常非常有限,因此也就限制了可通过S F R控制的外设数量。虽然可以通过外部内存空间来控制外设,但是与S F R存取相比,外部存取通常需要更多的开销(需要将地址复制到DPTR,数据必须通过ACC传输)。


推荐阅读

史海拾趣

BALLUFF公司的发展小趣事

随着中国经济的快速发展,BALLUFF公司也看到了中国市场的巨大潜力。为了更好地服务中国市场,BALLUFF在2007年坚定地走本土化路线,在成都建立了生产工厂。这一举措不仅缩短了亚洲地区的响应时间和供货周期,也极大地提升了客户满意度。随着工厂的正式运行,BALLUFF在中国市场的地位逐渐稳固,其传感器产品也广泛应用于汽车、冶金、机床和风电等行业。

Barnbrook Systems Limited公司的发展小趣事

在电子产品行业,产品质量和客户服务是企业生存和发展的关键。Barnbrook深知这一点,因此在发展过程中始终坚持严格的品质管理和优质的客户服务。公司建立了完善的质量管理体系,对每一道工序都进行严格把关,确保产品的稳定性和可靠性。同时,Barnbrook也重视客户反馈和需求,不断优化产品和服务,赢得了客户的信任和好评。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

在电子产品行业,产品质量和客户服务是企业生存和发展的关键。Barnbrook深知这一点,因此在发展过程中始终坚持严格的品质管理和优质的客户服务。公司建立了完善的质量管理体系,对每一道工序都进行严格把关,确保产品的稳定性和可靠性。同时,Barnbrook也重视客户反馈和需求,不断优化产品和服务,赢得了客户的信任和好评。

Handok Co Ltd公司的发展小趣事

为了保持技术上的领先地位,Barnbrook积极寻求与高校、研究机构的合作。通过与这些机构的深入合作,Barnbrook不仅获得了最新的科研成果和人才支持,还成功研发出了一系列具有创新性的电子产品。这些产品不仅提升了公司的技术实力,也为公司的长期发展注入了新的活力。

博巨兴公司的发展小趣事

2005年,博巨兴公司的业绩取得了突破性进展,全年业绩突破5000万元。这一年,公司还与世平科技有限公司展开了战略合作,共同推动芯片行业的发展。此外,公司还成功取得了台湾义隆公司在华东地区的代理权,进一步拓展了市场份额。

BRIGHT公司的发展小趣事

BRIGHT公司的历史可以追溯到1985年,由一群热爱音乐的年轻人和电子工程师共同创立。在1987年,他们成功推出了全球第一支无线耳机,这一创新产品迅速在市场上获得了巨大的成功。这一成就的背后,是创始人在一次偶然中被家里的电线绊倒后产生的灵感。他意识到,将有线耳机转变为无线耳机将带来巨大的便利和舒适体验。这一创新不仅改变了耳机行业的格局,也为BRIGHT公司奠定了坚实的基础。

问答坊 | AI 解惑

首个消费者命名的数码品牌呼之欲出

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 7月13日,“安全存储专家”旅之星联手搜狐数码频道,在全国范围内发动“数码品牌征名行动”,向广大消费者征集旅之星旗下数码品牌的名称。经过海选、预选和精选几个阶段,首个由消费者命名的国 ...…

查看全部问答>

各种集成电路简介(经典ZZ)

第一节 三端稳压IC 电子产品中常见到的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。故名思义,三端IC是指这种稳压用的集成电路只有三条引脚输出,分别是输入端、接地端和输出端。它的样子象是普通 ...…

查看全部问答>

元件封装

       希望能帮到有需要的朋友…

查看全部问答>

设计高速电路板的注意事项

我最近针对一篇关于PCB特性阻抗的文章写了封信。该文阐述了工艺过程的变化是怎样引起实际阻抗发生变化的,以及怎样用精确的现场解决工具(field solver)来预见这种现象。我在信中指出,即使没有工艺的变化,其它因素也会引起实际阻抗很大的不同。在设 ...…

查看全部问答>

新手共享---GCC参数详解

[声明]    这篇文档是我的关于gcc参数的笔记,我很怀念dos年代我用小本子,纪录所有的dos    命令的参数.哈哈,下面的东西可能也不是很全面,我参考了很多的书,和gcc的帮助.    不全的原因是,有可能我还没有看到这个 ...…

查看全部问答>

发光的出气筒

设计师Jin-Sook Kim给我们带来了一款发泄工具,当你用力击打这个出气筒的时候,内置的LED灯便会随之点亮,并会以发光来回应每次击打。据说这样有助于发泄者内心由黑暗迅速走向光明。…

查看全部问答>

如何实现netui修改?

我想将wifi模块的配置信息在自己的应用程序中实现:思路是通过应用程序修改注册表,然后netui调用注册表里的值,主要包括wifi的密码,ap的名称等的保存。但是不知道NETUI中这一部分是在什么地方,代码里面没有找到。…

查看全部问答>

Wince 6.0 R3, MUI,控制面板快捷方式还是默认语言。

Wince 6.0 R3, MUI,控制面板快捷方式还是默认语言。 例如NK包含了4国语言,默认是中文,那么无论进入哪一个语言,控制面板的快捷方式,资源管理器的快捷方式还有网络,都是中文。 这个问题难道了好多人。 …

查看全部问答>

设备列表

谁知道怎么编程怎么实现获取系统中的硬件列表 或查看某一特定硬件是否连接正常…

查看全部问答>

oled12V工作电压

焊接完通电。这个电压不对,实测为3.3V。应该是gdr信号没有输出导致的。 谁的屏电压正常,还是需要向oled配置一下呢?…

查看全部问答>