你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何开发与存储位置无关的 STM32 应用

[复制链接]
STMCU小助手 发布时间:2022-8-4 21:45
1. 前言! F# J) n" o& W( P4 }
最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。这样的优势是能使同一个固件被烧在 STM32 Flash 里的不同位置, 而在系统 Bootloader 里只需要跳到相应的位置就可以正常执行固件代码。客户希望STM32 代码从 Flash 里执行,不复制到 RAM 里;客户希望是一个完整的映像,而不仅仅是其中某个函数做到了位置无关。
4 g; k, b) U/ ~8 W: t
/ T7 z$ [6 f; R$ p$ s. Q2. 分析( e3 s: ^4 g7 _, }$ w5 j9 k
在嵌入式场景下,不一定有操作系统。即使有操作系统,一般也是 RTOS。一般 RTOS没有一个通用的程序加载器。因此,存储位置无关的需求,在这时可以说无关紧要。但是,如果客户需要进行在线固件更新,例如 IoT 应用的固件升级,那么位置无关就存在价值了。
7 D0 Z' j- C) L% b  ^/ O9 k位置无关之后,对于不同的软件版本,不需要频繁的为烧写位置的反复改变而修改编译链接脚本。也不需要在代码里显式的在两个 Bank 之间进行切换。# P7 W' V1 F' T3 O
最简单的情况是所有的代码都复制到内存执行。因为 Flash 的功能只是进行存储,自然对 Flash 的位置没有任何要求。但大部分 MCU 用户面临的真实案例都是 Flash 比较大,例如 ,1M 字节 ;RAM 比较小,例如,128K 字节。在这种情况下,代码在 Flash 原地执行就是一个必须的选择。& ?' n/ Q9 n/ L7 G" q
Flash 位置改变,会影响从 Bootloader 跳转之后的固件执行时的 PC 指针,也就是 PC指针值会发生相应的变化。位置无关的原理,是让应用程序经过编译后所生成的映像,其中的代码和数据,都是基于相对代码的位置进行引用。那么,当应用被搬到不同位置时,他们的相对位置不变,从而执行不受影响。
; a7 U5 Z7 ?7 G; w代码和数据基于绝对地址还是基于相对地址,是由编译器所决定。以客户要求的STM32CubeIDE 编译工具为例,我们可以看到在[Project]->[Properties]->[C/C++Build]->[Settings]->[Tool Settings]->[MCU GCC Compiler]->[Miscellaneous]已经有一项[Position Independent Code (-fPIC)]。6 n5 q  n' q0 o( K! J2 q$ V* f+ V
是否只要选一下-fPIC 选项就大功告成了呢?答案是没有那么简单。" S6 |) `, t" V1 J) G  ?
8 B; F; z# G- I. Q; u( Y$ V$ K
VR@E_]RKCHBPD2LM~WDO`AY.png
; l3 n& @7 w1 f1 T4 R0 }: Y& t4 R7 v
; e1 z" b* I) j7 g9 }
事实上,对于完整应用程序工程,用户应该经过这些步骤将其变成位置无关:
3 j2 c3 T9 J  I% g• 选择正确的编译器选项% x6 [0 f& S1 e! g8 g2 j  r
• 去掉或者替换掉那些包含绝对位置的库文件
5 ^& _9 [/ [: p; ~1 |8 L3 V• 修改代码中的 Flash 绝对地址(这里以 STM32H7 的 CRC_Example 例程为例,其他情况下有可能要修改更多) ! n( R  T, X8 @, F3 F
o 在 startup_xxx.s 汇编代码里的 sidata. c; _, p9 M" ]
o 在 system_xxx.c 里的 SCB->VTOR 以及中断向量表内容+ N0 I5 @7 Q. p6 g+ u) Z
o GOT
" t; _9 _: ?% n6 f( P, }5 o对于完整工程,要正确的跳转到应用程序进行执行,还需要由 Bootloader 向应用程序提供或者由应用程序在链接时自身解析计算,得到以下信息:
$ |1 Q) ?' X4 }+ \: g  B• Flash 偏移量
# f/ B, @) O" ]* m4 r• 中断向量表的开始以及结束地址$ D0 \# W( a# m0 Q+ c- z
• GOT 的开始以及结束地址7 h' \5 ~+ v) m! ^
我们接下来就举例说明这些步骤。
3 `! W  w5 o9 i
9 K. N8 F/ G0 [
6 z) V! v# Z8 h, c. Q7 }, C- _
完整版请查看:附件, }6 l+ J1 B5 k/ ^0 N/ i2 o; R1 [3 v
4 j' h8 \6 D: k! m1 G6 i  ~4 V- g

9 }( I. }) S6 ?/ }% b8 r4 N
# C* d9 r; d9 y' Q1 J
6 I5 M5 n, b! V- e  u' ]& |2 U

# O' g  @; W' s% i: ^  n: m, K

LAT1036 如何开发位置无关的STM32应用_V1.0.pdf

下载

682.82 KB, 下载次数: 70

赞 收藏 评论0 发布时间:2022-8-4 21:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版