基于旗芯微MCU里如何将flash的代码拷贝到RAM上运行

1.简述

在嵌入式开发里代码存储的最原始位置一定是在断电不丢失的存储器上比如flash.
旗芯微的MCU都是内置flash(XIP),所以程序运行时也是寻址flash上的代码
但是在某些情况下需要将flash上的代码拷贝到内存里执行(比如在bootloader里或者一些需要高效率执行的代码)。
本文将以FC4150 MCU为例子 简述将代码放到ram上运行的方法:

2.链接文件的处理

在flash.ld文件的section里面定义一个.code段(名称自定义,取名code是为了方便理解);同时在.code段里面定义一个.code_ram(后面函数或者变量可以定位到这个section里面);并且使用AT关键字指明该段的加载地址是来自哪里,>关键字指明运行地址在哪里;具体代码如下所示

	.code : AT(__CODE_ROM)
	{
		. = ALIGN(4);
		__CODE_RAM = .;
		__code_start__ = .;
		*(.code_ram);
		. = ALIGN(4);
		__code_end__ = .;
	}>RAM_U

如上图所示,需要一个flash的加载地址;如下面代码所示,使用__CODE_ROM .+ = 0x500;这里为啥需要在当前位置上偏移0x500的大小呢?主要是上面还有label标签被其他需要类似操作使用了,不然会有地址重叠的编译报错(overlap),所以用户需要自己根据flash的使用情况自行做偏移操作

  .text :
  {
  	. = ALIGN(1024); /* V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值