大多数现代嵌入式软件应用都是从Flash(Flash)存取和执行的。为了加快基于Flash的应用运行时间,开发人员可以选择一些关键功能从RAM执行,让速度更大幅提升......

大多数现代嵌入式软件应用都是从Flash(Flash)存取和执行的。Flash为基于微控制器(MCU)的应用提供了便宜且快速的储存介质。这些应用通常都是实时的,对运行时间和确定性行为有严格要求。虽然Flash速度已经很快,但还是不如从RAM执行程序代码那么快。为了加快基于Flash的应用运行时间,开发人员可以选择一些关键功能从RAM执行,以获得额外的速度提升。

为了从RAM执行一项功能,开发人员通常需要遵循三个步骤,包括:

1.在功能链接器中创建RAM区域
   
2.指定哪些功能应储存在RAM

3.在启动时将这些功能复制到RAM

让我们详细探讨一下这个过程。


步骤#1:在功能链接器中创建RAM区域



每个编译程序都使用不同的语法来定义MCU内的储存区域。对于本文的示例,我们将使用基于GCC的Code Composer Studio以及与TI C2000系列一起使用的语法,我相信它可以提供一个很好的例子。

当我们修改链接器档以包含将从RAM执行的功能时,需要创建一个内存单元来指定功能将从哪里加载到RAM,以及将加载到RAM中哪个位置。

链接器文件将包含指定重要程序分配的区域,例如:

●cinit

●text

●codestart

●stack

●constants

开发人员需要为其RAM功能创建一个区域,可以使用以下程序代码完成:

embeded18123102

如你所见,这是在RAM中创建一个名为ramfuncs的区域。RAM区域将储存在FLASH A扇区的功能加载,它被指定在RAM区RAML0中运行。然后有一些定义用于指定RAM功能的开始和结束位置以及它们的大小。这些值在步骤#3中就显出重要性了。

步骤#2:指定哪些功能应储存在RAM



一旦在链接器中创建了一个RAM区域来储存指定的功能,我们需要指定功能应该驻留其中的链接器。最常用于执行此操作的方法是使用#pragma。通常,我们应该尽量避免在程序代码中使用#pragma,因为它是依赖于编译程序的。这意味着如果编译程序发生改变,开发人员很可能就必须修改#pragma行。对于我们要达到的目的,这没关系,因为我们无论如何都必须修改一个新的链接器档,我们需要找出正确的语法来指定如何将一个功能放入内存区域。

通常从RAM执行的一组通用功能是与存取和控制Flash相关的功能。原因是当我们想要写入或擦除Flash时,大多数MCU都不允许同时执行Flash程序代码!因此,无论如何我们需要将这些功能放入RAM中。我们可以使用类似如下的程序代码将Flash_Init等功能放入RAM区域:

embeded18123102

你可以从这一语句中看到我们正在使用自定义编译程序标识CODE_SECTION来指定Flash_Init功能应放入链接器中的ramfuncs区域。该语句通常应该直接放在功能定义的上方,以提示任何操作该功能的开发人员要将它放到RAM中。 (这也使我们更容易找到它,如果我们认为该功能不需要放在RAM中的话)。

步骤#3:在启动时将功能复制到RAM

该过程的最后一步是确保在微控制器启动期间将我们想要在RAM中执行的功能真正被复制到RAM中。最简单的方法是使用memcpy。我通常在配置系统频率和中断向量表之后执行这一复制操作,但要在初始化板载外围和应用程序代码之前。我在步骤#1中提到过,我们定义的几个变量会在以后派上用场。它们是RamfuncsRunStart、RamfuncsLoadStart和RamfuncsLoadSize。我们将使用memcpy和这些变量将功能复制到RAM中,按照以下语句:

embeded18123104

就这么简单。完成后,开发人员只需简单调用功能,就像通常那样,该功能就可以在RAM中执行。


总结



总之,当开发人员从Flash执行应用程序代码时,他们可以将这些功能复制到RAM中,以加速执行程序代码的关键部份。从RAM执行一个功能将透过消除可能与从Flash存取指令相关的任何等待状态来提高执行速度。这种额外的提升可确保关键功能以尽可能快的速度执行。正如我们所看到的,一旦你操作一两次后,就会发现将功能加载到RAM中并执行其实非常简单。
 

本文为EET电子工程专辑原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
阅读全文,请先
您可能感兴趣
胡伟武表示,龙芯中科正在研发的新一代桌面处理器——龙芯3B6600虽然采用成熟工艺(14nm),但预计其单核和多核性能将达到使用先进工艺(7nm)的英特尔高端酷睿12~13代处理器的水平……
AMD官宣AMD 总裁 Victor Peng即将退休,将于 2024 年 8 月 30 日退休。在此期间,Victor Peng继续担任 AMD 执行团队的顾问,并支持过渡,直至退休。
可以很形象地把CUBE当成小号的HBM。如果说服务器上的GPU搭配的是大容量、高带宽的HBM,用于匹配高算力芯片,那么CUBE就是采用类似思路的定制化存储元件,最大的不同就是容量……
点球是一种速度极快的事件,通常只有零点几秒,但是理论上,通过人工智能(AI)使用统计数据和机器学习(ML)模型预测扑救是可能的。本文介绍了一个如何利用人工智能预测足球比赛中点球的案例研究。
“天工”身高163厘米,轻量化体重达43千克;机器人配备多个视觉感知传感器,配备每秒550万亿次操作算力。
基于OPS的教学设备在过去十年在中国及全球范围内得到了广泛的部署和应用。现在,是时候引入OPS 2.0技术来支持教育行业下一个十年的发展了。
• 得益于西欧、关键亚洲市场和拉丁美洲市场的增长,以及中国品牌的持续领先,全球折叠屏手机出货量在2024年第二季度同比增长了48%。 • 荣耀凭借其在西欧特别强劲的表现,成为最大的贡献者,成为该地区排名第一的品牌。 • 摩托罗拉的Razr 40系列在北美和拉丁美洲表现良好,为其手机厂商的出货量贡献了三位数的同比增长。 • 我们预计,头部中国手机品牌厂商的不断增加将至少在短期内抑制三星Z6系列在第三季度的发布。
AI技术的发展极大地推动了对先进封装技术的需求,在高密度,高速度,高带宽这“三高”方面提出了严苛的要求。
奕斯伟计算2024首届开发者伙伴大会以“绿色、开放、融合”为主题,从技术创新、产品应用、生态建设等方面,向开发者、行业伙伴等相关方发出开放合作倡议,加速RISC-V在各行各业的深度融合和应用落地,共同推动RISC-V新一代数字基础设施生态创新和产业发展。
2024年 Canalys 中国云计算渠道领导力矩阵冠军厂商分别是:阿里云、华为云和亚马逊云科技(AWS)
在全球智能手机竞争日益激烈的情况下,谁能在高端市场站稳脚跟,谁就占据了主动权。一直以来全球智能手机市场格局都是,苹果专吃高端,其他各大厂商分食全球中低端市场。但现在市场正在其变化。根据Canalys最
文|沪上阿YI路特斯如今处在一个什么样的地位?吉利控股集团高级副总裁、路特斯集团首席执行官冯擎峰一直有着清晰的认知:“这个品牌的挑战依然非常大。首先,整个中国市场豪华汽车整体数据下滑了30%~40%,
‍‍近期,IC 设计大厂联发科宣布了2024年上半年度的员工分红计划,与8月份薪资一起发放。据外界估算,按照上半年税前盈余约648.66亿新台币(约 144.42 亿元人民币)进行估算,此次分红总额接
近日,又一国产SiC企业宣布实现了主驱突破,并将出口海外。据“行家说三代半”的追踪统计,自2022年起,国内主驱级SiC器件/模块开始在多款车型中得到应用,尤其是2024年,本土供应商的市场份额显著上
‍‍‍‍上市PCB厂商竞国(6108)日前出售泰国厂给予陆资厂胜宏科技后,近日惊传台湾厂惊传12月前关厂,并对客户发布通知预告客户转移生產,最后出货日期2024年12月25日。至於后续台湾厂400名员
[关注“行家说动力总成”,快速掌握产业最新动态]9月6日,据“内江新区”消息,晶益通(四川)半导体科技有限公司旗下IGBT模块材料和封测模组产业园项目已完成建设总进度的40%,预计在明年5月建成。据了
8月28-30日,PCIM Asia 2024展在深圳举行。“行家说”进行了为期2天的探馆,合计报道了200+碳化硅相关参展企业(.点这里.)。其中,“行家说”还重点采访了长飞先进等众多企业,深入了解
展位信息深圳跨境电商展览会(CCBEC)时间:2024年9月11-13日 9:30-17:30地点:深圳国际会展中心(宝安)展馆:16号馆 16D73/16D75 展位报名注册准备好“观众注册”入场二
随着汽车智能化升级进入深水区,车载ECU(域)以及软件复杂度呈现指数级上升趋势。尤其是多域、跨域和未来的中央电子架构的普及,以及5G/V2X等车云通信的增强,如何保障整车的信息与网络安全,以及防范外部