楼主很厉害,赞一个,可惜我水平太低有一个地方看不懂,麻烦楼主给解释一下,就是从Flash跳到RAM中的实现方法,
//跳入RAM区继续执行本程序,即PC值由0x0800xxxx 变为 0x2000xxxx
__asm void JMP_RamCode_asm( void )
{
ADD LR, #0x18000000
BX LR
}
程序跳转不是应该修改PC值吗,上面这个函数是修改LR的值,LR是连接寄存器,作用是当跳入一个子程序时,LR存储这个子程序执行完后要返回的地址。
修改LR就能跳转到RAM中去执行,这一点我不太明白,应该是有地方我没理解到位,望楼主能给解释一下。
再一个就是我用IAR编译器写的,编译时这个跳转函数报错,"Error[403]: Illegal register, 'LR' is not allowed 。貌似是不让修改这个寄存器。是不是修改这个寄存器还需要什么特殊的设置那,希望楼主指点一下。非常感谢!
|