您的位置 首页 厂商

ARM菜鸟生长记–之三

提起启动代码,我就嗷嗷郁闷,IAR下的程序都死在了这里,Keil中出现的问题很多都是通过对启动代码的修修补补才解决的,一句话:成也启动代

提起发动代码,我就嗷嗷抑郁,IAR下的程序都死在了这儿,Keil中呈现的问题许多都是经过对发动代码的修修补补才处理的,一句话:成也发动代码,败也发动代码。
发动代码应该是刚触摸ARM的新手有必要面临而又很头痛的问题吧,刚开端我也很疑惑,为什么搞个这玩意,学51的时分咋就没见过呢。并且还都是汇编写的,俺的汇编还停留在“MOV”阶段,其他的不是很懂,没办法,谁让汇编的效率高呢。说到发动代码还不得不陈词滥调一下其间要完结的使命:
1、树立反常中断向量表,ARM从0X0开端给每个反常中断分配4个字节的空间,一般寄存一个跳转指令(B)或PC的装载指令(LDR PC,X_Vector),当产生反常时,ARM从此处获得相应反常中断处理程序进口地址,再跳转履行;
2、ARM都是高速处理器,而在高速下发动很可能会不稳定,所以在发动代码从慢时钟开端运转,在恰当的方位,从32.768K切换到高速运转;
3、ARM一般带有片外存储器,Flash、SDRAM等,这些存储器都需求初始化才干运用,这都是在发动代码中完结,可是Norflash的初始化要在时钟初始化之前;
4、ARM有不同的形式,每种形式都需求相应的仓库;
5、Copy反常中断向量表到RAM,并完结REMAP,详细请参照上一节;
6、Copy可履行映像的数据段到RAM,并将ZI区清零。这个一般都是由编译器完结的,IAR下是?main来完结,Keil中由__main完结。
现在发动代码能够看懂一些,不过自己写发动代码仍是很悠远的工作。假如开端对发动代码很冲突,能够考虑运用Keil,由于Keil由发动代码的图形化装备,直接点击鼠标操作就能够完结自己的发动代码。下面结合咱们at91sam9260的板子,说说Keil中的发动代码。

翻开Keil生成的SAM9260.S,点击左下角的“Configuration Wizard”进入图形化装备导游,依据你的需求挑选参数,悉数挑选结束后,再点击”Text Editor”,将会看到生成的发动代码。
我靠,不是吧,将近2000行,开端你可能会很灰心,但细心一看,前面不都是些宏界说嘛,跟图形化装备导游一一对应的,只要从1200多行的这一句开端的才是真实的发动代码部分。
;———————– CODE ————————————————–

PRESERVE8
开端是8个PC装载指令,留意第六个向量,即地址0X14处,寄存可履行映像的巨细,||Image

ERROM1

RO

Length||+||Image

RW_RAM1

RW

Length||

接下来是SMC、PMC的初始化,咱们的板子外扩了Norflash,假如在未初始化Norflash前,切换到快时钟,体系起不来,所以应该先初始化SMC,再初始化PMC,而Keil自带的发动代码中默许PMC在前,怎么办,能够将前面PMC的宏界说部分和初始化部分剪切,然后别离粘贴在SMC宏界说部分和初始化部分的后边,然后再看“Configuration Wizard”中,PMC主动放到了SMC的后边了。
接下来是封闭看门狗(默许是翻开的),复制反常中断表到RAM中,然后REMAP,树立缓存,树立各个形式的仓库指针
最终进入__main进行数据段和代码段的复制以及初始化C言语库函数,然后跳转到main履行。

Keil中有详细的注释,了解起来应该不是很难,详细的句子无需了解,知道个大致意思就行了。无非是将某个外设的基地址装载(LDR)到一个寄存器R0,将要向这个外设的某个寄存器赋的值装载到另一个寄存器R1,然后加载(STR)。一般的形式便是这样:
LDR R0,=Periphral_BASE ;某外设的基地址
LDR R1,=0XFFFF0000 ;向寄存器要赋的值
STR R1,[R0,#Periphral_Register_OFS] ;向外设Peripheral基地址偏移OFS的寄存器Register赋值0xFFFF0000

Keil的发动代码部分有两个留意的当地:
1、发动代码中有许多IF句子,如:IF :DEF:RAM_INTVEC。这就能够经过在Options/Asm对话框中的Define中填入RAM_INTVEC就能够完结中断向量从Flash到RAM的复制。同理,还有IF :DEF:REMAP等等;
2、带有Keil特征的MICROLIB,经过在Options/Target中挑选“Used MICROLIB”,比不运用微库比较生成的代码较小。不过除此之外,应该还有其他的联系,由于咱们的程序假如挑选不运用微库的话,就履行不成功。关于微库只要这些很片面的了解,还请内行指导。

总而言之,Keil中的发动代码仍是比较好了解的,并且凭借图形化装备导游,能够更快的上手,以完结自己的发动代码。

下面要说说Keil下,怎样完结程序在片外Norflash运转、片外SRAM调试、片外SRAM运转。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/261356.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部