网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 超前科技开发网 >> 文章中心 >> 嵌入式开发 >> ARM处理器 >> 文章正文
  [图文]RealView MDK中如何指定子程序入口地址           ★★★ 【字体:
RealView MDK中如何指定子程序入口地址
作者:武汉理工…    文章来源:本站原创    点击数:    更新时间:2008-4-22    
LPC2368 开发板(LPC2364/LPC2368).
全功能JLINK ARM仿真器.
USB-Blaster下载电缆(支持ALTERA全系列)
LPC2148开发板.

强大的MDK几乎可以满足我们所需要的所有功能。一般在链接时各程序的地址是由链接器自动分配的。但在有些时候,比如做测试时,需要将某个指定的子程序入口地址固定在一个指定的地址。其实通过一些简单的配置就可达到这一目的。下面以C51MDK为例说明其配置过程。

比如某例程中有UART_VINITIO_VINITMAIN_VINITMAINTIMER2等函数。其中TIMER2是我们需要固定其入口地址的函数。编译链接之后在工程目录下会生成M51文件(后缀为M51)。可以用记事本将其打开。打开后我们找到LINK MAP OF MODULE 项,在默认编译链接情况下其内容为:

LINK MAP OF MODULE:  T2test2 (TIMER)

 

 

            TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME

            -----------------------------------------------------

 

            * * * * * * *   D A T A   M E M O R Y   * * * * * * *

            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"

            DATA    0008H     0001H     UNIT         ?DT?MAIN?TIMER

            DATA    0009H     0001H     UNIT         ?DT?GETCHAR

                    000AH     0016H                  *** GAP ***

            BIT     0020H.0   0000H.1   UNIT         ?BI?GETCHAR

                    0020H.1   0000H.7                *** GAP ***

            IDATA   0021H     0001H     UNIT         ?STACK

 

            * * * * * * *   C O D E   M E M O R Y   * * * * * * *

            CODE    0000H     0003H     ABSOLUTE    

                    0003H     0028H                  *** GAP ***

            CODE    002BH     0003H     ABSOLUTE    

                    002EH     07D2H                  *** GAP ***

            CODE    0800H     0062H     UNIT         ?PR?MAIN?TIMER

            CODE    0862H     0027H     UNIT         ?PR?PUTCHAR?PUTCHAR

            CODE    0889H     0026H     UNIT         ?C?LIB_CODE

            CODE    08AFH     001FH     UNIT         ?PR?UART_VINIT?STARTUP

            CODE    08CEH     001EH     UNIT         ?PR?MAIN_VINIT?STARTUP

            CODE    08ECH     0011H     UNIT         ?PR?GETCHAR?GETCHAR

            CODE    08FDH     000CH     UNIT         ?C_C51STARTUP

            CODE    0909H     000BH     UNIT         ?PR?TIMER2?TIMER

            CODE    0914H     000AH     UNIT         ?PR?_GETKEY?_GETKEY

            CODE    091EH     0004H     UNIT         ?PR?IO_VINIT?STARTUP

以上就是链接后各函数的入口地址信息。找到我们需要指定入口地址的项。这里假设我们需要指定TIMER2这个子函数。找到其对应项“?PR?TIMER2?TIMER”,其中间部分即为函数名,后部分为所在文件名。我们发现其入口地址为0909H,长度为000BH。找到这一项之后,复制其值。然后打开菜单Project,选择Options,再选择BL51 Locate项。在Code栏后面的输入框里粘下所复制的值,然后在后面加上小括号,括号内给出其入口地址的值。如 ?PR?TIMER2?TIMER(0x1000)。如图一所示:

 


图一

点击确定后,重新编译链接,再打开M51文件,发现LINK MAP OF MODULE项内容变为:

LINK MAP OF MODULE:  T2test2 (TIMER)

 

 

            TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME

            -----------------------------------------------------

 

            * * * * * * *   D A T A   M E M O R Y   * * * * * * *

            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"

            DATA    0008H     0001H     UNIT         ?DT?MAIN?TIMER

            DATA    0009H     0001H     UNIT         ?DT?GETCHAR

                    000AH     0016H                  *** GAP ***

            BIT     0020H.0   0000H.1   UNIT         ?BI?GETCHAR

                    0020H.1   0000H.7                *** GAP ***

            IDATA   0021H     0001H     UNIT         ?STACK

 

            * * * * * * *   C O D E   M E M O R Y   * * * * * * *

            CODE    0000H     0003H     ABSOLUTE    

                    0003H     0028H                  *** GAP ***

            CODE    002BH     0003H     ABSOLUTE    

                    002EH     07D2H                  *** GAP ***

            CODE    0800H     0062H     UNIT         ?PR?MAIN?TIMER

            CODE    0862H     0027H     UNIT         ?PR?PUTCHAR?PUTCHAR

            CODE    0889H     0026H     UNIT         ?C?LIB_CODE

            CODE    08AFH     001FH     UNIT         ?PR?UART_VINIT?STARTUP

            CODE    08CEH     001EH     UNIT         ?PR?MAIN_VINIT?STARTUP

            CODE    08ECH     0011H     UNIT         ?PR?GETCHAR?GETCHAR

            CODE    08FDH     000CH     UNIT         ?C_C51STARTUP

            CODE    0909H     000AH     UNIT         ?PR?_GETKEY?_GETKEY

            CODE    0913H     0004H     UNIT         ?PR?IO_VINIT?STARTUP

                    0917H     06E9H                  *** GAP ***

            CODE    1000H     000BH     UNIT         ?PR?TIMER2?TIMER

在链接信息中发现TIMER2函数已经定位到地址1000H。当然在下载到目标板或者在模拟器中调试时,可以发现在地址1000H处是函数TIMER2的入口地址。至此,子函数定位完成。

欢迎进入超前MCU技术论坛对 RealView MDK中如何指定子程序入口地址进行讨论!

文章录入:armopen    责任编辑:armopen 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    使用RealView MDK与ULINK烧写
    keil中直接嵌入汇编代码的方
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    Copyright 2003-2006 www.mcu123.com© All Rights Reserved
    版权所有 © 超前科技开发网
    粤ICP备05005262号