SMARTWATCH 学习手册有 C 基础 · 嵌入式从零开始
五 B / 无线固件升级 / 00

上电以后,处理器怎样走到 main

先认识程序存放位置、复位入口和启动代码,再引入负责选择应用的启动加载程序。当前手表尚未实现完整无线固件升级。

主线存储、无线协议、复位与 C 指针;启动过程在第一篇补齐。

1 · 先把“更新什么”说清楚

更新对象实际改变什么
类别原型一组数据,当前可以在 RAM 更新与传输。
神经网络计算结构、权重或接口,可能改变内存和生成代码。
应用固件包含处理器指令与常量的可执行程序,需要正确启动。

前三条支线已经接触原型与模型。本部分讲完整应用更新,需要解决存储、启动、失败恢复,而不是把原型恢复载荷换成更大文件就完成。OTA 是 Over-the-Air 的缩写,表示通过无线链路取得更新内容,实际 Flash 编程仍会发生。

2 · 处理器不会从文件名寻找 main

编译和链接把函数、常量、变量初始化信息放到安排好的位置。链接脚本决定这些位置,生成的可执行文件供下载或打包工具使用。main 是语言层入口,芯片复位后先按体系结构规定寻找启动信息。

Cortex-M 的向量表包含初始栈指针、复位处理入口以及异常中断入口。复位处理函数会进行运行环境准备,例如初始化数据区、清零相应变量,再进入应用。读取项目 startup_stm32u575xx.s、链接脚本与 map 文件,可以看到这些关系。

3 · Flash 与 RAM 为什么都出现在启动过程

Flash 保存掉电后仍存在的程序和常量,RAM 保存运行中的数据与栈。一些有初值变量的初始内容来自 Flash,启动时复制到 RAM;未显式初始化的静态变量通常清零。修改链接地址会影响这些安排,不能只把程序文件换个位置存放。

图中把地址范围按用途画成块:启动区、应用区、运行数据区。真实范围需要根据芯片型号、容量、安全配置及当前镜像大小审查,本教程不提供未经核对的固定擦写地址。

4 · 启动加载程序负责哪一步

具体跳转还涉及 Cortex-M33、安全状态、中断及外设条件,不能仅调用一个普通 C 函数地址。
具体跳转还涉及 Cortex-M33、安全状态、中断及外设条件,不能仅调用一个普通 C 函数地址。 · 教学示意

启动加载程序英文叫 Bootloader。它应在应用出错或升级失败时仍保留恢复能力。当前仓库没有已接入的 OTA Bootloader,后面的普通文件模型先解释决策,不冒充可烧录实现。

5 · 准备进入存储设计

查 STM32U575 数据手册与参考手册中的容量、Flash 组织和启动章节,记录所用具体型号。再看当前链接脚本与构建产物。先掌握已有应用实际占用和入口安排,才有条件决定升级暂存区。

动手观察

从当前工程找到向量表、复位入口和 main 的先后关系。分别解释“文件在 Flash 中存在”和“处理器能正确执行它”还差哪些启动条件。

资料与代码