硬汉嵌入式论坛

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

[有问必答] 关于MCU bootloader与app的固件版本号存放位置

[复制链接]

76

主题

208

回帖

436

积分

高级会员

积分
436
发表于 2021-12-1 16:04:53 | 显示全部楼层 |阅读模式
像这种版本号信息一般放到哪?mcu内部flash?eeprom?
因为内部flash的页大小是2k,那么存在内部flash至少会占用到2k
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2021-12-1 16:46:21 | 显示全部楼层
简单易用,存在这里就可以:
QQ截图20211201164605.png
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
 楼主| 发表于 2021-12-1 17:22:16 | 显示全部楼层
eric2013 发表于 2021-12-1 16:46
简单易用,存在这里就可以:

这个0x00000207是地址,还是表示V1.00?
读时直接取地址么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2021-12-1 17:35:25 | 显示全部楼层
薪火相传 发表于 2021-12-1 17:22
这个0x00000207是地址,还是表示V1.00?
读时直接取地址么?

这个你随便表示,每个可以记录32bit数据,我们简单的注释了个V1.00,不必介意。
对,直接对读取这个地址内容即可。


回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
 楼主| 发表于 2021-12-1 18:03:57 | 显示全部楼层
eric2013 发表于 2021-12-1 17:35
这个你随便表示,每个可以记录32bit数据,我们简单的注释了个V1.00,不必介意。
对,直接对读取这个地址 ...

我还是有点不太明白,这个地址是特定的还是?好像不是内部闪存的地址
回复

使用道具 举报

334

主题

2036

回帖

3043

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3043
发表于 2021-12-2 09:11:14 | 显示全部楼层
薪火相传 发表于 2021-12-1 18:03
我还是有点不太明白,这个地址是特定的还是?好像不是内部闪存的地址

这就是一个内部的flash地址,大概是0x8000 001C
第一个DCD __initial_sp就是flash的首地址。后面每一行占用4个字节,也就是地址依次增加4个字节。
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
 楼主| 发表于 2021-12-2 11:40:08 | 显示全部楼层
caicaptain2 发表于 2021-12-2 09:11
这就是一个内部的flash地址,大概是0x8000 001C
第一个DCD __initial_sp就是flash的首地址。后面每一行 ...

所以上面那个0x00000207只是个指针变量的名称?我能不能这样定义一个名称?这样会报错

1.png




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2021-12-2 11:55:25 | 显示全部楼层
薪火相传 发表于 2021-12-2 11:40
所以上面那个0x00000207只是个指针变量的名称?我能不能这样定义一个名称?这样会报错

这个默认是存到内部Flash的。
回复

使用道具 举报

0

主题

99

回帖

99

积分

初级会员

积分
99
发表于 2021-12-2 13:31:56 | 显示全部楼层
薪火相传 发表于 2021-12-2 11:40
所以上面那个0x00000207只是个指针变量的名称?我能不能这样定义一个名称?这样会报错

在40行后加一行
  1. IMPORT boot_ver
复制代码

应该就不会报错了,当然前提是你已经在其他C文件定义了一个名为boot_ver的全局字符串变量
回复

使用道具 举报

334

主题

2036

回帖

3043

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3043
发表于 2021-12-2 13:47:13 | 显示全部楼层
薪火相传 发表于 2021-12-2 11:40
所以上面那个0x00000207只是个指针变量的名称?我能不能这样定义一个名称?这样会报错

DCD是个汇编指令,后面是一个数据。 它是32bit的。 你可以写98976436之类的。 也可以用0x93784634。

你如果写boot_ver ,那么就需要补充定义一个数据给boot_ver。
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
 楼主| 发表于 2021-12-2 14:05:47 | 显示全部楼层
caicaptain2 发表于 2021-12-2 09:11
这就是一个内部的flash地址,大概是0x8000 001C
第一个DCD __initial_sp就是flash的首地址。后面每一行 ...

是0x0800 001C
回复

使用道具 举报

76

主题

208

回帖

436

积分

高级会员

积分
436
 楼主| 发表于 2021-12-2 14:09:01 | 显示全部楼层
可以了,感谢几位小伙伴的解答,抱拳!
1.png

2.png



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2021-12-2 19:11:16 | 显示全部楼层
薪火相传 发表于 2021-12-2 14:09
可以了,感谢几位小伙伴的解答,抱拳!

不容易,终于搞定了
回复

使用道具 举报

5

主题

30

回帖

45

积分

新手上路

积分
45
发表于 2022-1-10 10:59:11 | 显示全部楼层
有点疑问,为什么定义版本号不能直接在代码里面直接定义一个变量 uint32_t g_version = 2001// 表示V2.0.0.1     每次版本修改了,直接修改这个变量就好了。。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2022-1-11 11:34:05 | 显示全部楼层
xdh873939316 发表于 2022-1-10 10:59
有点疑问,为什么定义版本号不能直接在代码里面直接定义一个变量 uint32_t g_version = 2001// 表示V2.0.0. ...

我理解的是为了实现不经过用户程序即可得到版本号的目的,比如程序变板砖了。又或者主程序去获得BOOT程序的版本,直接读绝对地址就可以。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 12:31 , Processed in 0.206578 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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