首页 BootLoader程序在MCF51AC系列单片机上的实现

BootLoader程序在MCF51AC系列单片机上的实现

举报
开通vip

BootLoader程序在MCF51AC系列单片机上的实现计算机系统应用http://www.c-s-a.org.cn2011年第20卷第1期2011年第20卷第1期http://www.c-s-a.org.cn计算机系统应用BootLoader程序在MCF51AC系列单片机上的实现刘林1,张晓丹1,张作峰11(东方电子股份有限公司技术中心,烟台264000)摘 要:BootLoader程序几乎是所有智能设备的必备功能。当产品出厂后如果发现有重大BUG或需功能升级,则它可以帮助工程人员方便的更新程序。嵌入式软件一般与硬件联系比较紧密,因此BootLoader程序的实现在不...

BootLoader程序在MCF51AC系列单片机上的实现
计算机系统应用http://www.c-s-a.org.cn2011年第20卷第1期2011年第20卷第1期http://www.c-s-a.org.cn计算机系统应用BootLoader程序在MCF51AC系列单片机上的实现刘林1,张晓丹1,张作峰11(东方电子股份有限公司技术中心,烟台264000)摘 要:BootLoader程序几乎是所有智能设备的必备功能。当产品出厂后如果发现有重大BUG或需功能升级,则它可以帮助工程人员方便的更新程序。嵌入式软件一般与硬件联系比较紧密,因此BootLoader程序的实现在不同的硬件平台上具有不同的方法,但是其实现的基本思想是一致的。本 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 提出了在BootLoader程序实现过程中普遍会遇到的几个难点问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,并以飞思卡尔公司ColdFireV1微控制器MCF51AC系列单片机平台为例介绍了这几个难点问题的解决方法,对其他平台具有借鉴意义。关键词:BootLorder;MCF51AC;引导程序;中断向量表BootLoaderprogramimplementationontheMCF51ACfamilyofmicrocontrollersLIULin1,HANGXiao-Dan,ZHANGZuo-Feng11(TechnologyCenter,DongfangElectronicsCo.,Ltd,Yantai264000,China)Abstract:BootLoaderprogramistheessentialfunctionofalmostallintelligentdevices.IftheproductsarefoundtohavesignificantBUGorneedtobeupgradedafterleavingthefactory,itcanhelpengineerstoeasilyupdateprograms.Generallyspeaking,embeddedsoftwareismorecloselylinkedwiththehardware.SothatthesuccessfullyapplicationofBootLoaderprogramondifferenthardwareplatformsarediversified,inwhich,however,thesamebasicideaisapplied.ThispaperraisesseveralproblemsoftenencounteredintheoperationprocessoftheBootLoaderprogramandintroducesthesolutionsforthembytakingColdFireV1microcontrollerMCF51ACMCUplatformofFreescaleCompanyasanexample,whichwillpresentingsomereferencesfortheotherplatforms.Keywords:BootLorder;MCF51AC;Leadingprogram;InterruptvectortableBootLoader(启动引导程序)是智能设备一般都具备的一个功能。虽然它不是用户所关心的一个功能,但是对于智能设备来说确是一个非常重要功能。大家都知道,无论水平多高的程序员,写出的程序不可避免的会存在问题。对于电力行业的智能设备来说,当设备已在现场运行,如何方便快捷的更换主程序,修改掉已知的问题就是急需解决的一个问题。这个问题正是由BootLoader来解决的。BootLoader是在主程序运行之前运行的一段程序,一般比较简短,完成的功能也比较简单,最重要的功能就是完成主程序的更新。[1][2]1 BootLoader实现过程分析设备上电复位后,首先运行BootLoader程序。BootLoader在对CPU进行必要的初始化后,对启动模式进行检测,一般情况下BootLoader会跳转到主程序运行,当检测到需要驻留运行时,BootLoader才继续运行。这就需要一种方法通知BootLoader当前是需要驻留运行还是跳转到主程序中运行,常用的方法有通过跳线位置判断、通过超级终端发送固定的字符序列、通过按键等等。BootLoader驻留运行后,会进行一些必要功能的初始化,如对CPU功能模块、串口等,初始化完成后进入通信任务循环,等待接收命令并执行相应的命令;如果通信任务等待超时,则自动跳转到主程序运行。程序的流程图如图1所示。BootLoader程序一般与硬件平台联系紧密,特别是对于嵌入式系统来说更是如此,不同的硬件平台BootLoader实现的方法都各不相同。但是在实现思路上基本是一致的,一般需要解决以下几个难点问题:图1Bootloader流程图1、由于BootLoader与主程序是相互独立的程序,因此就需要解决两个程序的中断向量不一致的问题,通常微处理器中断向量的入口地址是固定的,并且不是可编程的,因此如何让两个程序都能正确使用自己的中断向量,是BootLoader实现的难点之一。2、更新主程序实际上就是对存储程序的FLASH进行擦除和重新编程的过程。大部分的FLASH当程序在其中运行时,是不允许对其自身进行擦写操作的。对于支持外扩FLASH的微处理器,如MC68332,解决这个问题的方法是用两片FLASH,一片存储BootLoader程序,一片存储主程序,这样互相更新时就不存在冲突的问题了。有的微处理器虽然不支持外扩FLASH,但是自身提供了某种 机制 综治信访维稳工作机制反恐怖工作机制企业员工晋升机制公司员工晋升机制员工晋升机制图 ,在固定的区域可以实现相似的功能,如Atmel公司的Atmega单片机。对于既不支持外扩FLASH,自身也没有提供类似功能的微处理器,一般需要把相应的程序搬移到RAM中运行,如MCF51AC系列单片机,但是如何简单方便的把程序搬移到RAM中也是BootLoader实现的难点之一。3、在程序更新的过程中,不可避免的要遇到把什么样程序文件下载到设备中问题,这就涉及到程序的存储格式问题。众所周知,计算机和单片机只能执行二进制代码,而各家编译器生成的映像文件其格式也是五花八门,如何把目标代码格式转换成计算机能认识的二进制格式,则是BootLoader实现的另一难点。2 中断向量表映射MCF51AC系列单片机共包括256个中断向量,需要占用1024大小的空间,前64个中断用于内部中断使用,64~102用于周边设备和7个软件中断,103~255保留未使用。其中断向量表固定存放在1M地址的边缘,默认存放在地址为0x000000开始的FLASH区域且不可移动。[3]正常情况下,要使用某个中断,只需要在中断服务函数前面加上编译指令interrupt和中断向量号即可,这时编译器就会把该中断服务函数的入口地址存放到相应的中断向量中。由于BootLoader程序和主程序分别生成不同的中断向量表且位置重叠,因此如果按正常情况使用就会造成两个程序的中断向量冲突。由于只有一张中断向量表,所以BootLoader程序考虑不使用中断模式,又考虑到BootLoader程序必须要使用复位向量(因为程序复位应首先跳转到BootLoader程序而不是主程序),再考虑到程序下载简单方便,决定使用中断向量映射表解决这个问题,下面详细介绍下中断向量映射表的生成及程序执行过程。添加了中断向量映射表的FLASH空间划分示意图如图2所示。BootLoader程序区固定从0x410开始,其大小可以根据需求自行设定;中断向量映射表固定从0x5400开始,其大小固定为0x400;主程序代码区则从0x5800开始。图2FLASH空间划分示意图添加中断向量映射表后程序的执行过程如图3所示。首先程序复位或加电后从0x000000位置开始执行,这个位置存放的是复位相关的2个异常向量,一个是初始化SP堆栈指针,一个是初始化PC指针,这2个异常向量是Bootloader程序生成的,指向Bootloader程序的入口地址,Bootloader程序运行后首先要做一个运行模式的判断,是进入Bootloader程序执行还是跳转到主程序执行,如果进入主程序,则通过中断向量映射表跳转到主程序的入口地址开始图3程序运行过程示意图执行主程序。在主程序运行过程中假设发生一个VectorN中断,首先到中断向量表中读取指令,这个指令是指向中断向量映射表相应位置的,这时再读取指令就能跳转到正确的中断服务处理程序了。2.1中断向量映射表的生成中断向量映射表实际上是编辑一个文件,这个文件定义了MCF51AC系列单片机除2个复位相关异常向量外所有使用的100多个中断的中断服务程序,每个中断服务程序只有一条汇编的jmp语句,如果该中断没有被使用则跳转到固定的异常处理函数,如果使用了则跳转到真正的中断服务程序。在这个映射表中没有定义中断向量表的前2个复位向量(堆栈和PC指针复位向量),只定义了一个主程序的入口函数StartupEntry(),这个函数负责让程序跳转到真正的入口函数_startup()。此外还定义一个异常处理函数IllegalTrap(),这个函数内容是个死循环,程序如果跳到这里来表示有未使用的中断产生或有其他异常错误需要查找。中断向量映射表生成后,在Bootloader工程和主程序工程中必须保持一致,只允许修改其中的函数内容。Bootloader生成的程序是通过仿真器写到FLASH中的,会占用中断向量表、Bootloader程序区;而主程序生成的程序通过Bootloader下载到FLASH中,占用中断向量映射表和主程序区。这样两个工程就可以随意添加文件和功能而不用考虑相互的影响了2.2FLASH空间分配的实现要实现如图2所示的FLASH空间的分配需要通过修改工程的链接命令文件Project.lcf来实现。这个文件是CodewarriorIDE工程向导在创建新工程时自动生成的,定义了ROM和RAM资源的大小及其分配空间。链接命令文件共包含两个字段,分别是MEMEORY{}和SECTION{}。首先需要修改的是MEMORY{}字段,这个字段定义了ROM和RAM的空间分配情况,并给不同的空间定义了名称。我们把不同的空间称之为片段(segment)。缺省的lcf文件只定义了存放于FLASH的code段和存放于内存的userram段这两个片段,根据需要我们还要增加BootLoad(存放引导程序)和VectorRemap(存放中断向量映射表)这两个片段。增加后的MEMORY{}字段如图4所示。接着需要修改的是SECTIONS{}字段。图4lcf文件的MEMORY字段定义这个字段定义了程序的所有代码编译链接存放的规则。根据具体需求需要增加两个新的代码名称.text_bootload和.text_vectormap。其目的是通知编译器,将源程序中标示为.text_bootload的代码存放到BootLoad指定的空间,将.text_vectormap的代码存放到VectorReMap指定的空间。源程序如果不加声明,默认都属于.text代码,编译链接时会存放到code指定的空间。要把代码声明为其他代码名称就需要用预编译指令#pragma。声明的范围是从声明开始到文件结束或遇到其他的代码声明。经过上述链接命令文件的修改和源程序的声明,就可以实现图1所示的FLASH空间划分。3FLASH在线更新程序的实现MCF51AC系列单片机不支持外扩FLASH,因此要实现Bootloader的下载功能,只有把Bootloader相关的函数搬到RAM中运行才能实现。具体的实现还是需要修改链接命令文件Project.lcf。在链接命令文件的SECTIONS{}字段增加一个.ramcode代码编译指令如图5所示。其意义是通知编译器,把源程序中标示为.ramcode的代码编译到userram(RAM空间)中。众所周知由于RAM掉电丢失数据的特性,其中是不能存储代码数据的,因此这些数据其实还是存放在ROM中的某个位置,只是运行时从ROM中拷贝到RAM中而已。图5.ramcode代码编译指令这样修改后只是通知编译器.ramcode代码的存放位置和拷贝到RAM后的位置。要实现真正的拷贝工作还要修改SECTIONGS{}字段后面.romp代码编译指令区。修改后.romp代码编译指令区如图6所示。该段代码的意义一个是通知编译器在_romp_at地址存放.romp代码,另一个是通知编译器需拷贝的内容和大小。图6.romp代码编译指令经过上述修改后就完成了函数拷贝工作的定义。4 创建Bootloader的复位中断服务程序通过CodewarriorIDE工程向导创建一个新工程后,默认的入口函数(复位中断服务程序)是_startup(),其实现是在startup.c文件,把该函数定义为复位向量中断服务程序是在exceptions.c异常处理文件中实现的。由于该函数编译链接的存放地址是在code段,因此我们需要重新创建一个Bootloader的复位中断服务程序,并把他存放在BootLoad段。Bootloader的复位中断服务程序的创建很简单,只需要在函数名前加上预编译指令interrupt和PC指针初始化中断向量号即可。在该函数中,首先对CPU进行必要初始化,然后执行拷贝函数把ROM中的代码拷贝到RAM中执行。再接着是启动模式的判断,决定是跳转到主程序运行还是在Bootloader驻留运行。5 程序格式转换嵌入式系统编译器生成的映像文件格式有很多种,MCF51AC系列单片机采用的是S- 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 格式。这种格式是MOTOROLA公司推荐采用的十六进制目标文件传送格式,主要优点是使传输过程可视。S-记录格式既包括通信协议,又包括计算机之间传输的程序和数据,还包括检错功能。对于计算机来说,它只认识二进制的机器码,因此真正要把映像文件固化到FLASH上,还得需要对S-记录格式的映像文件进行转化。如果把转化的工作放在嵌入式系统中,必然会增加程序对各种资源的消耗,因此最好把转换过程放在PC机上完成,通过VC等编写一个转换的小程序,把S-记录格式的映像文件转换成BIN格式,再通过串口下载到设备中直接固化到FLASH上即可。要对S-记录格式进行转换就要对其编码规则有所了解。下面就介绍S-记录格式的编码规则。S-记录是由几个字段组成的ASCII码字符串。这个字符串包括记录类型、记录长度、地址、代码/数据、校验和等。S-记录用两个ASCII码字符表示一个二进制数字节(8位),第一个字符为高4位,第2个字符为低4位。组成一个S-记录的5个字段及其内容如表1所示。表1S-记录各字段内容字段名称字符数内容记录类型2共8种:S0、S1、S2、S3、S4、S5、S7、S8、S9记录长度2记录中除记录类型和记录长度之外的字符对数目(十六进制)地址4、6或82、3或4字节数据/代码存储地址,代码/数据0~n0~n个字节可执行代码校验和2记录长度、地址、代码/数据字段数据之和的反码S-记录定义了8种记录类型,其意义如下:S0——每个S-记录的记录头S1——包括代码/数据内容和驻留代码/数据的2个字节首地址S2——包括代码/数据内容和驻留代码/数据的3个字节首地址S3——包括代码/数据内容和驻留代码/数据的4个字节首地址S5——用一个指定模块发送的S1、S2和S3记录的数目,这个技术出现在地址字段,该记录无代码/数据字段S7——S3记录块的终止记录,其地址字段包括所使用的指令的4个字节地址,该记录无代码/数据字段S8——S2记录块的终止记录,其地址字段包括所使用的指令的3个字节地址,该记录无代码/数据字段S9——S1记录块的终止记录,其地址字段包括所使用的指令的2个字节地址,该记录无代码/数据字段每个S-记录一般只有一个记录头,一个终止记录,根据情况数据会使用S1/S2/S3记录。MCF51AC系列单片机使用的是S3记录块。根据上述定义与解释很容易就可以通过VC编写一个格式转换程序将S-记录格式的映像文件转换成BIN格式文件了。6 结语本论文介绍了Bootloader程序的功能及其执行过程,总结分析了Bootloader程序实现过程中可能遇到的几个难点问题,并以MCF51AC系列单片机平台为例,详细介绍了这几个难点的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,在解决方案中详细介绍了MCF51AC系列单片机链接命令文件和S-记录数据格式的内容,给想详细了解并使用MCF51AC的初学者提供了较好的参考案例。本论文提出的方法已经在实际产品中得到了应用,并稳定运行于多个现场。本论文提出的这几个难点具有普遍意义,其解决方案对于其他单片机平台实现Bootloader程序具有借鉴意义。参考文献1徐宇清,黄彦平,夏耘,S3C44BOX的Bootloader技术分析[J].上海理工大学学报2005.27(4):369-372.2田冲、杨志,基于AT91RM9200的引导程序分析与设计[J].微处理机2008.10(5):137-1403MCF51AC256ColdFireIntegratedMicrocontrollerReferenceManual[Z].FreescaleSemiconductor2008主程序代码区引导代码区0x58000x54000x04100x0000主程序区中断向量映射表引导程序区中断向量表4系统建设SystemConstructionSystemConstruction系统建设5①基金项目:安徽省教育厅自然科学基金(2005KJ004ZD)收稿时间:2010-01-06;收到修改稿时间:2010-02-26
本文档为【BootLoader程序在MCF51AC系列单片机上的实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥12.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
小吴
多年维修电工经验
格式:doc
大小:177KB
软件:Word
页数:0
分类:教育学
上传时间:2021-03-02
浏览量:10