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

上传人:人*** 文档编号:564450129 上传时间:2023-02-13 格式:DOCX 页数:6 大小:86.38KB
返回 下载 相关 举报
BootLoader程序在MCF51AC系列单片机上的实现_第1页
第1页 / 共6页
BootLoader程序在MCF51AC系列单片机上的实现_第2页
第2页 / 共6页
BootLoader程序在MCF51AC系列单片机上的实现_第3页
第3页 / 共6页
BootLoader程序在MCF51AC系列单片机上的实现_第4页
第4页 / 共6页
BootLoader程序在MCF51AC系列单片机上的实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《BootLoader程序在MCF51AC系列单片机上的实现》由会员分享,可在线阅读,更多相关《BootLoader程序在MCF51AC系列单片机上的实现(6页珍藏版)》请在金锄头文库上搜索。

1、BootLoader程序在MCF51AC系列单片机上的实现刘林 1, 张晓丹 1, 张作峰 11(东方电子股份有限公司 技术中心, 烟台 264000)摘 要: BootLoader 程序几乎是所有智能设备的必备功能。当产品出厂后如果发现有重大 BUG 或需功能升级, 则它可以帮助工程人员方便的更新程序。嵌入式软件一般与硬件联系比较紧密,因此 BootLoader 程序的实现在 不同的硬件平台上具有不同的方法,但是其实现的基本思想是一致的。本论文提出了在 BootLoader 程序实现过 程中普遍会遇到的几个难点问题,并以飞思卡尔公司ColdFire V1微控制器MCF51AC系列单片机平台为

2、例介绍 了这几个难点问题的解决方法,对其他平台具有借鉴意义。关键词:BootLorder; MCF51AC;引导程序;中断向量表BootLoader program implementation on the MCF51AC family of microcontrollersLIU Lin1, HANG Xiao-Dan, ZHANG Zuo-Feng11(Technology Center, Dongfang Electronics Co., Ltd , Yantai 264000, China)Abstract:BootLoader program is the essential fu

3、nction of almost all intelligent devices. If the products are found to have significant BUG or need to be upgraded after leaving the factory, it can help engineers to easily update programs. Generally speaking, embedded software is more closely linked with the hardware. So that the successfully appl

4、ication of BootLoader program on different hardware platforms are diversified, in which, however, the same basic idea is applied. This paper raises several problems often encountered in the operation process of the BootLoader program and introduces the solutions for them by taking ColdFire V1 microc

5、ontroller MCF51AC MCU platform of Freescale Company as an example, which will presenting some references for the other platforms. Keywords:BootLorder;MCF51AC;Leading program;Interrupt vector tableBootLoader (启动引导程序)是智能设备一般都 具备的一个功能。虽然它不是用户所关心的一个功能, 但是对于智能设备来说确是一个非常重要功能。大家 都知道,无论水平多高的程序员,写出的程序不可避 免的会

6、存在问题。对于电力行业的智能设备来说,当 设备已在现场运行,如何方便快捷的更换主程序,修 改掉已知的问题就是急需解决的一个问题。这个问题 正是由BootLoader来解决的。BootLoader是在主程 序运行之前运行的一段程序,一般比较简短,完成的 功能也比较简单,最重要的功能就是完成主程序的更 新。 121 BootLoader 实现过程分析设备上电复位后,首先运行 BootLoader 程序。 BootLoader 在对 CPU 进行必要的初始化后,对启动模 式进行检测,一般情况下 BootLoader 会跳转到主程序 运行,当检测到需要驻留运行时, BootLoader 才继续 运行。

7、这就需要一种方法通知 BootLoader 当前是需要 驻留运行还是跳转到主程序中运行,常用的方法有通 过跳线位置判断、通过超级终端发送固定的字符序列、 通过按键等等。 BootLoader 驻留运行后,会进行一些 必要功能的初始化,如对 CPU 功能模块、串口等,初 始化完成后进入通信任务循环,等待接收命令并执行 相应的命令;如果通信任务等待超时,则自动跳转到 主程序运行。程序的流程图如图 1 所示。 BootLoader 程序一般与硬件平台联系紧密,特别是对于嵌入式系 统来说更是如此,不同的硬件平台 BootLoader 实现的 方法都各不相同。但是在实现思路上基本是一致的, 一般需要解决

8、以下几个难点问题:图 1 Bootloader 流程图1、由于 BootLoader 与主程序是相互独立的程序, 因此就需要解决两个程序的中断向量不一致的问题, 通常微处理器中断向量的入口地址是固定的,并且不 是可编程的,因此如何让两个程序都能正确使用自己 的中断向量,是 BootLoader 实现的难点之一。2、更新主程序实际上就是对存储程序的 FLASH 进 行擦除和重新编程的过程。大部分的 FLASH 当程序在 其中运行时,是不允许对其自身进行擦写操作的。对 于支持外扩FLASH的微处理器,如MC68332,解决这个 问题的方法是用两片FLASH, 片存储BootLoader程 序,一片

9、存储主程序,这样互相更新时就不存在冲突 的问题了。有的微处理器虽然不支持外扩FLASH,但 是自身提供了某种机制,在固定的区域可以实现相似 的功能,如 Atmel 公司的 Atmega 单片机。对于既不 支持外扩FLASH,自身也没有提供类似功能的微处理 器,一般需要把相应的程序搬移到 RAM 中运行,如 MCF51AC 系列单片机,但是如何简单方便的把程序搬 移到 RAM 中也是 BootLoader 实现的难点之一。3、在程序更新的过程中,不可避免的要遇到把什 么样程序文件下载到设备中问题,这就涉及到程序的 存储格式问题。众所周知,计算机和单片机只能执行 二进制代码,而各家编译器生成的映像

10、文件其格式也 是五花八门,如何把目标代码格式转换成计算机能认 识的二进制格式,则是 BootLoader 实现的另一难点。 2 中断向量表映射MCF51AC 系列单片机共包括 256 个中断向量,需 要占用 1024大小的空间,前 64个中断用于内部中断 使用, 64102 用于周边设备和 7个软件中断, 103255 保留未使用。其中断向量表固定存放在 1M 地址的边 缘,默认存放在地址为 0x000000 开始的 FLASH 区域且 不可移动。 3正常情况下,要使用某个中断,只需要在中断服 务函数前面加上编译指令 interrupt 和中断向量号即 可,这时编译器就会把该中断服务函数的入口

11、地址存 放到相应的中断向量中。由于 BootLoader 程序和主程 序分别生成不同的中断向量表且位置重叠,因此如果 按正常情况使用就会造成两个程序的中断向量冲突。 由于只有一张中断向量表,所以BootLoader程序考虑 不使用中断模式,又考虑到BootLoader程序必须要使 用复位向量(因为程序复位应首先跳转到BootLoader 程序而不是主程序),再考虑到程序下载简单方便,决 定使用中断向量映射表解决这个问题,下面详细介绍 下中断向量映射表的生成及程序执行过程。添加了中断向量映射表的FLASH空间划分示意图 如图2所示。BootLoader程序区固定从0x410开始, 其大小可以根据

12、需求自行设定;中断向量映射表固定 从0x5400开始,其大小固定为0x400;主程序代码区 则从0x5800开始。图2 FLASH空间划分示意图添加中断向量映射表后程序的执行过程如图 3所 示。首先程序复位或加电后从 0x000000 位置开始执 行,这个位置存放的是复位相关的 2 个异常向量,一 个是初始化SP堆栈指针,一个是初始化PC指针,这 2 个异常向量是 Bootloader 程序生成的, 指向 Bootloader 程序的入口地址, Bootloader 程序运行后 首先要做一个运行模式的判断,是进入Bootloader程 序执行还是跳转到主程序执行,如果进入主程序,则通过中断向量

13、映射表跳转到主程序的入口地址开始图 3 程序运行过程示意图执行主程序。在主程序运行过程中假设发生一个 Vector N 中断,首先到中断向量表中读取指令,这个 指令是指向中断向量映射表相应位置的,这时再读取 指令就能跳转到正确的中断服务处理程序了。2.1 中断向量映射表的生成中断向量映射表实际上是编辑一个文件,这个文 件定义了 MCF51AC 系列单片机除 2 个复位相关异常向 量外所有使用的100 多个中断的中断服务程序,每个 中断服务程序只有一条汇编的 jmp 语句,如果该中断 没有被使用则跳转到固定的异常处理函数,如果使用 了则跳转到真正的中断服务程序。在这个映射表中没有定义中断向量表的

14、前 2 个复 位向量(堆栈和 PC 指针复位向量),只定义了一个主 程序的入口函数 StartupEntry (),这个函数负责让 程序跳转到真正的入口函数_startup ()。此外还定义 一个异常处理函数IllegalTrap(),这个函数内容是 个死循环,程序如果跳到这里来表示有未使用的中断 产生或有其他异常错误需要查找。中断向量映射表生成后,在 Bootloader 工程和主 程序工程中必须保持一致,只允许修改其中的函数内 容。 Bootloader 生成的程序是通过仿真器写到 FLASH 中的,会占用中断向量表、Bootloader程序区;而主 程序生成的程序通过Bootloader

15、下载到FLASH中,占 用中断向量映射表和主程序区。这样两个工程就可以 随意添加文件和功能而不用考虑相互的影响了 2.2 FLASH 空间分配的实现要实现如图 2 所示的 FLASH 空间的分配需要通过 修改工程的链接命令文件Project.lcf来实现。这个 文件是 Codewarrior IDE 工程向导在创建新工程时自 动生成的,定义了 ROM和RAM资源的大小及其分配空 间。链接命令文件共包含两个字段,分别是 MEMEORY 和 SECTION。首先需要修改的是MEMORY字段,这个字段定义 了 ROM 和 RAM 的空间分配情况,并给不同的空间定义 了名称。我们把不同的空间称之为片段

16、( segment)。 缺省的lcf文件只定义了存放于FLASH的code段和存 放于内存的 userram 段这两个片段,根据需要我们还 要增加BootLoad (存放引导程序)和VectorRemap (存 放中断向量映射表)这两个片段。增加后的MEMORY 字段如图4所示。接着需要修改的是SECTIONS字段。MEMORY E; 口 匸L 口曰匚1(RX):ORIGIN =0x00000410,LENGTH =0x00004FVectorFleNap(RX):ORIGIN =0X00005400,LENGTH =0:-:0 0000cod已(RX):ORIGIN =0x00005800,LENGTH =0x0003AEi.iserr;airi(RWX):ORIGIN =0x00800000,LENGT

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号