美文网首页
【嵌入式】使代码在RAM中运行

【嵌入式】使代码在RAM中运行

作者: Blue_Well | 来源:发表于2020-06-11 15:11 被阅读0次

目前很多芯片都是with cache的运行机制,就是需要先把代码从Flash中拷贝到Cache中才能执行,这种方式有一个通病,就是代码首次被执行的时候速度会比较慢。如果是类似通过GPIO模拟一些协议的应用,那么这个问题就会直接造成第一次操作外设失败的情况,对于某些应用来说是不允许的。在keil中有一个比较好的方法,就是先将代码拷贝到RAM中再执行。
实现方法:
通过查看Option->Target,可以看到ROM的起始地址是0x1000000,RAM的起始地址是0x20003000,即我们的目标就是需要将代码拷贝到0x20003000地址中执行。

  1. 打开Option->Linker,然后按照以下步骤操作。
  1. 在.sct文件中增加以下代码,“RAMCODE”可以自定义。
  1. 将需要在RAM中执行的代码放在#pragma arm section code = "RAMCODE"和#pragma arm section之间,然后调用即可。

对比验证:
默认情况下,编译工程后从map文件可以看到,函数是存放在ROM(addr = 0x10005205)中的。

而通过上述方法编译后,函数改存放到RAM中(addr = 0x20003001)。

另外的方法:
右键main.c->Options for File,按照下图选择IRAM。

按照下图所示操作。

配置完之后,重新编译工程,下载到目标板中,main.c的代码就会在RAM中运行。

对比验证:
默认情况下,main函数会分配在ROM区(addr = 0x10005224)

经过上面的配置后,函数改存放到RAM中(addr = 0x20005478)。

总结
在ROM区执行和RAM区执行的区别在于,前者是只有当代码需要的时候,Cache才会从flash中搬出来运行,而后者是在上电初始化的时候就已经全部搬过去了,所以在运行的时候函数已经在RAM中了,并且这段代码会一直占用这个RAM不会被释放,类似于一个全局变量。前者如果超出了Cache的大小,可能会被释放掉,等下次执行的时候需要重新搬。

相关文章

  • 【嵌入式】使代码在RAM中运行

    目前很多芯片都是with cache的运行机制,就是需要先把代码从Flash中拷贝到Cache中才能执行,这种方式...

  • MPC5644 Code & Data

    1、MPC5644支持从RAM和internal_FLASH中执行代码。2、当选择在RAM中执行代码时,源代码进行...

  • EOS的RAM是怎么回事

    RAM是什么? RAM是指运行时的内存 ,在EOSIO系统中,RAM是一项宝贵的资源,将数据存储在区块链中要消耗该...

  • Python 数据库操作 SQLAlchemy

    程序在运行过程中所有的的数据都存储在内存 (RAM) 中,「RAM 是易失性存储器,系统掉电后 RAM 中的所有数...

  • 前端性能优化(基本)

    HTML 避免使用 内联式、嵌入式 代码在html页面中引入css、js代码有三种方式:“内联式”、“嵌入式”、“...

  • 注释和文档

    注释 注释是用于使代码更容易理解的代码的说明。它们不影响代码的运行。 在 Python 中,通过插入一个 # 来创...

  • 浅析嵌入式系统软件的可靠性测试难点

    目前,嵌入式软件的可靠性评价主要依赖测试,因为嵌入式软件的开发环境和软件在嵌入式系统中的运行环境是不同的,因此嵌入...

  • 异步编程:futures, async, await

    本代码是学习Future和async await关键字编写异步代码。使用嵌入式DartPad编辑器,您可以通过运行...

  • 怎么完善提高抗震支架在建设行业中的应用

    由于抗震支架对保证建筑物内电气设备的正常运行非常重要,在室外馈线的嵌入式工作中,应合理设计抗震支架的安装位置, 使...

  • Ubuntu 16.04 执行32位应用程序

    在嵌入式开发中,碰到一个问题,arm-v7-linux-uclibceabi-gcc编译工具在路径中,但不能运行。...

网友评论

      本文标题:【嵌入式】使代码在RAM中运行

      本文链接:https://www.haomeiwen.com/subject/viybtktx.html