[应用方案] 如何实现实现启动任意地址上的固件:

[复制链接]
132|3
 楼主 | 2019-11-28 18:59 | 显示全部楼层 |阅读模式
背景:
我用自定义协议, 通过 USB VCOM下载固件 FMC_APROM_SIZE/2 的位置.

问题:
1. 如何 下载完毕后就自动加载此位置上的固件.
2. 如何在下次开机时, 如何加载FMC_APROM_SIZE/2地址上的固件.
3. 如果下次升级, 固件放在位置 FMC_APROM_BASE地址上了, 那么M453在启动时, 如何知道当前应到的是那个地址上的固件呢.

使用特权

评论回复
 楼主 | 2019-11-28 19:01 | 显示全部楼层
void check_firmware_reload(void)
{
    uint32_t u32Now = FMC_GetVECMAP();         
    log_info(LOG_ERR, "[%d] indexFW=%d, u32Addr=0x%0x  u32Now=0x%x", fw_test_idx++, flash_partion.idx_used, flash_partion.addr_used);
    delay_ms(100);   
   
    if (flash_partion.idx_used != 0)
    {
        FMC_SetVectorPageAddr(flash_partion.addr_used);
        SYS_ResetCPU(); //PC直接指到 0的地方重新执行程序
        while (1);
    }
}
这是我实现的部分代码, 不能实现我的预想, 应该怎么做呢?

使用特权

评论回复
| 2019-11-29 11:23 | 显示全部楼层
搞个计数写入闪存,用于记录第几次开机。或者是否为重启,有个标志的,不同复位类型是不一样的标志

使用特权

评论回复
| 2019-11-29 11:24 | 显示全部楼层
可以查看sys那个例子

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表