TI中文支持网
TI专业的中文技术问题搜集分享网站

bootloader下载程序完毕后,跳转至应用程序时进入错误中断该如何解决?(应用程序经过仿真器下载后可以正常运行)

Part Number: Bootloader下载程序后会触发错误中断

以下是我bootloader程序中,对memory的分配。应用程序下载的起始地址为0x00010020。

以下是我应用程序的cmd文件中,对memory的分配

此时在使用can口将程序下载进flash后,调用((void (*)(void))g_ulTransferAddress)()后,程序进入prefetchEntry。

以下是我改动应用程序的cmd文件后,对memory的分配。

此时在使用can口将程序下载进flash后,调用((void (*)(void))g_ulTransferAddress)()后,程序进入undefEntry。

请问我该如何修改应用程序的cmd文件?

Annie Liu:

为更加有效地解决您的问题,我需要询问更了解这款芯片的TI资深工程师,再为您解答,一旦得到回复会立即回复给您。

,

Annie Liu:

请问你使用哪款处理器?

,

fengaov:

RM57L843的开发板

,

Annie Liu:

请在 Application Linker 的 CMD 文件中更改分配给 VECTORS 和 FLASH_CODE 的内存:

VECTORS  (x)  : origin=0x00010020  length=0x00000020

FLASH_CODE (RX) :origin=0x00010040 length=0x30000-0x40

,

fengaov:

我将Application的CMD文件按照您说的更改以后,运行到 ((void (*)(void))g_ulTransferAddress)()时,进入prefetchEntry中断,g_ulTransferAddress = 0x00010020。请问该问题是什么原因导致的?同时我将Application程序通过仿真器下载至0x10020后,又在0x00000000debug了bootloader程序,此时运行 ((void (*)(void))g_ulTransferAddress)()后,跳转至0x10020处的程序是可以正常运行的。请问一下我通过can传输下载至flash中的程序为何无法正常跳转?

,

Annie Liu:

在Application的sys_startup.c中,由于SYSESR寄存器在bootloader中被清零,getResetSource()的返回值为0x0。 请向默认部分添加一些代码,如下所示:

以下是我的application example中的代码(蓝色):

rstSrc = getResetSource();switch(rstSrc){  case POWERON_RESET:

   … …

   … …

  default:         /* USER CODE BEGIN (21) */

if(rstSrc != POWERON_RESET){_memInit_();}_coreEnableEventBusExport_();

if ((esmREG->SR1[2]) != 0U){esmGroup3Notification(esmREG,esmREG->SR1[2]);}systemInit();_coreEnableIrqVicOffset_();vimInit();esmInit();

         /* USER CODE END */

   break;

}

,

fengaov:

我按照您说的更改了application的cmd文件和sys_startup.c如图所示

通过bootloader下载application程序后运行至((void (*)(void))g_ulTransferAddress)()后,程序又进入了undefEntry中断。

,

Annie Liu:

代码执行不是跳转到 0x10020 处的 Application 吗?

fengaov 说:运行到 ((void (*)(void))g_ulTransferAddress)()时,进入prefetchEntry中断

fengaov 说:运行至((void (*)(void))g_ulTransferAddress)()后,程序又进入了undefEntry中断

您得到了哪个异常:prefetch 还是 undef?

您可以手动检查 0x10020 处的内容以确保其正确吗?

,

Annie Liu:

请检查 Cortex-R CPU 的 Instruction Fault Status Register的值:

,

fengaov:

按您的要求更改cmd文件和sys_startup.c后进入undefEntry中断。

0x10020处内容与下发的hex文件内容一致。

,

fengaov:

错误状态寄存器的值如图所示

,

fengaov:

请问hex文件是选择binary类型吗

,

Annie Liu:

如果您使用  TI bootloader example,请使用以下方法为应用程序生成二进制文件:

Post-build steps

"${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/armofd" "${CG_TOOL_ROOT}/bin/armhex" "${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin" 

bootloader example不支持其他二进制格式或十六进制格式。

赞(0)
未经允许不得转载:TI中文支持网 » bootloader下载程序完毕后,跳转至应用程序时进入错误中断该如何解决?(应用程序经过仿真器下载后可以正常运行)
分享到: 更多 (0)