提问:比如ARM,PowerPC等架构的MCU在上电后,存储在FLASH的程序(比如用户编写好的应用程序)执行过程是怎样的呢?FLASH中的代码是如何得到运行的呢?比如PC指针是在哪里由谁设置的?这些代码需要搬到RAM中才能运行吗?不这样做会有什么不妥吗?如果需要搬到RAM,那是片内还是片外有什么区别吗?如果用户存在FLASH的实际代码大小(比如1MB),超过了RAM的可用空间(比如512KB),那这个搬移过程是啥样的?片外扩展的FLASH和SRAM与片内的想比,除了空间大小有差别,性能速度上会有怎样的差异呢?
问题:在嵌入式系统中,并非所有的程序代码都必须搬到 RAM 中运行。
对于一些简单的、对性能要求不高的程序,可以直接在 FLASH 中运行。但对于大多数复杂的、对运行速度有较高要求的程序,通常会将其部分或全部搬到 RAM 中运行。
以 ARM、PowerPC 等架构的 MCU 为例,在上电后,通常会有一个引导程序(如 Bootloader)首先执行。引导程序会完成一些初始化工作,包括设置时钟、初始化内存控制器等,并将 FLASH 中的程序代码加载到 RAM 中(如果需要),然后设置程序计数器(PC 指针),开始执行用户编写的应用程序。
PC 指针的设置通常由引导程序来完成。
FLASH 中的代码可以直接在 FLASH 中运行,但其速度通常比在 RAM 中运行慢,并且 FLASH 的写入次数有限。如果不将代码搬到 RAM 中运行,可能会导致系统性能下降。
如果需要搬到 RAM 中,片内和片外的区别主要在于访问速度和功耗。片内 RAM 访问速度快、功耗低,而片外 RAM 访问速度相对较慢、功耗较高。
如果用户存储在 FLASH 的实际代码大小超过了 RAM 的可用空间,可能会采用部分搬移的策略,将关键的、频繁执行的代码搬移到 RAM 中,而将一些不常用或对性能要求不高的代码留在 FLASH 中运行。
片外扩展的 FLASH 和 SRAM 与片内相比,除了空间大小的差别,性能速度上通常片内的更快。片外的存储设备由于需要通过外部总线进行访问,存在一定的延迟,速度相对较慢。
|