打印

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

[复制链接]
130|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那个例子

使用特权

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

本版积分规则

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

快速回复

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

论坛热帖

在线客服 快速回复 返回顶部 返回列表
快3注册邀请码tt 周口市| 屏东县| 潮州市| 游戏| 海门市| 会东县| 仲巴县| 长治市| 长岭县| 丹寨县| 赫章县| 思南县| 漳州市| 福安市| 通榆县| 鄂伦春自治旗| 莱芜市| 高安市| 吕梁市| 台湾省| 江永县| 阿鲁科尔沁旗| 浪卡子县| 绥化市| 宁晋县| 南木林县| 义马市| 格尔木市| 蛟河市| 鹤岗市| 临桂县| 庆城县| 容城县| 阿拉尔市| 延吉市| 正镶白旗| 德清县| 北宁市| 平昌县| 德化县| 遵义市|