你(们)好
我想 通过 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
六