|

楼主 |
发表于 2012-7-23 16:02:49
|
显示全部楼层
本帖最后由 longxigen 于 2012-7-23 16:04 编辑
回复 2# windflood
To windflood:您好,感谢您的回复。
我以前没有接触过bootloader,这几天一直在网上查资料,看见一种方法是用函数指针实现地址跳转,如下图所示:
上面是一个单独的地址跳转代码,但不知道能不能成功。bootloader就是一段拷贝应用程序的代码再加上地址跳转的代码,但我试过几次都没有成功。。。下面是我现在的bootloader代码,暂时还没有成功,调试的时候没有看到PC跳转到想要去的地址。
//=====================================================================
#include "xparameters.h"
#include "stdio.h"
#include "xutil.h"
#define APP_FLASH_LOC
XPAR_FLASH_CNTLR_0_MEM0_BASEADDR
#define APP_BRAM_LOC
XPAR_XPS_BRAM_IF_CNTLR_1_BASEADDR
#define APP_LENGTH
0x4E84
//=====================================================================
void main (void)
{
u32
flash_ptr;
u32
bram_ptr;
u16
data_flash;
u16
data_bram;
u16
i;
void (* bootloader)();
printf("Copy beginning\r\n");
flash_ptr = APP_FLASH_LOC;
bram_ptr = APP_BRAM_LOC;
for(i=0;i<=APP_LENGTH-1;i++)
{
data_flash = XIo_In16(flash_ptr);
XIo_Out16(bram_ptr,data_flash);
data_bram = XIo_In16(bram_ptr);
if(data_bram != data_flash)
printf("i = %d, error ocurs.\r\n",i);
flash_ptr = flash_ptr + 0x0002;
bram_ptr = bram_ptr + 0x0002;
}
printf("Copy finished\r\n");
bootloader = (void(*)())(APP_BRAM_LOC);
(* bootloader)();
} |
|