OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2979|回复: 4

关于STM32程序自己如何获取自己所占FLASH空间大小的问题。

[复制链接]

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-5-27
在线时间
6 小时
发表于 2020-6-13 09:50:17 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 robinhoodhobby 于 2020-6-13 09:53 编辑

想知道程序所占大小的目的是想自己把FLASH里已有的APP程序,发送出来或转移(只针对APP,bootloader和数据均不动)。
或者是程序结尾地址或程序结尾标识符,不知道有没有这种标识符。

比如,假设FALSH空间为1M(0x0010 0000)里面程序和数据有:Bootloader(假设0x0800 0000开始,  占用空间 0x0000 1000),
APP1        (假设0x0800 5000开始,占用空间(不确定,后面问题详细说明)),
数据         (假设0x0808 0000开始,占用空间 0x0000 1234),起始地址和空间大小可能会随APP变。

假设APP1程序版本及大小分别为A1=100K,     A2=200K,     A3=128K;
情况分析
A1由SWD下载进FLASH,那么A1所占用的空间是从 0x0800 5000开始后的100K空间所占用的扇区(假设占用扇区x1,x2,x3,x4)。因为是SWD下载,所以无法将程序长度写到特定地方(比如X)保存(编译后才得知长度,不可能提前写入程序代码)。
A2由IAP更新,那么A2会根据自身大小,先清掉200K所占用的扇区,然后开始更新,所占用的空间是从 0x0800 5000开始后的200K空间所占用的扇区(假设占用扇区x1,x2,x3,x4,x5)。因为是IAP更新,所以可以在IAP程序里算出程序长度,写到特定地方保存(比如X)。

A3由SWD下载进FLASH,那么A3会根据自身大小,先清掉128K所占用的扇区,然后开始更新,所占用的空间是从 0x0800 5000开始后的200K空间所占用的扇区(假设占用扇区x1,x2,x3,x4)。因为是IAP更新,所以可以在IAP程序里算出程序长度,写到特定地方保存(比如X)。  此时扇区x5可能任然存在数据(这里是根据下载bootloader后再下载APP后,bootloader程序并不会丢失,推测SWD下载时并不会全片数据清除,如不是这样的机制,请大佬解答一下)。

思路1:从FALSH 0x0808 0000开始,反向查找第一个非0xFFFF FFFF数据来判断程序结尾。  困惑点或难题点:如果是遇见A3这种情况,那不是找到的是假的程序结尾处了么。

思路2:以APP的0x0800 5000为CODE数据开始点,以数据的 0x0808 0000为CODE数据结束点。  困惑点或难点:如果这样,因为APP的大小不确定,那事先就要规划好一大片区域,不能比最终APP小,但是最终APP有可能很大,有可能很小,如果最终APP很大,那还好说,至少都用上了,如果最终APP很小,那不就浪费很多空间了么。

思路3:不知道SWD下载或者编译器编译好后,会自动把大小放在某个位置,然后可以通过 MDK或IAR设置,在SWD下载时自动将此数据放到FLASH固定地址位。

思路4:STM32编译器编译出最终程序 是否有固定的程序结尾标识符,通过搜索此结尾标识符,达到找到程序结尾处目的。








最佳答案

查看完整内容[请看2#楼]

可以把生成的hex或者bin文件的结尾加上自定义数据,应该没有影响的,bin文件我加过,hex没实验过,不过应该也可以
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2019-3-21
在线时间
103 小时
发表于 2020-6-13 09:50:18 | 显示全部楼层
可以把生成的hex或者bin文件的结尾加上自定义数据,应该没有影响的,bin文件我加过,hex没实验过,不过应该也可以
回复

使用道具 举报

1

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2019-3-21
在线时间
103 小时
发表于 2020-6-13 11:55:18 | 显示全部楼层
而且你的APP大小就是你生成bin文件的大小
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-5-27
在线时间
6 小时
 楼主| 发表于 2020-6-13 14:39:04 | 显示全部楼层
WYW6 发表于 2020-6-13 11:52
可以把生成的hex或者bin文件的结尾加上自定义数据,应该没有影响的,bin文件我加过,hex没实验过,不过应该 ...

这个我知道啊,你说的这个是A2情况,我是知道的。都属于离线下载。

主要是想知道在在线调试状态下下载的程序,怎么能自识别大小。
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-5-27
在线时间
6 小时
 楼主| 发表于 2020-6-14 19:14:01 | 显示全部楼层
顶, 别沉了啊,管理员你给我评的这个最佳答案我不满意。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-1 09:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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