现在的位置: 首页 > 综合 > 正文

高通平台调试研究(-)

2013年08月24日 ⁄ 综合 ⁄ 共 1195字 ⁄ 字号 评论关闭

180-V6107-1_Rev_A_Debug_Troubleshoot.pdf

 

函数调用的时候  R0-R3传递4个参数,其余的通过栈来保存,并且参数从右向左顺序入栈。

R13  是栈指针  stack pointer(SP),它不用作其他的用途,一直指向栈中当前的位置。当context switch时,REX利用SP来切换不同task的执行(把sp指向不同task的栈)。

 

R14一般保存返回地址。

PC R15保存下一条指令。

 

BL跳转指令:跳转之前,会在寄存器R14中保存PC的当前内容,因此可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。

 

BL Label;  当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中。

 

 

 

R13SP)地址是0x140218FC.

输入命令:d.dump ui_stack /BYTE UI stack,如上图。

看到如下的值,此时push{r1-r7, r14}已经被执行:

Address 0x140218FC Value 0x1411FC78 – Contents of R1 <- SP points here

0x14021900 0x00000001 – Contents of R2

0x14021904 0x00142BE3 – Contents of R3

0x14021908 0x00000000 – Contents of R4

0x1402191C 0x1411F438 – Contents of R5

0x14021920 0x14120338 – Contents of R6

0x14021924 0x14120358 – Contents of R7

0x14021928 0x00142BEB – R14 - return address

R14的值返回下一条命令,执行uiuasmsn_init().

 

FIQ fast  interrupt,它比IRQ中断优先级高。

FIQ interrupt vector:快速中断请求向量表。当异常或者中断发生的时候,处理器设置PC为一个特殊的内存地址(faster RAM memory)。这个地址叫做中断向量中断向量入口是中断、异常的分支入口。.

 

REXINTLOCK()INTFREE()可以控制FIQIRQ中断的使能。

FIQ中断每1.25ms就会产生,因此这个中断锁定时间不能长于1.25ms

 

TASKLOCK保护当前task活动状态不被别的task取代,但是不会保护不被中断。

 

INTLOCK()INTFREE()使用:

锁定中断前,INTLOCK将保存当前IRQ/FIQ标识的状态。这个值可能是0(中断已经使能了,在锁定前),或且非0(在锁定前中断没有使能)。

 

#define INTLOCK( ) { dword sav = rex_int_lock();

#define INTFREE( ) if(!sav) (void)rex_int_free();}

 

 

 

抱歉!评论已关闭.