您的位置 首页 开关

说说嵌入式调试方法

对嵌入式软件的开发,讲解的教程、教材都比较多,但这些都还只是在理论上进行说明,并且,对开发环境、仿真器的作用对于一个嵌入式开发的门外汉来讲都是非常复杂的知识,这里就将我所总结出来的嵌入式开发过程的相关

嵌入式软件的开发,解说的教程、教材都比较多,但这些都还只是在理论上进行阐明,而且,对开发环境、仿真器的效果关于一个嵌入式开发的外行人来讲都是十分复杂的常识,这儿就将我所总结出来的嵌入式开发进程的相关概念进行一下解说,首要是对ARM嵌入式中关于片内flash,片外flash,片内RAM,片外RAM的相关调试作业进行一下具体的阐明。

我所获取的常识的实践环境仍是老样子:IAR+JLINK V7.0,这套环境阐明一下:IAR是一套十分老练的嵌入式开发环境,之所以挑选它,是因为入门时的项目便是拿他做的,其时用的是LM1138 是M3的ARM核。

作为一个嵌入式的外行人辛辛苦苦的具体了解了IAR环境的一个调试进程,然后就产生了慵懒,哈哈,懒得用其他开发环境了。其实便是这样的,做软件开发的,尤其是嵌入式软件开发,你用什么开发东西其实都是相同的,几种开发东西ADS,IAR,MDK其实都是各有优缺点的,我感觉IAR的环境下官方例程较多,假如选用比较常见的MCU的话,根本在里面都能找到相应的例程的;而且IAR是在不断更新的,现在的最新版别现已到了5.4.1了,相对十分老练,对各种新的中心支撑十分及时;ADS是前期对ARM开发支撑的最好的环境之一,兼容一切ARM指令集、伪指令集,应该能够说是规范的开发环境了,但ADS环境永久停留在了1.2版别上,对新ARM核的支撑现已无从谈起,它在规划上比较优胜的便是将软件调试AXD与修正ADS是分隔两个程序的,咱们能够运用ASD对非ADS开发的bin程序进行调试,算是比较便利的,网上的资源相对来讲也是比较多的,假如是嵌入式爱好者运用ADS作为开发环境仍是适当不错的。MDK没有用过,不太清楚,不过MDK是ARM在抛弃ADS环境支撑后挑选的第二个官方编译环境,对新内核的支撑也是十分敏捷的。总的说来,做嵌入式软件开发,选用哪一中开发环境其实都是没有什么联系的,从开发上来讲,他们的首要差异首要仍是会集在汇编指令不同、程序进口函数名不同等等,这些十分细节上的东西,对程序主体所运用的C言语是完全相同的。这些开发环境在网上都有相应的破解版,假如是个人作为学习之用挑选哪一个都是无所谓的。

作为仿真器来讲,JLINK我认为是十分值得引荐的,首要原因仍是JLINK破解的十分完善,随便在淘宝上一搜就有一堆,现在的价钱又十分的廉价,一般在80块左右运用起来就没有问题了,与正版的JLINK在功用上现在现已没有什么差异了。JLINK支撑简直一切片内flash烧录,以及大部分的Norflash的烧录。但JLINK不支撑直接的NANK flash的烧录。而现在对产品开发来说所运用的仿真器如ZLG的AK100来说是支撑NAND flash的直接烧录的。而且在IAR下不管运用JLINK办法仍是RDI的调试办法,都是不能运用JLINK的Norflash烧录程序的,只能运用片内flash的烧录算法。

好啦,上面的东西阐明就提到这儿;下面首要说一下关于IAR环境调试的首要办法。在嵌入式开发中,因为对flash芯片的烧录速度较慢,读取flash芯片的速度也十分慢,而调试的时分需求频频修正程序,对程序的读取、写入速度对开发速度影响很大。因而对调试来说,一般讲程序直接烧入片内ram或许是片外的ram中运转的,这样调试速度极快。这在IAR中是经过在linker中所设置的icf文件所完结的,在调试时,咱们一般讲icf中RAM ROM都设置为片内ram的地址规模,这样程序在链接时所运用的地址规模都在片内ram中,IAR调试时将程序镜像放于片内RAM中,跳转到进口程序__iar_start就能够对程序进行调试了。但有时片内RAM空间并不行运用,咱们需求运用片外的RAM,可是咱们需求知道,运用片外RAM的话咱们需求首要设置CPU内相应的存储器办理寄存器,告知CPU怎么拜访片外RAM(首要有片外RAM 地址、巨细、位宽、时序等)这部分作业是需求在程序写入片外RAM之前就完结的,所以将这部分指令完结为IAR下的linker设置中的mac文件,在该文件中完结对CPU相关寄存器的设置后,IAR经过仿真器向片外RAM写入数据。这儿需求阐明一个问题便是反常向量的拜访,咱们在片内或许片外RAM中调试程序的时分,是不能够运转正常的反常向量的,咱们知道反常向量表是在地址空间0x000000的方位的,一般是flash空间,(不经过Remap,MMU的修正,关于Remap,MMU在这儿就不进行打开阐明晰,改日再评论)而咱们的程序都是写入RAM地址空间的,这就导致咱们的程序假如进入反常状况那就肯定会跑飞,便是说程序跳转到反常处理函数,而反常处理函数又指向一个不存在的函数地址,这样就十分不便利调试反常状况了。

再说一下关于片内flash,片外flash的调试办法,首要,咱们要清晰,只要是flash不管是NAND,仍是Norflash,对flash芯片的拜访都是需求驱动程序的,这是嵌入式初学者常常模糊的当地,对Norflash来说,它的地址线、数据线衔接与片外SRAM,SDRAM其实是差不多的,为什么对SRAM,SDRAM咱们只需求在mac文件中设置寄存器,而flash确一定要运用驱动程序那,这儿,首要是对RAM的拜访,咱们只需求设置地址、巨细、位宽、时序就能够拜访了,而对flash来说,咱们在向其间写入或许读出数据,咱们首要要向flash芯片内相应的寄存器写入指令才干都完结后续的读取、写入、设置的操作,这便是flash芯片驱动程序的效果。或许有人发现,IAR下对片内flash并没有设置flash驱动程序啊,其实这部分在咱们设置工程中运用的DEVICE称号时就主动设置好啦,如咱们运用LM1138的芯片,IAR在将程序写入片内flash时,主动调用LM1138的flash驱动函数向flash中写入程序。这样片外flash又该怎么操作那,这儿就要说一下啦,只要是flash就必须要有驱动,对flash芯片的烧录进程便是首要,IAR在芯片的片内RAM中运转flash驱动程序,将程序烧录入片内或许片外的flash芯片中。片内非flash驱动IAR现已主动设置好啦,片外的flash就需求咱们来写驱动了,这儿就有两种办法来调用驱动了,一个是在IAR下编译依据flash芯片的数据手册编写驱动,然后经过IAR的flashloader调用编译好的驱动程序,片外flash芯片写入数据。还有便是功用比较全面的仿真器,能够直接在设置时指定片外flash芯片驱动程序,IAR经过相应的调试接口支撑相关的仿真器的在线调试。运用JLINK的话只能经过在IAR下编写片外flash芯片驱动的办法开完结对片外flash芯片读写的需求。

最终说一下程序链接与程序烧录的联系,在程序链接时指定ROM,RAM地址的规模,ROM,RAM其实就适当于程序烧录地址,也便是说,设置链接器地址时需求对应芯片数据手册、开发板的地址空间规模等,规划好程序运转地址空间,设置链接地址。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部