目前嵌入式中,很多产品都是将程序(也叫做固件)烧录在flash中,产品上电启动后,就会从flash中加载运行程序。此处加载运行程序就可以分为两类:在flash上直接运行、从flash中加载至ram中运行,其中在flash上直接运行就叫做xip。这两种方式各有优缺,如xip可以减少ram大小,而flash要比ram便宜,理所当然可以大幅降低成本;但是完全加载至ram中运行速率却是最高的,要比xip执行效率更高。大多数时候,高速flash配合I-Cache、D-Cache速率是完全跟得上的,所以现在大多数产品普遍默认采用xip方式运行程序。
所以本文主要分析如何将程序烧录在flash中,然后将部分程序加载至ram中运行(如一个文件、一个函数等等)予以提高程序性能。此法不需要诸如jlink等jtag仿真工具,使用常规用法即可。
以arm为例,一般地址规划为:0x08000000为flash起始地址,0x20000000位ram起始地址。0x地址一般为rom/bootloader,cpu上电启动一般从0x0处启动,然后由rom/bootloader进行跳转才能执行到我们所编写的程序中。对于我们编写的程序通常会定义一个入口点,当进入我们的程序时,可以理解为就是执行这个入口点函数。
以编译工具链选择arm gcc为例,定义入口点函数entry_point,通常在链接文件中定义:
ENTRY(entry_point)
🔒 本文后半部分需关注公众号解锁
请在公众号回复“文章解锁”获取验证码。

验证码 5 分钟内有效,单次使用