请教ARM汇编中的一些问题!

wlj082582   2008-12-25 22:45 楼主
[ | ]中括号中间再加条竖线是什么意思,比如:
 [ {CONFIG} = 16
THUMBCODE SETL  {TRUE}
            CODE32
            |   
THUMBCODE SETL  {FALSE}
  ]  这段表示什么意思?




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
这些|...|双竖线中间的内容是什么意思?

以下这些应用的双竖线是什么意思?
;Copy and paste RW data/zero initialized data
        ldr        r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
        ldr        r1, =|Image$$RW$$Base|  ; and RAM copy
        ldr        r3, =|Image$$ZI$$Base|  
       
        ;Zero init base => top of initialised data
        cmp        r0, r1      ; Check that they are different
        beq        %F2
1      
        cmp        r1, r3      ; Copy init data
        ldrcc        r2, [r0], #4    ;--> LDRCC r2, [r0] + ADD r0, r0, #4         
        strcc        r2, [r1], #4    ;--> STRCC r2, [r1] + ADD r1, r1, #4
        bcc        %B1
2      
        ldr        r1, =|Image$$ZI$$Limit| ; Top of zero init segment
        mov        r2, #0
3      
        cmp        r3, r1      ; Zero init
        strcc        r2, [r3], #4
        bcc        %B3




这个SMRDATA DATA及其后面的一段定义是什么意思?
SMRDATA DATA
; Memory configuration should be optimized for best performance
; The following parameter is not optimized.                     
; Memory access cycle parameter strategy
; 1) The memory settings is  safe parameters even at HCLK=75Mhz.
; 2) SDRAM refresh period is for HCLK=75Mhz.

        DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
            DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))   ;GCS0
            DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))   ;GCS1
            DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))   ;GCS2
            DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))   ;GCS3
            DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))   ;GCS4
            DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))   ;GCS5
            DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6
            DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7
            DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)   



        DCD 0x32            ;SCLK power saving mode, BANKSIZE 128M/128M

            DCD 0x30            ;MRSR6 CL=3clk
            DCD 0x30            ;MRSR7
;            DCD 0x20            ;MRSR6 CL=2clk
;            DCD 0x20            ;MRSR7

            ALIGN







在2410init.s或2440init.s中有个IsrIRQ标号,估计是个外中断的服务程序,
其它异常的向量在2410init.s或2440init.s中都定了地址,但这个外部中断异常好像还未定出个向量,所以不知发生中断异常后程序怎么知道要来这里IsrIRQ执行

上述问题如能回答一两个就是高手了!可以进ARM公司了

回复评论 (6)

引用: 引用楼主 sunboyljp 的帖子:
上述问题如能回答一两个就是高手了!可以进ARM公司了


这话不能乱说啊,这样ARM非关门不可。
————————————————————————————————————————
[  ]相当于
相当于{}。|相当于else——这个在ARM的一些官文有的
有了上面
[ {CONFIG} = 16
THUMBCODE SETL  {TRUE}
    CODE32
    |  
THUMBCODE SETL  {FALSE}
  ]  这段表示什么意思?
——这个不用说你就知道什么意思了。

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
这些|...|双竖线中间的内容是什么意思?

这个|Image$$RO$$Limit|类似一个地址,这个在ADS的文档应该有说明。其实从程序中使用来看,就可以推测他是什么意思了
这个SMRDATA DATA及其后面的一段定义是什么意思?
————————————————————————
这个就是个数据段啊,类似C语言的数组。这个和微机原理类似的
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在2410init.s或2440init.s中有个IsrIRQ标号,估计是个外中断的服务程序,
其它异常的向量在2410init.s或2440init.s中都定了地址,但这个外部中断异常好像还未定出个向量,所以不知发生中断异常后程序怎么知道要来这里IsrIRQ执行 _________________________________________

这个异常和中断比较有意思。

下面是我在一本外文翻译的中断,异常以及向量表的部分
——————————————————————————————————————
2.4 Exceptions, Interrupts, and the Vector Table

When an exception or interrupt occurs, the processor sets the pc to a speci?c memory
address. The address is within a special address range called the vector table. The entries
in the vector table are instructions that branch to speci?c routines designed to handle a
particular exception or interrupt.

——当异常或者中断发生的时候,处理器设置PC为一个特殊的内存地址。这个地址叫做中断向量表。中断向量表入口是中断、异常的分支入口((*^__^*) 嘻嘻……,这个翻译的好烂,不过大家知道就可以了)。

The memory map address 0x00000000 is reserved for the vector table, a set of 32-bit
words. On some processors the vector table can be optionally located at a higher address
in memory (starting at the offset 0xffff0000). Operating systems such as Linux and
Microsoft’s embedded products can take advantage of this feature.

——内存映射地址0x00000000 是为中断向量表保留的。在某些处理器中断向量表地址为0xffff0000。某些操作系统如linux可以利用这个特征(其实wince就是采用0xffff0000作为中断向量表的地址,但是令人奇怪的是优龙的ADS bootloader的中断向量表地址是0x00000000 ,估计这是编译器决定了)。

When an exception or interrupt occurs, the processor suspends normal execution and
starts loading instructions fromthe exception vector table (see Table 2.6). Each vector table
entry contains a form of branch instruction pointing to the start of a speci?c routine:

——当异常或者中断发生的时候,处理器挂起正常执行的程序并开始加载中断向量表,每个中断入口包含一个指向 speci?c routine(这个不知道怎么翻译)的分支指令。

■ Reset vector is the location of the ?rst instruction executed by the processor when power
is applied. This instruction branches to the initialization code.

——复位向量是打开电源被处理器执行的第一条指令,这条指令branches to初始化代码
■ Unde?ned instruction vector is used when the processor cannot decode an instruction.

——未定义指令向量,被用在处理器无法解码指令的时候
■ Software interrupt vector is called when you execute a SWI instruction. The SWI
instruction is frequently used as themechanismto invoke an operating systemroutine.

——软件中断向量........软件中断指令常用在操作系统条用。
■ Prefetch abort vector occurs when the processor attempts to fetch an instruction froman
address without the correct access permissions. The actual abort occurs in the decode
stage.

——预取终止向量发生处理器试图取一个指令地址,且没有正确访问许可的时候,实际终止发生在解码阶段
■ Data abort vector is similar to a prefetch abort but is raised when an instruction attempts
to access data memory without the correct access permissions.

——数据终止向量类似预取终止,但是他发生在指令试图访问数据,且内存没有正确访问许可。
■ Interrupt request vector is used by external hardware to interrupt the normal execution
?ow of the processor. It can only be raised if IRQs are not masked in the cpsr.

——中断申请向量被用在外部硬件中断正常执行的程序,它只能在IRQs 没有被cpsr屏蔽的情况下。

——————我翻译的,很烂 的。见笑了
这是我的博客原文地址,有图的。http://blog.eeworld.net/gooogleman/archive/2008/12/24/3597175.aspx



点赞  2008-12-25 23:07
[ | ] 是ARM汇编控制伪指令,就是 IF ELSE ENDIF,简写成 [ | ]
IsrIRQ好像是非向量中断通过执行IsrIRQ判断中断源,找到相应HandlerIRQ的地址
点赞  2008-12-25 23:08
好辛苦啊,才20分啊。估计过了这个月我就没有激情回答了。哈哈
要看一些英文书准备明年考试了
点赞  2008-12-25 23:10
不要乱讲,解释这些问题离ARM大门还有十万八千里
点赞  2008-12-25 23:11
引用: 引用 2 楼 navi_dx 的回复:
[  ]相当于
相当于{}。
——————这里搞错了,navi_dx 才是对的。晚上老是容易出错了
[ | ] 是ARM汇编控制伪指令,就是 IF ELSE ENDIF,简写成 [ | ]
IsrIRQ好像是非向量中断通过执行IsrIRQ判断中断源,找到相应HandlerIRQ的地址


在ADS下
中断向量表放在0X00000000下面的啊
向量表存着对应的HandlerIRQ

wince下中断向量表在0XFFFF0000
点赞  2008-12-25 23:13
引用: 引用 4 楼 navi_dx 的回复:
不要乱讲,解释这些问题离ARM大门还有十万八千里


就是,这个只是基础。不要让学校的小弟看见了,否则他们以为看几篇ARM官文就可以不用学习了。O(∩_∩)O哈哈~

————————————

感觉操作系统啊,可靠性等啊,

Bootloader架构啊啊
wince
架构啊。文件系统等等。不可小觑。
点赞  2008-12-25 23:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复