单片机 ram 中执行代码的 如何链接
单片机的程序一般默认从Fash启动。要想在RAM执行程序,首先得单片机支持,一般只要Flash和RAM是统一编址的都可以在RAM运行程序。
程序的启动一般都是从一个固定地址(厂家规定)启动的,而这个地址一般都不在RAM地址范围内。因此常用的做法是在单片机厂家规定的启动的地址开始处预先烧录一段启动代码,这就是我们常说的BootLoader,然后再在BootLoader中按照单片机的运行规则跳转到RAM中代码(我们一般称为App程序)的起始地址。
链接的不同之处就是ROM模型,一般,按照单片机对应的开发工具,默认都是将ROM的起始地址设置到了厂家规定的启动地址处,要将程序编译到其他地址,只需要找到这个ROM的配置修改其起始地址和空间大小即可。例如Keil里面的Target页面或者sct文件,还有DSP中的link文件……
根据上述说明可知想要在非厂家规定的地址跑程序,需要有一个BootLoader引导程序(如果是使用在线仿真器仿真跑可以不要):
App程序:链接到实际需要的地址(可能是Flash也可能是RAM),如果为RAM要注意掉电后程序丢失;
BootLoader程序:链接到厂家规定的启动地址,在BootLoader中再通过软件跳转到App的地址。