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.

[参考译文] 跳至应用程序时输入错误中断

Guru**** 2562120 points
Other Parts Discussed in Thread: RM57L843

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1080724/enter-error-break-when-jumping-to-application

“线程”中讨论的其它部件:RM57L843

大家好,团队

引导加载程序下载程序后触发错误中断。 (通过仿真器下载后,应用程序可以正常运行)

以下是 bootloader 程序中的内存分配。  应用程序下载的起始地址是0x00010020。

以下是应用程序的 cmd 文件中的内存分配。

此时,在使用 CAN 端口将程序下载到闪存中后,调用((void (*)(void)g_ulTransferAddress)())后,程序将进入 prefetchEntry。

以下是更改应用程序的 cmd 文件后的内存分配。

此时,在使用 CAN 端口将程序下载到闪存中后,调用((void (*)(void)) g_ulTransferAddress())后,程序将进入 undefEntry。

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

谢谢,

安妮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Annie,

    请提供更多信息。  正在使用什么处理器?  

    谢谢你,

    ~Leonard   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    列奥纳德,你好!

    开发板,用于 RM57L843。

    谢谢,

    安妮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安妮,您好!

    请在 Application Linker CMD 文件中更改分配给引导程序和 flash_code 的内存:

    引导 程序(x) :Origal=0x00010020 length=0x00000020

    Flash_code (RX):Original=0x00010040 length=0x30000-0x40

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ 您好,

    如您所述更改应用程序的 CMD 文件后,当它运行到((void (*)(void))g_ulTransferAddress)()时,将输入 prefetchEntry 中断,g_ulTransferAddress = 0x00010020。 请问  原因是什么?

    同时,通过仿真器将应用程序下载到0x10020后,引导加载程序将以0x00000000调试。 此时,在运行((void (*)(void))g_ulTransferAddress)()后,跳至0x10020的程序可以正常运行。  为什么下载到闪存的程序无法正常跳转?

    谢谢。

    安妮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ 您好,

    我是否可以知道有人对这种情况提出了建议?

    谢谢,

    安妮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安 妮,您好!

    在应用程序的 sys_startup.c 中,由于在 bootloader 中清除了 SYSESR 寄存器,getResetSource()的返回值为0x0。 请按照下面的步骤向默认部分添加一些代码:

    以下是我的应用程序示例中的代码(蓝色):

    rstSrc = getResetSource();
    交换机(rstSrc)

     案例 poweron_reset:

      (笑声) (笑声)

      (笑声) (笑声)

     默认值:
         /*用户码开始(21)*/

    IF (rstSrc != poweron_reset)

    _memInit_();
    }
    _coreEnableEventBusExport_();

    如果(((esmREG->SR1[2])!= 0U)

    esmGroup3通知(esmREG,esmREG->SR1[2]);
    }
    SystemInit();
    _coreEnableIrqVicOffset_();
    vimInit();
    esmInit();

         /*用户代码结束*/

      休息;

    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ 您好,

    已按您所述更改应用程序的 cmd 文件和 sys_startup.c。

    通过引导加载程序下载应用程序后,将其运行到((void (*)(void)g_ulTransferAddress)(),该程序将再次输入 undefEntry 中断。

    您是否会帮助再次检查?

    谢谢,

    安妮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安 妮,您好!

    代码执行是否不会跳转到0x10020处的应用程序?

    ~引用 userid="41964" URL"~支持/微控制器/基于 ARM 的微控制器-组/基于 ARM 的微控制器/f/基于 ARM 的微控制器-论坛/1080724/输入-错误-中断-跳到应用程序/4002938#4002938">当微控制器运行到((void (*)(72)/enter-example-fortrl -程序)/400微控制器/以应用程序为基础的互连地址[envid/fid/example-trintrane[*]/400)/以应用程序的微控制器[envid]/fet-fortr-trate-trate-tranes[e[en/strate-fortrate-fortrate-fortrane*]

    您得到了以下哪一个例外:预取中止或 DEDEF?

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     请检查 Cortex-R CPU 的指令故障状态寄存器的值:

        

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ,

    根据您的建议更改 cmd 文件和 sys_startup.c 后,输入 undefEntry 中断。  0x10020处的内容与传递的十六进制文件的内容一致。

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

    十六进制文件是否选择二进制类型?

    谢谢,

    安妮

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安妮,您好!

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

    构建后步骤

    "${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin"{BuildArtifactFileName}"${BuildArtifactFileBaseName}.bin""${CG_TOO_BROOT}/bin/armofd""${CG_TOOTOO_BOT/mkarm2"/jhex_install"  

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