首页 > 新闻中心 > 行业动态

ARM成长路--献给坚持ARM学习的人|yobo体育全站app下载

发布时间:2022-11-10    次浏览

本文摘要:用ARM的人,尤其是初学ARM,总会遇上很多坎,能过去就不会一步步茁壮为ARM高手,无法过去也就半途而废了,别如有人就说道:我也暗启动代码,现在用的是三星2440的,想要做到一个外部中断.完全所有资料都是ADS的。

用ARM的人,尤其是初学ARM,总会遇上很多坎,能过去就不会一步步茁壮为ARM高手,无法过去也就半途而废了,别如有人就说道:我也暗启动代码,现在用的是三星2440的,想要做到一个外部中断.完全所有资料都是ADS的。用MDK会登记中断函数,样子必须改为启动代码才讫。

现在我需要启动时中断了,但是找到中断号召只是在启动代码里面打伤循环。谨以本文送给那些坚决自学ARM的人:从开始做ARM到现在将近半年多了,第一个项目搞得有些眉目了,再一感觉看起来入门了,半年来,有开始的新鲜,中间的悲哀,到最后的伤心。其中过程堪称曲折离奇,遇上了很到前人没遇上过的疑难杂症,当然很多时候是因为我的粗心引致的。曾多次也有过退出的念头,那个情绪,像得了狂躁症一样。

yobo体育全站app下载

后来下定决心即使绩效没有了,工作扔了也要搞完它。只不过在这个过程中,看见跟我一样的很多新人在论坛上发帖求救,可是很多时候回者寥寥无几,有可能问题过于愚蠢,也有可能问题叙述的不确切。我上过很多帖子,甚至必要侵扰了网上很多的牛人,他们都给了我相当大的协助,但是我当时的点子过于非常简单了,总就让某个牛人需要解决问题掉这个问题,现在看看,即使是牛人,没看见明确的问题也很难给你一个解决问题方法,遇到困难无法把期望几乎竭尽在别人身上,要挖出自身潜力,一遍遍细心看手册,重复试验,大大思维,问题认同能解决问题掉,只是时间问题而已。

再度要感激公司对我的忽视,一个这么非常简单的东东容许我做了这么久。只不过,在前面的过程中,仍然有写出点什么的冲动,但是当时困难重重、前途未卜,也就让这个心情。现在可以椅子来细心总结下前面的问题,有现在都没有做明白的,兹向大家求教了;有解决问题丢弃的,那就说道说道经验教训,给其他人一些参照。首先声明本人脑瓜笨,逻辑思维劣,点一个灯点了一个多月,最后还找到没点对。

所以提及的问题有可能很愚蠢,说出也样子前言不搭后语,有兴趣看的那就累及了哈。再行说道说道我们的这个块板子,打架的at91sam9260,外阔Norflash、SRAM,构建程序既可以跑完在Norflash中,也可以拷贝到Sram中跑完。

任务就一个:掌控一个片外AD,朗读数据然后通过串口收到。很非常简单的吧,这我都做了几个月呢,你说道菜不菜吧。以下我将回忆起整个的ARM自学过程,牵涉到到的科学知识都是很非常简单的基础知识,老鸟就不必看了,期望可以协助到像我一样的菜鸟。

前三个月主要是熟知的过程,当时几乎没想起后面程序的调试不会如此的艰难,想当然地指出又不上系统,无非是32位的单片机嘛。板子做到回去众多段时间内,元器件都没归位,当时屌了呀,应当再行熟知熟知编程环境,每天就为几个斩元件着急,什么都没有腊。后来板子焊好了,才找到只不会用H-JTAG辨识芯片,其他的什么都不懂。然后开始看例程,只玩游戏过51的我,首度认识32位的单片机,当时看见AT91C_BASE_PMC-PMC_PCER=(0x13)这样的语句,居然不告诉是什么意思,一是疑惑-代表个啥?二是为啥写0x13的样子?后来知道过了多久才明白,AT91C_BASE_PMC是个基地址,PMC_PCER是比较这个恩地址的位移,移位赋值是为了给32位寄存器赋值的便利。

再行说道说道研发ARM要中用的软件以及工具吧,这段时间我屡屡用于了IAR、KEIL、h-jtag、JLink,都会用但是都不通晓。最后是在KEIL+Jlink下已完成的。开发工具的自由选择:1、编译器环境:IAR、KEIL、GCC、开始我想要也就让就自由选择了IAR,原因很非常简单:ATMEL的例程很都是基于IAR的,而KEIL加装目录下的例程很少。

匆忙加装了IAR当时的最新版IAR5.20,几乎没考虑到能用的资源和交流的便利。然后才找到IAR5.X跟4.X有相当大的有所不同,主要就是其中的链接器从XLINK替换成了ILINK,所以配置文件也由XCL文件替换成了ICF文件,初看后者样子比前者更加非常简单更加易懂了,但是由于是新版,用于的人还不多,网上上的参考资料大部分还是基于4.X的,对于新手哪几条语句还是很困惑。不过一根筋的我还是硬着头皮坚决用于IAR5.20,直到遇上IAR的杀招:系统从慢时钟想要慢时钟转换时就跑完飞来了,都是杀在lowlevelinit()中的这一句上:AT91C_BASE_PMC-PMC_MCKR|=AT91C_PMC_CSS_PLLA_CLK;然后将这一句放到主程序中,照死不误。

用于过程中,总弹出有一个警告,大体意思就是说:IAR加装目录下,bin文件夹下的armlibsupport.dllmaybemissingorcorrupt.新的装后还是老样子。在LED闪光程序上着急一个多月未果后,才痛下决心改向KEIL。用上KEIL才找到这玩意不是传说中的弱智,忽略尤其合适我等菜鸟,感觉主要有三个方面尤其好:启动代码的图形化配备;在Flash跑完不必须什么配置文件,必要在option中再配两个地址值就可以了;只需页面鼠标就可以构建将代码从Flash自动拷贝到RAM中继续执行,不必须再写什么代码拷贝程序了。GCC,没用过,不懂。

2、调试工具:JLINK、H-JTAG、ULINK、开始用于h-jtag,因应Wiggler用于,小巧且低廉,被迫敬佩Twentyone前辈,在RAM中调试很便利,也可以通过H-Flasher将程序iTunes到Flash跑完,用于h-flasher时要一个初始化文件,主要是初始化Flash涉及寄存器。后来看见DB的JLINK都白菜价了,就从淘宝买了一个JLINK,主要是不必再用并口了,现在百元以内的JLINK大把,用JLINK是个不俗的自由选择,但是调试片外的flash样子还无法无限断点。ULINK,不过于确切,样子只反对KEIL,不过没用过。这次主要说道说道第一次做ARM尤其就是指51必要跳出ARM的必需面临的几个概念:REMAP、Bootloader、Flashloader。

1、REMAP:提及REMAP。首先不应想起什么是MAP,英语很差,开始就断章取义,MAP就是地图嘛,MemoryMap就是存储器地图,不过这个地图的参照座标不是经纬度,而是地址,进而叫作存储器同构。

由于要适应环境有所不同存储器容量拒绝的用途,ARM处理器本身的RAM、ROM并不是充足大,所以很多时候要外阔一些存储器,Norflash、NANDFlash、SDRAM、SRAM而对于ARM来说怎么辨识这些有所不同的存储器呢,不能给每个分配一个独立国家的地址,就相等于每个人有有所不同的名字。片内存储器的地址一般出厂就烧结好的,片外的话就根据每个存储器所相连的外部总线片选而具备有所不同的地址。所以REMAP,顾名思义就是存储器的新的同构,即某些存储器的地址又再次发生了变化。

yobo体育全站app下载

我就很不解读了,这地址本来就很差记,还变来变去的,麻不困难呀,学51的时候咋就没有这玩意呢?后来坎了些资料,有些明白了,51是8位机,更加最重要的是51的主频不低,8位的ROM或Flash充足给定51的主频,不必放入等候指令,所以程序必要在ROM或Flash中跑完影响将近系统的速度。而ARM就有所不同了,ARM是32位机,但是Flash一般是8位或16位,32位的也有吧,样子价格很高。而且ARM的制品很高,以致于上百M,所以Flash的工艺约将近这个速度。

如果程序跑完在Flash中就要放入过多的等候指令,所以不会影响ARM的性能。而RAM一般存取速度较为慢,很更容易包含32位,可以与高速的ARM给定。更加最重要的是ARM上电后必需从0x0地址处获得指令,因此上电后必需将ROM或Flash同构位0X0地址处,当时还产生了一个弱智的点子,既然RAM这么好,为啥还要ROM或Flash,必要将程序iTunes到RAM中不就得了,后来才猛地想起RAM是不易失型存储器,掉电后啥也就让,再行上电后0X0处啥都没。

而且还有一条,ARM的中断向量表格,既存放在各个中断入口地址的地方,一般放到0x0一处,即ROM或Flash中,为了减缓中断响应速度,也应当将0X0同构到RAM中去。因此,ARM一般从ROM或Flash启动已完成初始化,然后将应用程序拷贝到RAM,然后跳出RAM继续执行。刚才说道的是,为啥要REMAP,接下来说道怎么REMAP。开始的时候我就不确切,都说道REMAP,那怎么才能已完成REMAP呢?都是手册看得较少呀,只不过上面说道的早已很确切了,我们用的at91sam9260堪称非常简单,有专门的寄存器可以配备,MATRIX_MRCRMasterRemapControlRegister,向这个寄存器适当位写1就可以了。

网上还看见Samsung的某些ARM可以通过编程适当Bank寄存器转变其接续地址,来构建REMAP。下面以我们的at91sam9260的板子为事例详尽说道说道我对at91sam9260REMAP的解读,开始Flash没任何程序,当然也没REMAP,此时将BMS接高,然后上电,此时的0X0地址处坐落于片内的ROM,由于ROM内样子烧结了引领程序,所以此时串口不会输入RomBoot字样。

而内部的SRAM0的接续地址还是在0x200000一处,而片外Norflash接续地址是0x10000000一处。然后我们利用h-flasher或J-Flash将分解的Bin文件iTunes到Norflash内,即接续地址为0x10000000一处。

然后将BMS接低,此时Norflash被同构在0X0地址处,即此时Norflash的接续地址为0X0,(你有可能要回答那ROM的地址现在在哪儿呢?我也不告诉,因为Norflash的地址范围是0X0~0X1FFFFF,而ROM的接续地址配置文件是0X100000,刚好在Norflash的范围内,所以此时ROM哪儿去了?)此时上电,因为0X0地址处即Norflash接续地址有八个合法的中断向量,程序不会从Norflash启动,接着继续执行启动代码,初始化SMC、PMC,然后Copy中断向量表到内部SRAM0,然后,将MATRIX_MRCR寄存器适当方位1,构建REMAP,此时,Norflash的接续地址又变成0X10000000,而内部的SRAM0的接续地址又变成0x0了,系统如果再次发生出现异常,将从地址0X0处即内部SRAM0所取中断向量,而内部SRAM的访问速度似乎低于外部的Norflash,所以提升程序性能。这是我对at91sam9260REMAP的解读,青睐辩论指教。

2、Bootloader:说实话,这个概念到现在也不是很明白。有可能对于打架的系统来说,Bootloader这个概念本身就较为模糊不清吧,望文生义的话,Boot,靴子,Load,穿着上靴子走路才较为难受(这个比喻样子较为番茄喔),对于ARM来说,初始化好,并将向量表格以及数据什么的拷贝到RAM,运营一起才流畅。就是传说中的引领装载。

所以我解读的Bootloader就是已完成ARM的初始化、创建中断向量表并同构到RAM中、将数据段和适当的代码段拷贝到RAM、已完成REMAP、函数调用到Main,这一系列过程。说白了就是启动代码腊的活。这个解读我自己都感觉很可笑,还请求大家多多指点。3、Flashloader:这个概念堪称模糊不清,总感觉跟Bootloader差不多,只不过Flashloader可以构建对Flash的读取、读取等操作者,并与调试软件因应构建将程序iTunes到Flash中。

IAR中有一个选项:UseFlashloader,不过样子一般都是针对片内Flash的,我们的板子是外扩的Norflash,样子就没中用这个东东。驳回启动代码,我就嗷嗷沮丧,IAR下的程序都杀在了这里,Keil中经常出现的问题很多都是通过对启动代码的修修补补才解决问题的,一句话:出也启动代码,大败也启动代码。

启动代码应当是刚刚认识ARM的新手必需面临而又很头痛的问题吧,刚开始我也很纳闷,为什么做个这玩意,学51的时候咋就没有见过呢。而且还都是编撰写出的,俺的编撰还逗留在MOV阶段,其他的不是很不懂,没有办法,谁让编撰的效率高呢。

提及启动代码还被迫老生常谈一下其中要已完成的任务:1、创建出现异常中断向量表格,ARM从0X0开始给每个异常中断分配4个字节的空间,一般存放在一个函数调用指令(B)或PC的装载指令(LDRPC,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,页面左下角的ConfigurationWizard转入图形化配备一行,根据你的必须自由选择参数,全部自由选择完后,再行页面TextEditor,将不会看见分解的启动代码。


本文关键词:yobo体育官网下载,yobo体育全站app下载

本文来源:yobo体育官网下载-www.bscyyw.com