===========================================================================
2006/05/09
启动代码中的exit是做什么的?
// Enter the C code
LDR R0,=?C?INIT
TST R0,#1 ; Bit-0 set: INIT is Thumb
LDREQ LR,=exit?A ; ARM Mode
LDRNE LR,=exit?T ; Thumb Mode
BX R0
ENDP
PUBLIC exit?A
exit?A PROC CODE32
B exit?A
ENDP
PUBLIC exit?T
exit?T PROC CODE16
exit: B exit?T
ENDP
是个死循环,没什么用途,不是?
错,有用.你不用象在C51中的main函数一样,最后都加一个死循环了.
// in c51
void main()
{
//...........
while(1) // 很多初学51的朋友因为没意识到死循环的重要,犯了很多错误,
;
}
在CARM中,当main()执行完毕,将进入exit.你因而省略了写死循环的步骤.
exit?A 用于处理THUMB代码从main的返回
exit?T 用于处理ARM代码从main的返回
[题外] 为什么当时C51的编译(连接)器不做这样的处理呢,如果这样做了,会使人少犯点无意的错误.
唔,我不知道.
我唯一能想到的原因,是基于RAM的考虑.
如果要这样做,startup code势必向main传递一个地址指针,价值2个字节.
在资源宝贵的51中,这样做,唔,未必是个好主意.
===========================================================================
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |