我刚刚遇到了一些宏,供我的微控制器编译器强制(或建议)从RAM执行函数。
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
在什么情况下有价值?如果好处只是提高速度,为什么我不总是从RAM中执行?这通常会导致更高的电流消耗吗?
我刚刚遇到了一些宏,供我的微控制器编译器强制(或建议)从RAM执行函数。
http://processors.wiki.ti.com/index.php/Placing_functions_in_RAM
https://community.nxp.com/thread/389099
在什么情况下有价值?如果好处只是提高速度,为什么我不总是从RAM中执行?这通常会导致更高的电流消耗吗?
Answers:
除了其他人已经提到的速度和其他功能外,从RAM执行代码在需要重新编程Micro Flash的引导加载程序中很有用-您无法从正在擦除&中间的Flash执行代码。重新编程。
我没看过那个微型的数据表。但是,在这种情况下,通常情况是,从RAM取数据要比从实现程序存储器的闪存取数据快。
闪光灯的优点是大量可以相对便宜。因此,微控制器制造商有时会在芯片上放置大量闪存,然后提供可以执行代码的更有限的RAM空间。这允许将对时间要求严格的例程复制到RAM中,然后从那里执行它们。
您引用的编译器开关可能与链接器配合使用,并标记将从复位开始运行的编译器运行时代码将该段闪存复制到RAM。不同的实现将在细节上有所不同。
除了所有好的答案:
如果好处只是提高速度,为什么我不总是从RAM中执行?
因为在嵌入式系统中,通常您没有所需的RAM数量。例如,具有32kB或RAM和512kB EEPROM的STM32。为了能够在RAM中执行整个程序,您将需要一个大于EEPROM的RAM。
从RAM执行代码比从闪存执行代码要快得多。大多数CPU经过严格优化,以实现最快的RAM访问,甚至最快的闪存也仅达到RAM速度的一小部分。
但是请记住,将代码从闪存移动到RAM也需要时间。如果代码仅执行一次,则只需读取一次,因此实际上会浪费时间来将其首先复制到RAM中,而不是直接执行。如果偶尔执行代码(因此将其复制到RAM会增加第二次调用的执行力),但是系统通常处于空闲状态,那么通过将其复制到RAM可以更快地执行该代码,但是没人管,因为系统有足够的时间来度过。
因此,只有在频繁执行代码并且将其视为系统的瓶颈时,这种优化才值得付出努力。
另一方面,RAM需要主动保存数据,而闪存则不需要,因此如果RAM需要保持活动状态,则总功耗会增加。但是,只有在根本不使用RAM的情况下,这才有意义,但是大多数现代系统将以一种或另一种方式使用可用的RAM,因此已经使其保持活动状态。
RAM的另一个用例是针对随机位翻转的执行安全性。我们在小型cubesat上使用此模型,因为主计算机板具有可承受辐射引起的位翻转的ECC内存。当启动时的虚拟磁盘在ECC环境中完全运行时,整个OS都加载到ram中。
闪存不受ECC保护(标准的现成Micro SD卡),但是我们还有其他方法来检查是否损坏(多个图像,校验和等)。