完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RealView MDK中如何指定子程序入口地址 强大的MDK几乎可以满足我们所需要的所有功能。一般在链接时各程序的地址是由链接器自动分配的。但在有些时候,比如做测试时,需要将某个指定的子程序入口地址固定在一个指定的地址。其实通过一些简单的配置就可达到这一目的。下面以C51版MDK为例说明其配置过程。 比如某例程中有UART_VINIT、IO_VINIT、MAIN_VINIT、MAIN、tiMER2等函数。其中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的入口地址。至此,子函数定位完成。 |
|
相关推荐 |
|
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
1555 浏览 1 评论
610 浏览 0 评论
1330 浏览 1 评论
2005 浏览 1 评论
飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
1157 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 15:19 , Processed in 0.645551 second(s), Total 34, Slave 27 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号