上电以后,处理器怎样走到 main
先认识程序存放位置、复位入口和启动代码,再引入负责选择应用的启动加载程序。当前手表尚未实现完整无线固件升级。
1 · 先把“更新什么”说清楚
| 更新对象 | 实际改变什么 |
|---|---|
| 类别原型 | 一组数据,当前可以在 RAM 更新与传输。 |
| 神经网络 | 计算结构、权重或接口,可能改变内存和生成代码。 |
| 应用固件 | 包含处理器指令与常量的可执行程序,需要正确启动。 |
前三条支线已经接触原型与模型。本部分讲完整应用更新,需要解决存储、启动、失败恢复,而不是把原型恢复载荷换成更大文件就完成。OTA 是 Over-the-Air 的缩写,表示通过无线链路取得更新内容,实际 Flash 编程仍会发生。
2 · 处理器不会从文件名寻找 main
编译和链接把函数、常量、变量初始化信息放到安排好的位置。链接脚本决定这些位置,生成的可执行文件供下载或打包工具使用。main 是语言层入口,芯片复位后先按体系结构规定寻找启动信息。
Cortex-M 的向量表包含初始栈指针、复位处理入口以及异常中断入口。复位处理函数会进行运行环境准备,例如初始化数据区、清零相应变量,再进入应用。读取项目 startup_stm32u575xx.s、链接脚本与 map 文件,可以看到这些关系。
3 · Flash 与 RAM 为什么都出现在启动过程
Flash 保存掉电后仍存在的程序和常量,RAM 保存运行中的数据与栈。一些有初值变量的初始内容来自 Flash,启动时复制到 RAM;未显式初始化的静态变量通常清零。修改链接地址会影响这些安排,不能只把程序文件换个位置存放。
图中把地址范围按用途画成块:启动区、应用区、运行数据区。真实范围需要根据芯片型号、容量、安全配置及当前镜像大小审查,本教程不提供未经核对的固定擦写地址。
4 · 启动加载程序负责哪一步
启动加载程序英文叫 Bootloader。它应在应用出错或升级失败时仍保留恢复能力。当前仓库没有已接入的 OTA Bootloader,后面的普通文件模型先解释决策,不冒充可烧录实现。
5 · 准备进入存储设计
查 STM32U575 数据手册与参考手册中的容量、Flash 组织和启动章节,记录所用具体型号。再看当前链接脚本与构建产物。先掌握已有应用实际占用和入口安排,才有条件决定升级暂存区。
从当前工程找到向量表、复位入口和 main 的先后关系。分别解释“文件在 Flash 中存在”和“处理器能正确执行它”还差哪些启动条件。