硬汉嵌入式论坛

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

[BOOT/IAP] 请教一下从bootloader跳转到app时,为什么需要校验一个特殊的地址

[复制链接]

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-3-10 23:31:45 | 显示全部楼层 |阅读模式
本帖最后由 calom1992 于 2021-3-10 23:55 编辑

各位大佬们好。网上找了一段代码,STM32H750 VBT6 在片内Flash初始化 w25q64之后,跳转到片外flash执行程序之前,它做了一个判断:
code_2.png

关键在 app_IsReady(APPLICATION_ADDRESS)  这一行,我不明白为什么要校验 APPLICATION_ADDRESS  - QSPI_BASE也就是0的位置这个地址,后面的 0x2FF80000 、0x3FF80000 等又是什么含义呢?难道和ITCM、DTCM等内存结构相关吗?


我打断点,每次运行到 app_IsReady 这一函数内部的时候,得出 data 这个变量的值 为 0x7000c5d 或  0x7000c59,所以跳转不到APP。


实际上,我去掉了 if(app_IsReady(APPLICATION_ADDRESS) == SUCCESS )这个判断,直接调用 app_Jump 跳转到外置flash上执行APP,它是完全可以正常工作的。所以这个校验有什么意义呢?刚接触Stm32,求大牛解惑,万分感激!

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107488
QQ
发表于 2021-3-11 09:07:11 | 显示全部楼层
不用管,没用,删掉,APP程序的首地址是栈首地址,由于栈是向下生长的,这个一般也是RAM空间最大值(不考虑特殊分配)

APP程序我们在编译阶段完全知道是否超出RAM空间了,所以没有判断价值。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2021-3-11 11:43:27 | 显示全部楼层
eric2013 发表于 2021-3-11 09:07
不用管,没用,删掉,APP程序的首地址是栈首地址,由于栈是向下生长的,这个一般也是RAM空间最大值(不考虑 ...

非常感谢!
回复

使用道具 举报

0

主题

57

回帖

57

积分

初级会员

积分
57
发表于 2021-3-11 20:23:15 | 显示全部楼层
从启动地址上取值判断该值是不是在合法的内存地址上,是的话说明固件可能已经烧录了否则固件一定不存在或者已损坏。
这里仅仅是判断用的,有没有都行
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107488
QQ
发表于 2021-3-12 08:42:59 | 显示全部楼层
三尺长剑 发表于 2021-3-11 20:23
从启动地址上取值判断该值是不是在合法的内存地址上,是的话说明固件可能已经烧录了否则固件一定不存在或者 ...

如果是做固件完整性判断的话,此贴非常合适。

成功实现MDK自动生成hex文件的crc值并附加到hex文件末尾(bin也支持),然后跟STM32的硬件CRC计算值做比较
http://www.armbbs.cn/forum.php?m ... 7379&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

3

主题

66

回帖

75

积分

初级会员

积分
75
发表于 2021-3-12 09:27:28 | 显示全部楼层
能分享一下字体吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 18:44 , Processed in 0.213466 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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