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:跳转至应用地址的分支汇编指令

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1092913/tms570ls1227-branch-assembly-instruction-for-jump-to-application-address

部件号:TMS570LS1227

尊敬的TI团队:

跳转至应用地址的分支组装说明。

要从Bootloader跳转至应用程序代码,应使用哪个程序集指令以及如何使用该程序集指令。 装配说明必须写入C文件。

谢谢,此致,

Vijay B. Shinde

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

    您好,Vijay,

    1.您可以使用以下C指令跳转至应用程序

        (void (*)(void)) g_ulTransferAddress)();

    2.或AM装配说明:

      ASM ("  BLX Rm");

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

    尊敬的QJ Wang:

    感谢您的回复。 但下面仍有一些疑虑。

    1)此RM符号是如何定义的,定义在哪里?

    例如,应用程序代码地址从0x8万开始,因此必须如何在配置文件和上述ASM BLX RM指令中定义它。

     2)  ((void (*)(void))g_ulTransferAddress)();:这是任何库函数吗?  

    谢谢,此致,

    Vijay B. Shinde

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1)此1227此符号404.8255万符号定义404.8255万定义的方式和位置[/rm]

    RM是任何MCU通用寄存器。

    应用1227应用程序404.8255万程序代码404.8255万代码地址在ASM/BL800X中开始,请引用/BL800X,如何在上面的配置文件中定义。

    asm (" mov R12,#0x8万");

    ASM (" blx R12");

    2)   ((void/ifue)1227((void/ifue)</s>404.8255万 404.8255万

    不,这是来自我的bootloader示例项目。 g_ulTransferAddress是应用程序的启动地址。

        

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

    尊敬的QJ Wang:

    感谢您的回复。 但下面仍有一些疑虑。

    1) ASM (" mov R12,#0x20万");

       ASM (" blx R12");

          在CCS编译器中无法正常工作

          在此行进行调试时,我们也不能放置断点。

    2) 请您提供相应程序的定义:

        #define app_start_address              0x2万U

        G_ulTransferAddress =(UINT32_t) app_start_address;

      (void (*)(void)) g_ulTransferAddress)();

    谢谢,此致,

    Vijay B. Shinde

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

    您好,Vijay,

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

       ASM (" blx R12");

    应该正常工作。

    这是一个示例。 0x5960是sciInit()的地址。

    2)  

    请1227请提供404.9976万提供相应404.9976万相应例程的定义[/报价]:

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

    在上述函数调用中,(void (*)(void))是数据类型:指向不接受参数且返回void的函数的指针。

    0x2万是要转换的地址。 类型转换后,函数指针指向地址0x2万。 请注意,我们在  数据类型和0x2万周围放置了括号()。 如果我们只想将0x2万类型转换为函数指针,则不需要这样做。 但是,由于我们将调用该函数,因此需要使用这些括号。

    将数字常量转换为指针与通过指针调用函数不同。 为此,我们必须指定参数列表。 这就是行末尾的()的作用。

    请注意,此表达式中的所有括号都是必需的。 分组和优先顺序非常重要。

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

    好的。 感谢您的回复。 我们将检查并回复。 谢谢