2019-03-23 20:31发布
我现在的板子是从用户区启动的,我想把内部的用户区分成两个部份,前面16K是一个BOOT区,剩下的是一个应用区。BOOT区会检查是否要更新应用区程序,如果需要则更新,否则运行应用区程序。我昨天看了一段USB更新的代码。仿了一下好像不行。
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
u32 JumpAddress;
int main(void)
{
if (((*(vu32*)0x8003000) & 0x2FFF0000 ) == 0x20000000)
{ /* Jump to user application */
JumpAddress = *(vu32*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__MSR_MSP(*(vu32*) ApplicationAddress);
Jump_To_Application();
}
这一块好像是跳转过去的。应用区好像是分配在0x08003000。我昨天用这一段下载到0x08003C00,然后把另一个之前用的程序下载到0x08003C00,程序运行到__MSR_MSP这个函数的时候就死在那里了,应该是堆栈之类的出问题,回不去了。
最多设置5个标签!
我现在的板子是从用户区启动的,我想把内部的用户区分成两个部份,前面16K是一个BOOT区,剩下的是一个应用区。BOOT区会检查是否要更新应用区程序,如果需要则更新,否则运行应用区程序。我昨天看了一段USB更新的代码。仿了一下好像不行。
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
u32 JumpAddress;
int main(void)
{
if (((*(vu32*)0x8003000) & 0x2FFF0000 ) == 0x20000000)
{ /* Jump to user application */
JumpAddress = *(vu32*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__MSR_MSP(*(vu32*) ApplicationAddress);
Jump_To_Application();
}
}
这一块好像是跳转过去的。应用区好像是分配在0x08003000。我昨天用这一段下载到0x08003C00,然后把另一个之前用的程序下载到0x08003C00,程序运行到__MSR_MSP这个函数的时候就死在那里了,应该是堆栈之类的出问题,回不去了。
[ 本帖最后由 SF-BVC 于 2011-4-22 15:11 编辑 ]一周热门 更多>