大家好,首先简单介绍下我的工作,我的硬件平台是STM32F207ZGT,软件使用eCos系统。
我要实现的功能:
1. 固件程序在flash中运行(Rom启动方式 ),它相当于一个小型的bootloader(类似于redboot)。
2. 固件程序可以接收应用程序(RAM启动方式),并将其存储在片外Ram中。
3. 完成应用程序的下载及存储,马上跳转到RAM中执行新的应用程序。
目前存在的问题:
1. 在redboot模式下,可以直接把应用程序load 到Ram中,然后输入命令 go 0x64008011,新的应用程序就开始执行了。
2. 我的固件程序可以自动接收应用程序,然后存储在Ram中,但是没办法跳转到Ram中。(应用程序在redboot模式下测试过,没有任何问题,存储的地址也是正确的) 我使用的代码如下,不能成功跳转。
HAL_DISABLE_INTERRUPTS(oldints); //屏蔽中断
__asm__ volatile("ldr sp,=0x64800000" ); //设置堆栈指针
(*(void (*)(void))(0x64008011))(); //跳转PC指针
网上有关于STM32的IAP相关代码,但那个是针对flash跳转到flash的,我这个是从flash跳转到ram,不能称作是IAP,纯粹用于调试目的,掉电后应用程序不保存。只有固件程序是保存在flash中的。不知道我是否说清楚了,请大家帮帮忙,谢谢!
|