STM32
直播中

刘慧

7年用户 1700经验值
私信 关注
[问答]

为什么将延时程序搬到RAM中运行反而变慢了?

原先delay()在主循环中演示闪灯的,后来搬到RAM中运行,发现闪灯变慢了,怎么会在RAM中运行反而比flash中更慢??

以下是一段小的测试代码:
unsigned long i=0,count=80000;
int _fctcpy(char name);
#pragma section (CODE_IN_RAM)
void Delay(void)
{
   for(i=0;i

回帖(1)

木頭瓶子

2024-5-7 17:42:31
将延时程序搬到RAM中运行变慢的原因可能有以下几点:

1. **缓存问题**:在Flash中运行的代码通常会被CPU的指令缓存所缓存,这可以减少从Flash读取指令的时间。而RAM中的数据可能没有被缓存,因此每次读取指令都需要从RAM中读取,这会增加指令的执行时间。

2. **编译器优化**:在编译过程中,编译器可能会对Flash中的代码进行优化,以提高执行速度。然而,当代码被移动到RAM中时,这些优化可能不再适用,导致执行速度降低。

3. **内存访问速度**:RAM的访问速度通常比Flash慢。虽然RAM的读写速度较快,但与Flash相比,其随机访问速度可能较慢。这可能导致在RAM中运行的代码执行速度较慢。

4. **中断和上下文切换**:如果将延时程序搬到RAM中运行后,系统需要处理更多的中断和上下文切换,这可能会影响程序的执行速度。

5. **代码大小**:如果RAM中的代码比Flash中的代码大,那么在RAM中运行时,可能需要更多的内存访问,从而导致执行速度降低。

为了解决这个问题,你可以尝试以下方法:

1. **优化代码**:检查并优化你的代码,以减少不必要的内存访问和指令执行。

2. **使用缓存**:如果可能,尝试使用CPU的缓存来提高RAM中代码的执行速度。

3. **调整编译器设置**:检查编译器的设置,确保对RAM中的代码进行了适当的优化。

4. **减少中断和上下文切换**:尽量减少在RAM中运行的代码中的中断和上下文切换,以提高执行速度。

5. **代码分割**:将代码分割成较小的部分,以减少RAM中的内存访问。

6. **使用更快的存储器**:如果可能,使用更快的存储器(如高速SRAM)来存储延时程序,以提高执行速度。

希望这些建议能帮助你解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分