几个要运行在RAM中运行程序的场景
在嵌入式系统开发中,MCU的开发有别于嵌入式Linux系统的开发。其中有一点的区别就非常的大,程序存储区。在MCU设计中,例如STM32,程序是下载到片上Flash中。当程序完成上电之后,MCU的PC指针与SP栈便从Flash中约定的位置(0x80000000)开始取数,并顺序执行下去了。
在RAM中运行程序的场景
在各家MCU的设计里面,大家都可以看到Flash的大小一般要几倍于RAM——原因就是成本。我们也知道,我们的代码是可以运行在RAM中的,那么问题来了?什么样的程序需要运行在RAM中呢?
1.在对Flash进行重新编程(Bootloader)期间,某些功能将从RAM执行,如擦除flash,向flash写入数据。代码不能在被擦除/编程的同一flash中运行。在一些芯片中,当对flash执行操作时,flash不允许访问。因此,需要将代码段放在RAM中并执行
2.在对Flash进行重新编程(Bootloader)期间,中断向量地址和ISR将被放置并从RAM执行
3.从RAM执行的引导加载程序。引导加载程序功能最安全的方法是从主机设备接收引导加载程序文件,并将完整的代码放在RAM中
4.在RAM中运行程序比在flash中运行要快得多,例如,将频繁执行的代码放在RAM中以优化时间
5.嵌入式系统中的一些调度器在RAM中创建任务,这些任务指向flash中的程序
P.S.我尝试地写了几段程序,感觉还挺难的。程序的复杂度直线上升,所以,没有必要还是在flash中运行吧!稳定,可靠!