基于MDK工程设置的相关项

弄了一个月的arm,终于在英倍特的arm开发箱上把led灯给点亮了,在keil环境下,基于J-LINK仿真器。主要问题是出在对存储器的配置上,还是经老师点拨才醒悟的。当然其中还涉及到工程的配置问题,以及arm的启动过程。
下面把自己对工程配置的理解说明如下。
进入工程有如下界面。
这里写图片描述
Device选项就是选择器件的,没啥东西,选配套的芯片就行。
现在是Target这个选项卡了。挑重要的讲。
主要是下边的Read/Only。。与Read/Write。。。
作用:用于生成分散加载文件,在链接时生成。
前提:在Linker选项卡中,下图中红线部分选中。
这里写图片描述
因此,在链接的时候,会自动根据设置的生成.sct文件,用于加载程序到相应的存储器空间。
在说明具体内容之前,先说说各个段所要存储的东西,即RO,RW,ZI段,
首先有两种情况。
1,程序运行的时候(叫ARM程序),有上边三个段。
2,ARM映像文件:即烧写到ROM中的文件——bin文件,也叫image文件,这个文件里边是不包括ZI数据的,原因是:ZI段里的数据都是0,没有实际意义,包含进来浪费存储空间。
RO段:存放指令和常量的段。
RW段:存放已经初始化的变量(不包括初始化为0的变量)。
ZI段:存放未被初始化的变量和初始化为0的变量。
由于程序执行后可能在不同的地址空间,即有执行域和加载域的区别,而程序执行时是从ROM中RO区内的指令开始执行的,所以RO区内的指令应该有如下功能:
A:能够把RW区的变量从ROM搬到制定的RAM中的地址空间去。这一过程的代码在分散加载文件里。估计链接的时候给发配到RO区里了。
B:能够在程序运行前,通过编译器给出的ZI区变量地址,把ZI区给清零了。由此可知,对于KEIL里边的未初始化的变量,都默认初始化为0.
加载域和执行域说些基本东西:
对于嵌入式而言,程序的映像文件(ARM映像包括bin与hex两种文件格式)存储在像flash一样的非易失性的器件中,而运行时,RW数据必须加载到RAM中进行读写,所以就有了加载域和执行域之分了。
再回到target选项卡,每一RO或者RW区,都分为off-chip与on-chip,即片外与片内,如果两片区域都打上勾,则会有两个加载区。后边的startup代表的是启动代码,只能选择,不能取消,同时,启动代码必须与选中的加载区一致。
个人感觉,所谓的on-chip与off-chip只是一个名字而已,就是说,我现在是加载到外部的flash里边,但是我选择no-chip选项,还是一样的能运行,所以只是代表一个名字罢了。
还有一个问题是RW区的NoInit从字面上来看,是不要初始化,我的理解是这一片区域不初始化为0(如果选中的话),事实证明我是对的,help里边有一句话:NoInit selects areas that should be excluded from zero initialization. 也就是说,选中的话的这个区域内被拒绝0初始化。
OUTPUT选项卡与Listing选项卡,不用多管,根据自己想要的文件,在output里边选相应的项。
USER选项卡
本也没感觉到有多大用处,但从网上找到些东西,
这里写图片描述
方框内多了点东西:

目的是:生成可烧写的bin文件。
ASM与C/C++选项卡没啥东西,就是在编译时候加一些东西来控制编译。可以设为默认值。
Linker选项卡顾名思义就是在链接时起作用的,如下图注意红色区域。
这里写图片描述
1区域,已经讲过当次区域打上勾时,系统根据前边target设定的区域生成.SCT文件,
当1区域勾没选上时,又有两种方式
A,简单点的就是利用2区域,直接一个R/O地址和R/W地址搞定,3区域也就没必要了。
B,所谓复杂点,也就是自己写SCT文件,通过3栏添加而已。
Debug选项卡
这里写图片描述
作为硬件调试,使用的是J-LINK,所以红色第一栏没问题。
1区域的意思是:在开启调试器之前了,加载应用程序,也就是加载自己的程序代码。
1区打钩之后,2区run to main才可以打钩,也就是说,主函数加载的应用程序里边。
当三区选上初始化文件,例如Flash.ini时,里边的load *axf与go main()就是完成上边所述功能的。
配置算是完成了,但后边弄了老半天,还是调试没反应,相应的加载区内没代码,后来在老师的指点下,分析是内存初始化有问题,要根据具体的情况,配置BANK的参数,而不要盲目的引来别处的.ini文件,也就是说,.ini文件中队SDRAM,即相关存储区的配置,要根据自己的硬件作相应的调整。
收藏分享邀请

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值