对LOAD_START,LOAD_END, RUN_START汇编伪指令的理解

转自:http://blog.sina.com.cn/s/blog_9e358f6d0102v5g8.html


在TI给的28335例程Example_2833xCodeRunFromXintf中,这个例子的目的是将定时器0和定时器1的中断服务函数的代码从SARAM的L1区搬运到外扩SRAM(ZONE7)上运行,28335有3个定时器Timer0,Timer1,Timer2,其中只有Timer0经过PIE,其他两个定时器中断直接与CPU相连,如下图对LOAD_START,LOAD_END, <wbr>RUN_START汇编伪指令的理解

程序中将Timer0和Timer1的中断服务函数的代码搬运到外扩的SRAM上运行,Timer3的中断服务函数依然在片上SARAM上运行,Timer3作为比较,看看Timer0和Timer1的中断服务函数是否在外扩SRAM上运行正常。在程序的CMD链接文件中有如下的代码:

 xintffuncs      : LOAD = RAML1,
                     RUN = ZONE7A,
                     LOAD_START(_XintffuncsLoadStart),
                     LOAD_END(_XintffuncsLoadEnd),
                     RUN_START(_XintffuncsRunStart),
                     PAGE = 0

 

经过调试,LOAD_START()的作用就是获得段xintffuncs的起始地址,并把这个起始地址赋给XintffuncsLoadStart这个符号,这么说其实不是太准确,准确的说就是在段xintffuncs的起始地址处添加一个标号XintffuncsLoadStart(由于C语言和汇编之间的调用规则,_XintffuncsLoadStart是汇编中定义的变量,若在C语言中引用则是XintffuncsLoadStart),这我们下面是我们从程序空间观察得到的结果 对LOAD_START,LOAD_END, <wbr>RUN_START汇编伪指令的理解
0x200000正好是xintffuncs段的起始地址(因为没有别的段被连接到ZONE7A里) 对LOAD_START,LOAD_END, <wbr>RUN_START汇编伪指令的理解

对LOAD_START,LOAD_END, <wbr>RUN_START汇编伪指令的理解

这里需要主要一个问题LOAD =RAML1表示加载地址是RAML1(SARAM的L1区),由于链接到RAML1区的不止一个段,所以直到0x00970A我们才找到XintffuncsLoadStart和XintffuncsLoadEnd(RAML1区的起始地址是0x009000)对LOAD_START,LOAD_END, <wbr>RUN_START汇编伪指令的理解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值