完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
原先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个回答
|
|
将延时程序搬到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)来存储延时程序,以提高执行速度。 希望这些建议能帮助你解决问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 11:06 , Processed in 0.796199 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号