我用bootloader接收完程序后,进入跳转APP始地址后,bootloader程序会复位,重新进入引导程序,这是为什么?这是我CMD文件编写有问题吗?始地址为0x3e8100; APP的begin 为0x3e8100
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我用bootloader接收完程序后,进入跳转APP始地址后,bootloader程序会复位,重新进入引导程序,这是为什么?这是我CMD文件编写有问题吗?始地址为0x3e8100; APP的begin 为0x3e8100
您好,
始地址为0x3e8100; APP的begin 为0x3e8100
是同一个地址吗?请重新说明一下。
关于程序无法运行,请检查BootLoader是否正确地进行擦除并烧写了,另一个是APP程序本身能否正常运行?
APP程序单独可以刷进去,BootLoader读取0x3e8100地址写进去了,程序和校验也过了。您看看我的两个CMD有什么问题吗?BootLoaderode code
MEMORY
{
PAGE 0 :
BEGIN : origin = 0x3F7FF6, length = 0x000002 /* 普通应用或者BOOT应用 = 0x33FFF6。跳转型APP = _APP_HEAD */
SECT_POG : origin = 0x3F0000, length = 0x007F80
SECT_RFUN : origin = 0x008000, length = 0x000800 /* 0x010000 - SECT_RAM */
CSM_RSVD : origin = 0x3F7F80, length = 0x000076
CSM_PWL : origin = 0x3F7FF8, length = 0x000008
OTP : origin = 0x3D7800, length = 0x000400
RESET : origin = 0x3FFFC0, length = 0x000002
IQTABLES : origin = 0x3FE000, length = 0x000b50
IQTABLES2 : origin = 0x3FEB50, length = 0x00008c
BOOTROM : origin = 0x3FF27C, length = 0x000D44
VECTORS : origin = 0x3FFFC2, length = 0x00003E
PAGE 1 :
BOOT_RSVD : origin = 0x000002, length = 0x00004E
RAM_STACK : origin = 0x000050, length = 0x0007B0 /* 堆栈放在M0M1内存 */
SECT_RAM : origin = 0x008800, length = 0x00800
}
SECTIONS
{
codestart : > BEGIN, PAGE = 0
.text : > SECT_POG, PAGE = 0
/* IQ暂时未使用 */
ramfuncs : LOAD = SECT_POG, RUN = SECT_RFUN,
LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart), PAGE = 0
Flash28_API:
{
-lFlash2803x_API_V100.lib(.econst)
-lFlash2803x_API_V100.lib(.text)
} LOAD = SECT_POG,
RUN = SECT_RFUN,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),
PAGE = 0
.cinit : > SECT_POG, PAGE = 0 /* cinit、econst段建议放在代码段尾部 */
.econst : > SECT_POG, PAGE = 0
.stack : > RAM_STACK,PAGE = 1
.esysmem : > SECT_RAM, PAGE = 1
.ebss : > SECT_RAM, PAGE = 1
/* DMA暂时未使用 */
/*
DMARAML4 : > RAML4_7, PAGE = 1
DMARAML5 : > RAML4_7, PAGE = 1
DMARAML6 : > RAML4_7, PAGE = 1
DMARAML7 : > RAML4_7, PAGE = 1 */
IQmath : > IQTABLES, PAGE = 0 , TYPE = NOLOAD /* Math Code */
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */
vectors : > VECTORS PAGE = 0, TYPE = DSECT
csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT
csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT
}
APP CODE
MEMORY
{
PAGE 0 :
BEGIN : origin = 0x3E8100, length = 0x000002 /* 跳转型APP = _APP_HEAD */
/* BEGIN : origin = 0x33FFF6, length = 0x000002 /* 普通应用或者BOOT应用 */
SECT_POG : origin = 0x3E8102, length = 0x006EFE
SECT_RFUN : origin = 0x009000, length = 0x000800 /* 0x010000 - SECT_RAM */
CSM_RSVD : origin = 0x3F7F80, length = 0x000076
CSM_PWL : origin = 0x3F7FF8, length = 0x000008
OTP : origin = 0x3D7800, length = 0x000400
RESET : origin = 0x3FFFC0, length = 0x000002
IQTABLES : origin = 0x3FE000, length = 0x000b50
BOOTROM : origin = 0x3FF27C, length = 0x000D44
VECTORS : origin = 0x3FFFC2, length = 0x00003E
PAGE 1 :
BOOT_RSVD : origin = 0x000002, length = 0x00004E
RAM_STACK : origin = 0x000050, length = 0x0007B0 /* 堆栈放在M0M1内存 */
SECT_RAM : origin = 0x009800, length = 0x000800
}
SECTIONS
{
codestart : > BEGIN, PAGE = 0
.text : > SECT_POG, PAGE = 0
ramfuncs : LOAD = SECT_POG, RUN = SECT_RFUN,
LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart), LOAD_SIZE(_RamfuncsLoadSize), PAGE = 0
.cinit : > SECT_POG, PAGE = 0 /* cinit、econst段建议放在代码段尾部 */
.econst : > SECT_POG, PAGE = 0
.stack : > RAM_STACK,PAGE = 1
.esysmem : > SECT_RAM, PAGE = 1
.ebss : > SECT_RAM, PAGE = 1
IQmath : > SECT_POG PAGE = 0 /* Math Code */
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */
vectors : > VECTORS PAGE = 0, TYPE = DSECT
csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT
csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT
}
我 bootloader Flash代码
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
MemCopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart);
APP Flash 代码
memcpy((uint16_t *)&RamfuncsRunStart,(uint16_t *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
您好,
我不是很明白下面两行
BEGIN : origin = 0x3F7FF6, length = 0x000002 /* 普通应用或者BOOT应用 = 0x33FFF6。跳转型APP = _APP_HEAD */
SECT_POG : origin = 0x3F0000, length = 0x007F80
BEGIN 地址来自 3F7FF6,SECT_POG 地址小于 3F0000。您能否检查此 BEGIN 地址。
我在其他配置的部分中没有看到任何问题,但我将继续进一步分析它。
您能否检查生成的MAP文件,确认section映射正确。