打印

小女子再提一个问题:

[复制链接]
3854|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新手forARM|  楼主 | 2007-9-21 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IMPORT      |Image$$EXSRAM$$Base|  ; End of ROM code (=start of ROM data)
IMPORT      |Image$$EXSRAM$$Length|    ; End of ROM code (=start of ROM data)
IMPORT      |Load$$EXSRAM$$Base|       ; Base of RAM to initialise
IMPORT      |Image$$EXSRAM$$ZI$$Base|       ; Base and limit of area
IMPORT      |Image$$EXSRAM$$ZI$$Limit|      ; to zero initialise
                
IMPORT      |Image$$INTERSRAM$$Base|
IMPORT      |Image$$INTERSRAM$$Length|
IMPORT      |Load$$INTERSRAM$$Base|
IMPORT      |Image$$INTERSRAM$$ZI$$Base|
IMPORT      |Image$$INTERSRAM$$ZI$$Limit|

关于以上的语法真是让人弄不懂!感到头痛!搞不清楚东南西北中!
像|Image$$INTERSRAM$$ZI$$Limit|这样的语法具体用法是怎么样的?
在哪些资料里面可以找到说明?
谢谢!






相关帖子

沙发
新手forARM|  楼主 | 2007-9-21 16:53 | 只看该作者

阿南哥、wangkj等前辈麻烦给俺指点一下!

阿南哥、wangkj等前辈麻烦给俺指点一下!

使用特权

评论回复
板凳
wangkj| | 2007-9-21 16:58 | 只看该作者

我不懂啊,我几乎不怎么看这些细节

尤其是汇编。最多看看内核的启动代码。
像你写的这些东西00肯定能答出来,找他呀。

使用特权

评论回复
地板
high| | 2007-9-21 17:07 | 只看该作者

也许编译器手册会有

import引入一些symble/变量/函数.类似c语言的extern关键字.

后面很奇怪的东西因为这些symble/变量/函数不是用户程序提供的,是编译链接器提供的.

我想你应该去看编译器手册.

使用特权

评论回复
5
dld2| | 2007-9-21 18:23 | 只看该作者

这是连接器自动生成的符号

《ARM体系结构与编程》的连接器部分。

使用特权

评论回复
6
bairg521| | 2007-9-21 19:19 | 只看该作者

网上有不少44b0启动代码的详细注释,你可以参考一下

当然,《ARM体系结构与编程》里也有介绍

使用特权

评论回复
7
阿南| | 2007-9-21 19:49 | 只看该作者

它是链接器生成的,相当于一个由链接器初始化好的变量,

或理解成常量.您可以参考44box或2410的具体启动代码去理解.如:
IMPORT  |Image$$RO$$Base|    ; Base of ROM code
IMPORT  |Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)
IMPORT  |Image$$RW$$Base|   ; Base of RAM to initialise
IMPORT  |Image$$ZI$$Base|   ; Base and limit of area
IMPORT  |Image$$ZI$$Limit|  ; to zero initialise

第一个就是ADS设置的RO BASE值,即目标代码的起始地址,第二个是它的结束地址,如果在ADS里设置了RW BASE,那么第三个就是该值了,如果没设置,链接器就让RW区的数据定位在RO数据的后面,所以也就等于RO Limit值.第四个ZI BASE是等于RW Limit的,因为ZI区域是紧接在RW数据后面的.这些值都是链接器产生的

RO数据也就是通常单片机所讲的程序代码,RW就是变量,如占用RAM里的内容,ZI就是初始化为0的数据变量.

使用特权

评论回复
8
新手forARM|  楼主 | 2007-9-21 21:25 | 只看该作者

这段代码的意思基本上能理解!

这段代码的意思基本上能理解!RO、RW、ZI段的具体作用和含义也能基本能弄懂。俺只是想进一步深入的了解一下里面的语法结构!

比如:IMPORT  |Image$$RO$$Base|
1、IMPORT是汇编语言的伪操作,这个没有问题;
2、两个竖线是怎么个用法? 
3、Image  、$$、Base等关键詞的具体用法?在哪里的资料有说明?

使用特权

评论回复
9
阿南| | 2007-9-21 21:28 | 只看该作者

呵呵,不知道当年初学时有没有找过,也忘了

您可以在ADS的技术手册,帮助文档等搜,找到了,通报下,让我们大伙也补补基础

使用特权

评论回复
10
walnutcy| | 2007-9-21 22:27 | 只看该作者

在编译器的那几本手册里有讲的,前几天还看到过,呵呵

使用特权

评论回复
11
wowow| | 2007-9-21 22:28 | 只看该作者

有些东西可以暂时忽略过去

如果你用c的话这些东西都基本都被编译器掩盖了。只要弄一个合适的初绍化文件,再弄清楚分散加载之类的,后面都是c语言的工作了。

使用特权

评论回复
12
biao.l| | 2007-9-21 22:52 | 只看该作者

还没有考虑其语法问题啊,知道为什么就算了,唉,没有探索精

使用特权

评论回复
13
shang21ic| | 2007-9-22 00:23 | 只看该作者

建议大家用keil 或者 iar

ads太不好用了

使用特权

评论回复
14
新手forARM|  楼主 | 2007-9-22 09:05 | 只看该作者

keil没有用过,IAR对小程序好用!大程序很容易死机!

keil没有用过,IAR对小程序好用!大程序很容易死机!
另外,个人认为嵌入式是以C为主,但是汇编语言对底层、硬件操作是必须的!
所以个人认为汇编一定要掌握!

使用特权

评论回复
15
新手forARM|  楼主 | 2007-9-22 09:22 | 只看该作者

TO walnutcy

TO walnutcy 
谢谢!
另外,谢谢各位的支持!

使用特权

评论回复
16
xieqin| | 2007-9-22 09:23 | 只看该作者

最好别用有IDE的开发工具

要想深入领会编译链接, 最好的方法还是用makefile.

把ADS或keil所带的编译器armasm,armcc,...armlink及lib,inc都拷贝出来.
通过makefile去管理整个工程的编译.

一键编译的感觉是很爽的. 甚至是一键编译+下载+调试. 

使用特权

评论回复
17
dld2| | 2007-9-22 09:26 | 只看该作者

生成符号表,可以看到程序数据的定位各段的大小

在ADS的设置中:
linker->ARM Linker->Listings中:
勾选Image map和Symbols。再输入一个文件名。
在程序链接后可以生成一个符号表。可以看到程序和数据的定位,以及各个段的大小、位置。
可以用来调试。

使用特权

评论回复
18
新手forARM|  楼主 | 2007-9-22 09:53 | 只看该作者

这是连接器自动生成的符号?

这是连接器自动生成的符号?
这段代码是在源程序里面的啊?
我有点晕了!

使用特权

评论回复
19
dld2| | 2007-9-22 10:13 | 只看该作者

《ARM体系机构与编程》的11.3节

使用特权

评论回复
20
新手forARM|  楼主 | 2007-9-22 10:23 | 只看该作者

是不是可以这样去理解?

是不是可以这样去理解?
|Image$$RO$$Base|    ; Base of ROM code
|Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)
|Image$$RW$$Base|   ; Base of RAM to initialise
|Image$$ZI$$Base|   ; Base and limit of area
|Image$$ZI$$Limit|  ; to zero initialise
这些链接信息是在编译的时候由编译器产生的,其实这些信息就相当于我们在程序里面所定义的变量,而我们只需用IMPORTP这样的汇编伪操作去做一下声明,然后在下面就可以用了?

如:以下是IMPORT声明
IMPORT      |Image$$EXSRAM$$Base|      ; End of ROM 
IMPORT      |Image$$EXSRAM$$Length|      ; End of ROM                 IMPORT      |Load$$EXSRAM$$Base|       ; Base of RAM to initialise
IMPORT      |Image$$EXSRAM$$ZI$$Base|       ; Base and limit of area
IMPORT      |Image$$EXSRAM$$ZI$$Limit|      ; to zero initialise
                
IMPORT      |Image$$INTERSRAM$$Base|
IMPORT      |Image$$INTERSRAM$$Length|
IMPORT      |Load$$INTERSRAM$$Base|
IMPORT      |Image$$INTERSRAM$$ZI$$Base|
IMPORT      |Image$$INTERSRAM$$ZI$$Limit|

以下是应用:
ldr         r0, =|Load$$INTERSRAM$$Base| ; Get pointer to ROM data
ldr         r1, =|Image$$INTERSRAM$$Base|  ; and RAM copy
ldr         r4, =|Image$$INTERSRAM$$Length|  ; and RAM copy
ldr         r3, =|Image$$INTERSRAM$$ZI$$Base|  ; Zero init base => top of initialised data

能不能这样去理解?3s!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

37

帖子

1

粉丝