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.

[参考译文] TMS570LS1227:TMS570LS1227分支指令

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1095439/tms570ls1227-branch-instruction-for-tms570ls1227

部件号:TMS570LS1227

TMS570LS1227,即Cortex R4。

我需要跳转到特定地址(例如:0x4万)。 它是从引导到应用程序的跳转。

此处应使用什么组装说明集。 跳转完成后,除非重置完成,否则我不想返回Bootloader部分。

我尝试了BLX指令。 它跳转到应用程序代码。执行几个指令后,切换到调用它的bootloader。

对于相同部件,正确的装配说明应该是什么?

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

    Lokesh,您好!

    我使用以下方法将代码执行分支到新位置,例如0x2万

    1) ASM (" mov R12,0x2万");

       ASM (" blx R12");

    2) C代码:

      ((void (*)(void)) 0x2万)();   

    两者都应正常工作,没有任何问题。 您的代码是否会导致重置?  

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

    案例1:

    asm (" mov R12,0x2万");

       ASM (" blx R12");  

    刷新十六进制文件后,将验证写入的应用程序十六进制文件,然后在上创建Appflag。

    发生重置,检查Appflag,即验证应用程序文件,然后调用跳转例程   

    asm (" mov R12,0x2万");

       ASM (" blx R12");  

     被调用  

    它跳至0x2万地址(在反汇编列表中观察)。执行几个指令,当处于连续运行状态时;不执行应用程序代码,而是执行重置,然后再次执行bootloader。

    再次检查Appflag,即验证应用程序文件,然后跳过例程 。 仅保留在Bootloader中。

      ((void (*)(void))0x2万)();  完全不工作  

    刷新十六进制文件后,将验证写入的应用程序十六进制文件,然后在上创建Appflag。

    发生重置,检查Appflag (即验证应用程序文件),然后调用跳转例程,其中   调用(void (*)(void))0x2万)();   

    但它不起作用。 仅保留在Bootloader中。

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

    是否有任何更新?

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

    您的应用程序是否位于0x2万处?

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

    是的

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

    您的引导加载程序是否接受十六进制格式数据并将十六进制数据编程为闪存? 我的引导加载程序示例仅支持原始二进制文件格式。

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

    它是Intel Hex文件格式

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

    要 执行的任何其他更改,如在中断向量表中进行的更改?

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

    0x20万处的说明似乎不正确。 如果将应用程序编程为从x20万开始闪烁,则0x20万处的说明为:

    EA00xxxx   -->跳转至_c_int00()

    EAFFFFFFFE  -->无缺陷

    EAFFFFFFFE  -->服务入门

    EAFFFFFFFE  -->预取入门

    EAFFFFFFFE  -->数据端

    ... ...

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

    Lokesh,您好!

    是否可以使用我的引导加载程序示例以二进制格式加载应用程序?  

    您可以使用CCS生成二进制文件:

    键入以下命令:

    "${cce_install_root}/utils/tiobj2bin/tiobj2bin""${BuildArtifactFileName}""${BuildArtifactFileBaseName}.bin""${CG_tool_root}/bin/armofd""${CG_tool_root}/bin/armhex"

    生成-->步骤-->生成后步骤:

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

    我设计的Flash工具使用十六进制文件格式作为输入。

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

    QJ Wang,您好,我们不能将十六进制文件用于同一个微控制器系列吗?

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

    Lokesh,您好!

    是的,您可以使用十六进制文件。 请查看0x20万处的说明吗?

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

    QJ Wang,您好!

    在此之前,我有一个问题。 请浏览我随附的Word文件 。e2e.ti.com/.../305.2022万.docx

    在cmd文件和intvecs.asm文件中所做的更改应该是什么

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

    在Application cmd文件中,如果使用了上述地址,则应用程序在没有bootloader的情况下独立执行时不会运行。

    如果没有bootloader,0x20万处的代码将无法执行。  

    只要 内核重置,ARM Cortex-R4F处理器内核就会从0x0万的重置矢量地址开始执行。  

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

    QJ Wang,您好!

    好的,同意您的意见。

    现在,我附上了一个PDF文件,我在其中写下了所有观察结果和面临的问题。

    请浏览bootloader和Application文件的cmd和sys_intvecs.asm文件内容。

    0x2万位置处的说明也与此相同。

    请告诉我wrong.e2e.ti.com/.../405.2022万.pdf的发展方向

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

    您好,QJ Wang,您好吗?

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

    它保留在预取条目中

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

    嘿,QJ Wang,有什么更新吗?  

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

    您好,Lockesh:

    在_c_int00_()中的第一个函数调用是 :_coreInitStackPointer_();

    您能否进入此功能以检查哪个指令导致预取中止?