硬汉嵌入式论坛

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

[STM32H7] STM32H750执行可选择新旧程序吗?

[复制链接]

9

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2020-11-20 11:30:01 | 显示全部楼层 |阅读模式
我现在STM32H750MCU,内部只有128K FLASH,目前外部QSPI接口8MB FLASH,
请问办法程序放在外部FLASH,然后启动类似BANK的方式决定执行程序

主要是希望在程序更新可以保留版的程序
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-11-20 11:52:45 | 显示全部楼层
APP双备份? 没问题,你用内部Flash做bootloader即可。
回复

使用道具 举报

9

主题

11

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2020-11-20 16:06:06 | 显示全部楼层
eric2013 发表于 2020-11-20 11:52
APP双备份? 没问题,你用内部Flash做bootloader即可。

如果不修改鏈接器腳本的條件下...

而鏈接器是由0x90000000開始放CODE...
Firmware 1和Firmware 2都是同一份CODE編出來的...只是新舊有一點點小差異..
而放Firmware時,
Firmware 1由0x90000000開始放..
Firmware 2由0x90400000開始放..

當跳到Firmware 2執行時,CPU怎麼處理程式裡的相對位址?
STM32H750有功能可以處理這個功能嗎?
請問要看哪裡的資料?
回复

使用道具 举报

8

主题

33

回帖

57

积分

初级会员

积分
57
发表于 2020-11-20 16:35:31 | 显示全部楼层
对于没有mmu的微控制器,如果你用gcc,你需要一个叫fPIC的flag来生成位置无关的代码,同时需要管理GOT变量来进行相对跳转的定位
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-11-21 09:35:57 | 显示全部楼层
foretell 发表于 2020-11-20 16:06
如果不修改鏈接器腳本的條件下...

而鏈接器是由0x90000000開始放CODE...

MDK的下载算法就是这么玩的,生成与位置无关的编码,擦除,校验等函数,然后用户可以加载到任意位置,方便MDK控制下载成功。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-11-21 09:36:37 | 显示全部楼层
MDK可以先了解下这个

MDK的Read-only position independence和Read-Write position independence
http://www.armbbs.cn/forum.php?m ... 1049&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

9

主题

11

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2020-11-21 18:22:54 | 显示全部楼层
请问程式里面有用到touchgfx的lib,加fPIC编译后,这部分的lib也会编译成与位置无关的code吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107157
QQ
发表于 2020-11-21 20:25:07 | 显示全部楼层
foretell 发表于 2020-11-21 18:22
请问程式里面有用到touchgfx的lib,加fPIC编译后,这部分的lib也会编译成与位置无关的code吗?

没问题,别说是库,整个工程都可以。

Position-Independent Code (PIC) 就是我6楼发的ad-only position independence和Read-Write position independence
回复

使用道具 举报

9

主题

11

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2020-12-11 18:09:47 | 显示全部楼层
jisaowang2 发表于 2020-11-20 16:35
对于没有mmu的微控制器,如果你用gcc,你需要一个叫fPIC的flag来生成位置无关的代码,同时需要管理GOT变量 ...

請問GOT變量怎麼管理?
是不是在進入APP之前,需要從FLASH裡的某個表的所有值都加上一個OFFSET,
然後複制到GOT裡?或是只要在某個地方加個OFFSET就可以了?
回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2020-12-12 08:15:28 | 显示全部楼层
最保险应该是程序中去掉所有的goto语法。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 02:29 , Processed in 0.175078 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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