对于keil target界面的设置,一直以来都没有真正弄懂过!
本帖最后由 wwwheihei 于 2018-7-13 11:13 编辑图中的rom1 和rom2还有ram1和 ram2的设置,我现在了解到的是做iap的时候会设置一下,具体到底每个选项是什么意思有哪个大神可以指导一下?
QQ截图20180713105852.png (16.66 KB, 下载次数: 0)
http://www.openedv.com/data/attachment/forum/201807/13/110013q4zfdlu7y4xns4ux.png
还有人这么设置,我知道他想移动代码存储位置,但是具体为什么这么设置,很模糊
tt20180713110450.png (25.66 KB, 下载次数: 0)
http://www.openedv.com/data/attachment/forum/201807/13/110505zwwr4t9r4qxu7rr4.png
给你传个“涂鸦”的程序参考一下
bootloader中ROM、RAM设置
bootloader判断是否有正确的应用程序。如果有,则跳转到相应首地址执行。
地址到底是多少呢?两项加一下,也就是0x0800 2000。
APP中ROM、RAM设置,可见ROM首地址为0x0800 2000
谁懂啊
第二张图,你框选出来的地方,有个解释:
一般来说,这个工程的代码是 APP 代码,下载进去之后,起始地址在 0x8010000
如果你有 bootloader 的话,可以将 bootloader 工程在图中同样的位置设置为 0x8000000 size:0x10000
这样 MCU 上电之后,先从 0x8000000 启动,执行 bootloader 程序, bootloader 程序中再跳转到 APP 程序地址(0x8010000)去执行
而 bootloader 程序一般用于 IAP,这么想应该明白了。 不同的芯片启动地址不一样,这个根据每个芯片的数据手册写的,还有一些外扩的,不能只看一个软件,要根据数据手册里面每个芯片的其实地址来写, 这个是根据你这个芯片内核具体的ROM和RAM的地址来写的,一般指启动地址。
不过,我感觉自己没注意去该写过,貌似,在KEIL创建工程选择芯片型号的时候就自动写好了?
感觉内核一样的,ROM和RAM的地址都差不多,就看外扩了,比如:写51单片机,你建工程的时候,随便选一个C51内核(配置一样),就都可以Bulid.<.<
萌新认识,有错请教。 IAP可以有两个工程,一个是bootloader、一个是应用工程app。在app中同样也可以进行bootloader,同样可以IAP,只要程序写得足够好。
对于可以互相iap的程序,两个工程的ROM和RAM设置不能冲突。
但是上电启动的地址是固定的,对于STM32内部Flash来说,上电必须从0x0800 0000地址启动。
一般普通的IAP程序,在bootloader程序中,从0x0800 0000地址启动。执行完bootloader后,将程序跳转,并交给应用程序app执行。
本帖最后由 wwwheihei 于 2018-7-24 11:33 编辑
toofree 发表于 2018-7-24 10:50
给你传个“涂鸦”的程序参考一下
图1是正常keil配置,图2是我从一个技术文章里面看到上图的配置,地址如下:http://mp.weixin.qq.com/s/51wiRaDD8_x3C9bGqnmayA
他是把程序放到0x8010000,之后,前面是用来存储参数数据的,也就是说他只是把程序挪到后面,因为f4的flash分布不均,后面都是64k一个扇区,或者128k一个扇区。但是我不动为什么这么去配。为什么要给rom1后面starup打钩?
toofree 发表于 2018-7-24 10:50
给你传个“涂鸦”的程序参考一下
我是从一个文章里看到的,地址如下:http://mp.weixin.qq.com/s/51wiRaDD8_x3C9bGqnmayA,里面的理解和你说的不一样 xiajintaord 发表于 2018-7-24 09:23
第二张图,你框选出来的地方,有个解释:
一般来说,这个工程的代码是 APP 代码,下载进去之后,起始地址 ...
看8楼和9楼,解答一下 0x800_0000开始的位置放启动程序,另外的一个Project编译出来的,用于判断是否有升级程序,没有就跳转到0x801_0000 执行用户的应用程序,有则进行升级;
0x801_0000开始的位置放用户的应用程序。
这样解释可以吗?
楼主那个链接很赞,学习了。一开始对“内部FLASH编程”不是很明白,后来想明白了,就是程序里面用flash做数据存储的意思。 第二章图也不是IAP工程配置的方式,按照第二章图的配置方式编译的话,除了向量表和编译系统自己的代码段被分配在第一段地址,用户的应用代码都是从第二段地址开始分配的,可能中间这一段地址0x8004000~0x8010000被用来存储一些参数数据吧,我一般会把参数数据留在flash的最后区域 厉害厉害,学习了:lol 豁然开朗,学习了
页:
[1]