STM32/STM8技术论坛
直播中

石正厚

7年用户 1106经验值
私信 关注
[问答]

对于keil target界面的设置一直弄不懂

回帖(12)

李维嘉

2018-12-29 09:47:49
给你传个“涂鸦”的程序参考一下


bootloader判断是否有正确的应用程序。如果有,则跳转到相应首地址执行。


地址到底是多少呢?两项加一下,也就是0x0800 2000。


APP中ROM、RAM设置,可见ROM首地址为0x0800 2000
举报

石正厚

2018-12-29 10:03:14
谁懂啊
举报

刘德凤

2018-12-29 10:08:47
第二张图,你框选出来的地方,有个解释:
一般来说,这个工程的代码是 APP 代码,下载进去之后,起始地址在 0x8010000
如果你有 bootloader 的话,可以将 bootloader 工程在图中同样的位置设置为 0x8000000 size:0x10000


这样 MCU 上电之后,先从 0x8000000 启动,执行 bootloader 程序, bootloader 程序中再跳转到 APP 程序地址(0x8010000)去执行

而 bootloader 程序一般用于 IAP,这么想应该明白了。
举报

荣徽

2018-12-29 10:18:20
不同的芯片启动地址不一样,这个根据每个芯片的数据手册写的,还有一些外扩的,不能只看一个软件,要根据数据手册里面每个芯片的其实地址来写,
举报

喻唯

2018-12-29 10:31:16
这个是根据你这个芯片内核具体的ROM和RAM的地址来写的,一般指启动地址。
不过,我感觉自己没注意去该写过,貌似,在KEIL创建工程选择芯片型号的时候就自动写好了?
感觉内核一样的,ROM和RAM的地址都差不多,就看外扩了,比如:写51单片机,你建工程的时候,随便选一个C51内核(配置一样),就都可以Bulid.<.<
萌新认识,有错请教。
举报

李维嘉

2018-12-29 10:42:40
IAP可以有两个工程,一个是bootloader、一个是应用工程app。在app中同样也可以进行bootloader,同样可以IAP,只要程序写得足够好。

对于可以互相iap的程序,两个工程的ROM和RAM设置不能冲突。
但是上电启动的地址是固定的,对于STM32内部Flash来说,上电必须从0x0800 0000地址启动。

一般普通的IAP程序,在bootloader程序中,从0x0800 0000地址启动。执行完bootloader后,将程序跳转,并交给应用程序app执行。
举报

石正厚

2018-12-29 10:53:15
引用: zhouxk 发表于 2018-12-29 20:13
给你传个“涂鸦”的程序参考一下

本帖最后由 wwwheihei 于 2018-7-24 11:33 编辑

图1是正常keil配置,图2是我从一个技术文章里面看到上图的配置,地址如下:https://mp.weixin.qq.com/s/51wiRaDD8_x3C9bGqnmayA
他是把程序放到0x8010000,之后,前面是用来存储参数数据的,也就是说他只是把程序挪到后面,因为f4的flash分布不均,后面都是64k一个扇区,或者128k一个扇区。但是我不动为什么这么去配。为什么要给rom1后面starup打钩?

举报

石正厚

2018-12-29 11:12:40
引用: zhouxk 发表于 2018-12-29 20:13
给你传个“涂鸦”的程序参考一下

我是从一个文章里看到的,地址如下:https://mp.weixin.qq.com/s/51wiRaDD8_x3C9bGqnmayA,里面的理解和你说的不一样
举报

石正厚

2018-12-29 11:28:30
引用: 60user1 发表于 2018-12-29 20:34
第二张图,你框选出来的地方,有个解释:
一般来说,这个工程的代码是 APP 代码,下载进去之后,起始地址在 0x8010000
如果你有 bootloader 的话,可以将 bootloader 工程在图中同样的位置设置为 0x8000000 size:0x10000

看8楼和9楼,解答一下
举报

汪芳

2018-12-29 11:46:52
0x800_0000开始的位置放启动程序,另外的一个Project编译出来的,用于判断是否有升级程序,没有就跳转到0x801_0000 执行用户的应用程序,有则进行升级;
0x801_0000开始的位置放用户的应用程序。
这样解释可以吗?
举报

李月如

2018-12-29 12:03:31
楼主那个链接很赞,学习了。一开始对“内部FLASH编程”不是很明白,后来想明白了,就是程序里面用flash做数据存储的意思。
举报

王聪

2018-12-29 12:12:28
第二章图也不是IAP工程配置的方式,按照第二章图的配置方式编译的话,除了向量表和编译系统自己的代码段被分配在第一段地址,用户的应用代码都是从第二段地址开始分配的,可能中间这一段地址0x8004000~0x8010000被用来存储一些参数数据吧,我一般会把参数数据留在flash的最后区域
举报

更多回帖

发帖
×
20
完善资料,
赚取积分