=========================================================================== 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中,这样做,唔,未必是个好主意. =========================================================================== |