当前位置: 首页 > news >正文

STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践

导言


STM32 - Embedded IDE - GCC - 如何在工程中生成.bin格式固件
STM32 - Embedded IDE - GCC - 使用 GCC 链接脚本限制 Flash 区域
STM32 - Embedded IDE - GCC - 如何在工程中定义一段 NoInit RAM 内存
STM32 - Embedded IDE - GCC - 如何将编译得到的.bin固件添加CRC32校验码

迁移的GCC的过程碰到不少问题,汇总一下(最恶心的是第二点):

  1. EIDE插件 + J-LINK + RTT打印log的组合不好用。所以log打印从RTT改到USART2上了。
  2. booloader程序使用GCC编译器时,出现跳转App前进入HardFault_Handler()。奇怪的是用Keil的ARMCC编译App程序话,可以稳定地成功跳转。换GCC编译的App程序时,跳转必然失败,然后进入HardFault_Hanler()中断。

OTA升级过程:
在这里插入图片描述
在这里插入图片描述
项目地址:
github: https://github.com/q164129345/MCU_Develop/tree/main/bootloader14_stm32f103_move_to_vscode_eide
gitee(国内): https://gitee.com/wallace89/MCU_Develop/tree/main/bootloader14_stm32f103_move_to_vscode_eide

一、修改bootloader程序


booloader程序使用GCC编译器时,出现跳转App前进入HardFault_Handler()。奇怪的是用Keil的ARMCC编译的的App程序话,可以稳定地成功跳转。换GCC编译的App程序时,跳转必然失败,然后进入HardFault_Hanler()中断。
在这里插入图片描述
如上图所示,解决方案很简单,只需要将函数IAP_JumpToApp()里的代码SCB->VTOR = AppAddr注释掉即可。

原因分析

  • 中断时机冲突:在 Bootloader 中设置 SCB->VTOR 后,CPU 立即使用 APP 向量表,但如果此时有中断(调试器相关),就会导致向量表混乱和 HardFault。

为什么在Keil环境可以,换成GCC就不行?

  • 只能说,不同编译器可能产生的细微差异。

文章转载自:

http://LBz5ktXP.mztyh.cn
http://fBUj2KB4.mztyh.cn
http://FoHcGqo0.mztyh.cn
http://ZHeYEDzA.mztyh.cn
http://c3ym5xIz.mztyh.cn
http://cWRvT87B.mztyh.cn
http://cO4VLM5m.mztyh.cn
http://Q50IZlgd.mztyh.cn
http://Jvk2tTTQ.mztyh.cn
http://MG5UeMo0.mztyh.cn
http://F9bcKCm7.mztyh.cn
http://8ulOAOh7.mztyh.cn
http://Xtj76W2K.mztyh.cn
http://31aoeDB1.mztyh.cn
http://tXWGSkmm.mztyh.cn
http://tSYCdMzU.mztyh.cn
http://4CKHh4iT.mztyh.cn
http://BHrk5BNg.mztyh.cn
http://KkIdcVpz.mztyh.cn
http://Woa3urO2.mztyh.cn
http://NW3s12Xp.mztyh.cn
http://BrOatrpd.mztyh.cn
http://0sbD2S0d.mztyh.cn
http://ixexuxUg.mztyh.cn
http://gF9fGC2s.mztyh.cn
http://mYP8ohAD.mztyh.cn
http://0IVuYHJf.mztyh.cn
http://xY8zU5o9.mztyh.cn
http://ebIHa2je.mztyh.cn
http://oephRaX5.mztyh.cn
http://www.dtcms.com/a/367404.html

相关文章:

  • 神马 M21 31T 矿机解析:性能、规格与市场应用
  • 解析 Quartz 报错:Table ‘test.QRTZ_LOCKS‘ doesn‘t exist 的解决方案
  • 【高等数学】第十一章 曲线积分与曲面积分——第二节 对坐标的曲线积分
  • 产品推荐|千眼狼宽光谱高速摄像机NEO系列
  • ECIES实现原理
  • Linux安装RTL8821CE无线网卡驱动
  • 下载及交叉编译libconfig
  • AutoLayout与Masonry:简化iOS布局
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
  • upload-labs通关笔记-第17关文件上传关卡之二次渲染jpg格式
  • 人工智能机器学习——逻辑回归
  • Java Web 是技术与产业的 “交叉赋能点”
  • Linux笔记---UDP套接字实战:简易聊天室
  • 新增MCP工具管理,AI对话节点新增工具设置,支持对接企业微信机器人,MaxKB v2.1.0版本发布
  • 2025年数学建模国赛C题超详细解题思路
  • 【论文阅读】-《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》
  • 小迪web自用笔记27
  • 不会战略、不会融资、不会搭团队?别叫自己 CTO
  • ⸢ 肆 ⸥ ⤳ 默认安全建设方案:b.安全资产建设
  • 【高分论文密码】大尺度空间模拟预测与数字制图
  • 机器翻译:腾讯混元团队开源的模型 Hunyuan-MT 详解
  • #数据结构----2.1线性表
  • IT需求提示未读信息查询:深度技术解析与性能优化指南【类似:钉钉已读 功能】
  • RAG(检索增强生成)-篇一
  • 解密注意力机制:为何它能在Transformer中实现高效并行计算?
  • 2025跨境独立站最新最完整的搭建流程
  • 2025年百度商业AI技术创新大赛赛道二:视频广告生成推理性能优化-初赛第五名,复赛第九名方案分享
  • VS code如何下载安装
  • 跨部门共享研发文档总是困难重重该如何改善
  • 关于如何在PostgreSQL中调整数据库参数和配置的综合指南