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.

[参考译文] AWR1642:有关引导加载程序的问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/626916/awr1642-question-about-boot-loader

器件型号:AWR1642

你(们)好

我想 通过 CAN 实施在线升级! 但我遇到了一些小问题。 我要使用的结构是 USERS_LOADER + Client_app。

boot_loader 的顺序如下:

1、系统复位后,PC 将跳转到复位矢量并 执行 boot_loader。

2、boot_loader 将判断引导模式(闪存模式),之后 ,引导装载程序将我的 USERS_LOADER 的代码从闪存复制到内部 RAM 中。

3、引导加载程序跳转到 c_int00函数(它只是一个跳转指令),和 c_int00将跳转到 USERS_LOADER 的主函数。然后将执行所有 USERS_LOADER。

4、USERS_LOADER 将监控外部信号是否需要在线升级。如果需要,USER_LOADER 将捕获代码数据并存储在闪存中。 如果不是,(假设我的 client_app 已经在闪存中)  

    Users_loader 会将 client_app 从闪存复制到内部 RAM。

5、然后 USERS_LOADER 跳转到 client_app 主函数。然后将执行我的所有 client_app。

但我得到 了一些拼图、如下所示:

1)第3步中。  c_int00将跳转到主函数,引导加载程序是否会自动获取 mian 函数地址?如果不是,则如何获取主函数的起始地址?

  我将按 以下:检查文件 boot.c

  RetVal =_args_main();

  XDC_Runtime_System_exit (RetVal);

 但我没有遵循这一点!

2)在步骤4中,如果我需要升级代码。 将代码捕获到 RAM 后,我需要跳转至 c_int00,或者我只需要跳转至 Client_app 的主函数(Client_app 的主地址与 users_loader 的主地址不同)?

 如果跳转至 c_int00,c_int00如何知道跳转至 users_loader 的主函数或 Client_app 的主函数。或者还有其他一些方法?

BR  

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

    你好、Havi、

    您的在线升级结构似乎很好!

    回答以上问题:

    1.在应用程序的引导加载(在本例中为 USERS_LOADER)后、会占用 ROM、执行从 RAM 的地址0 (应用程序的复位矢量)开始。

    2.有2种可能:

    a) Client_app 是 Users_loader 应用程序的扩展(这意味着矢量表在应用程序之间共享)。 在这种情况下、您可以跳转到 Client_app 中的预定义条目函数。

    b) Client_app 是独立的应用程序。 在这种情况下、链接器 cmd 文件(属于 Client_app)中的起始地址必须偏移一个大于 USERS_LOADER 大小的值。 然后、在客户端应用程序被 laoed 后、矢量表(Client_app 的)可能会被复制到地址0 (覆盖 USERS_LOADER)、然后导致 R4复位。 这将导致从复位矢量开始执行、然后控制权将跳转到 Client_app。

    此致、

    Naveen