硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1236|回复: 6
收起左侧

[UART] 问题:基于串口的XYZmodem文件传输协议实现,含上位机和下位机全开源,制作了一个Ymodem方式固件更新(

[复制链接]

11

主题

50

回帖

83

积分

初级会员

积分
83
QQ
发表于 2024-12-14 20:46:10 | 显示全部楼层 |阅读模式
采用链接中方法,https://forum.anfulai.cn/forum.php?mod=viewthread&tid=114625
处理成功了,端口显示“处理完毕”,现在将app中的flash地址改为BootLoader中设置的flash地址,还是不会跳转到app中执行。还是是直接继续运行BootLoader后面的程序,这是为啥?
回复

使用道具 举报

11

主题

50

回帖

83

积分

初级会员

积分
83
QQ
 楼主| 发表于 2024-12-14 21:27:36 | 显示全部楼层
已解决,不知道原理移植的跳转中少了哪个步骤,后来重新写了跳转程序就可以了。
[C] 纯文本查看 复制代码
void jump_to_app(void)
{
    // 1. 声明函数指针,指向 APP 程序的复位处理函数
    pFunction app_reset_handler;

    // 2. 禁用全局中断,防止 BootLoader 中的中断影响 APP
    __disable_irq();

    // 3. 清除所有挂起的中断标志并禁用所有 NVIC 中断
    for (int i = 0; i < 8; i++)
    {
        NVIC->ICER[i] = 0xFFFFFFFF; // 禁用所有中断
        NVIC->ICPR[i] = 0xFFFFFFFF; // 清除挂起的中断
    }

    // 4. 关闭 SysTick 定时器,防止影响 APP 程序
    SysTick->CTRL = 0;

    // 5. 重定位向量表到 APP 的起始地址
    SCB->VTOR = APP_START_ADDR;

    // 6. 读取 APP 程序的栈顶地址(向量表的第 0 项)
    __set_MSP(*(volatile uint32_t *)APP_START_ADDR);

    // 7. 读取 APP 程序的复位处理函数地址(向量表的第 1 项)
    app_reset_handler = (pFunction)(*(volatile uint32_t *)(APP_START_ADDR + 4));

    // 8. 跳转到 APP 程序的复位处理函数
    app_reset_handler();

    // 9. 如果跳转失败,陷入无限循环
    while (1);
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117542
QQ
发表于 2024-12-15 09:25:41 | 显示全部楼层
wgco98 发表于 2024-12-14 21:27
已解决,不知道原理移植的跳转中少了哪个步骤,后来重新写了跳转程序就可以了。
[mw_shl_code=c,true]void ...

好的,解决了就好
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2025-1-10 09:04:57 | 显示全部楼层
哈哈哈,我看白老师给的上位机的案例中,分配额内存并没有释放。内存泄漏了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117542
QQ
发表于 2025-1-11 06:56:38 | 显示全部楼层
aure 发表于 2025-1-10 09:04
哈哈哈,我看白老师给的上位机的案例中,分配额内存并没有释放。内存泄漏了

上位机的那个位置,后面升级我得改进下。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2025-1-11 21:06:58 | 显示全部楼层
是那个xyzmodem.c的555行    char* buf = malloc(size);分配了,但是完成后没有释放这个内存
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117542
QQ
发表于 2025-1-12 07:17:30 | 显示全部楼层
aure 发表于 2025-1-11 21:06
是那个xyzmodem.c的555行    char* buf = malloc(size);分配了,但是完成后没有释放这个内存

谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-13 19:42 , Processed in 0.043007 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表